mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-19 04:01:29 +00:00
99 lines
2.2 KiB
C++
99 lines
2.2 KiB
C++
#include "item_container.h"
|
|
#include "item_container_default_serialization.h"
|
|
#include <utility>
|
|
|
|
struct EQEmu::ItemContainer::impl
|
|
{
|
|
std::map<int, std::shared_ptr<ItemInstance>> items_;
|
|
ItemContainerSerializationStrategy *serialize_strat_;
|
|
};
|
|
|
|
EQEmu::ItemContainer::ItemContainer()
|
|
{
|
|
impl_ = new impl();
|
|
impl_->serialize_strat_ = new ItemContainerDefaultSerialization();
|
|
}
|
|
|
|
EQEmu::ItemContainer::ItemContainer(ItemContainerSerializationStrategy *strategy) {
|
|
impl_ = new impl();
|
|
impl_->serialize_strat_ = strategy;
|
|
}
|
|
|
|
EQEmu::ItemContainer::~ItemContainer()
|
|
{
|
|
if(impl_) {
|
|
delete impl_->serialize_strat_;
|
|
delete impl_;
|
|
}
|
|
}
|
|
|
|
EQEmu::ItemContainer::ItemContainer(ItemContainer &&other) {
|
|
impl_ = other.impl_;
|
|
other.impl_ = nullptr;
|
|
}
|
|
|
|
EQEmu::ItemContainer& EQEmu::ItemContainer::operator=(ItemContainer &&other) {
|
|
if(this == &other)
|
|
return *this;
|
|
|
|
impl_ = other.impl_;
|
|
other.impl_ = nullptr;
|
|
return *this;
|
|
}
|
|
|
|
std::shared_ptr<EQEmu::ItemInstance> 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<EQEmu::ItemInstance>(nullptr);
|
|
}
|
|
|
|
bool EQEmu::ItemContainer::Put(const int slot_id, std::shared_ptr<ItemInstance> inst) {
|
|
if(!inst)
|
|
return false;
|
|
|
|
auto iter = impl_->items_.find(slot_id);
|
|
if(iter == impl_->items_.end()) {
|
|
impl_->items_[slot_id] = inst;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
uint32 EQEmu::ItemContainer::Size() {
|
|
return (uint32)impl_->items_.size();
|
|
}
|
|
|
|
uint32 EQEmu::ItemContainer::Size() const {
|
|
return (uint32)impl_->items_.size();
|
|
}
|
|
|
|
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);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool EQEmu::ItemContainer::Serialize(MemoryBuffer &buf, int container_number) {
|
|
if(impl_->serialize_strat_) {
|
|
return impl_->serialize_strat_->Serialize(buf, container_number, impl_->items_);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
EQEmu::ItemContainer::ItemContainerIter EQEmu::ItemContainer::Begin() {
|
|
return impl_->items_.begin();
|
|
}
|
|
|
|
EQEmu::ItemContainer::ItemContainerIter EQEmu::ItemContainer::End() {
|
|
return impl_->items_.end();
|
|
}
|