#include "item_container.h" #include #include struct EQEmu::ItemContainer::impl { std::map> items; }; EQEmu::ItemContainer::ItemContainer() { impl_ = new impl(); } EQEmu::ItemContainer::~ItemContainer() { if(impl_) delete impl_; } EQEmu::ItemContainer::ItemContainer(ItemContainer &&other) { impl_ = other.impl_; other.impl_ = nullptr; } std::shared_ptr EQEmu::ItemContainer::Get(const int slot_id) { auto iter = impl_->items.find(slot_id); if(iter != impl_->items.end()) { return iter->second; } return std::shared_ptr(nullptr); } bool EQEmu::ItemContainer::Put(const int slot_id, std::shared_ptr inst) { if(!inst) return false; auto iter = impl_->items.find(slot_id); if(iter == impl_->items.end()) { impl_->items[slot_id] = inst; //trigger insert in slot_id return true; } return false; } bool EQEmu::ItemContainer::Delete(const int slot_id) { auto iter = impl_->items.find(slot_id); if(iter == impl_->items.end()) { return false; } else { impl_->items.erase(iter); //trigger delete in slotid return true; } } bool EQEmu::ItemContainer::Serialize(MemoryBuffer &buf, int container_number) { if(impl_->items.size() == 0) { return false; } for(auto &iter : impl_->items) { buf.Write(container_number); buf.Write(iter.first); buf.Write(iter.second.get()); } return true; }