diff --git a/entities/storage_entity.cpp b/entities/storage_entity.cpp index 31f34d6..d0da1d2 100644 --- a/entities/storage_entity.cpp +++ b/entities/storage_entity.cpp @@ -20,6 +20,42 @@ const QVector storage_entity::cargo() { return this->_cargo; } +void storage_entity::add_cargo(cargo_entity object, bool &success) { + success = ((int)this->_capacity - (int)object.volume()) > 0; + if (success) { + this->_cargo.push_back(object); + this->_capacity -= object.volume(); + } +} + +cargo_entity storage_entity::get_cargo(unsigned long long oid, bool &found) { + cargo_entity ent; + found = false; + + auto vit = this->_cargo.begin(); + for (; vit != this->_cargo.end(); vit++) { + if ((*vit).id() == oid) { + ent = *vit; + found = true; + break; + } + } + return ent; +} + +void storage_entity::withdraw_cargo(unsigned long long oid, bool &success) { + success = false; + auto vit = this->_cargo.begin(); + for (; vit != this->_cargo.end(); vit++) { + if ((*vit).id() == oid) { + this->_capacity += (*vit).volume(); + this->_cargo.erase(vit); + success = true; + break; + } + } +} + void storage_entity::serialize(QDataStream &output) { output << this->_id << this->_capacity << this->_cargo.size(); for (auto item : this->_cargo) { diff --git a/entities/storage_entity.h b/entities/storage_entity.h index 40210fe..c4285e0 100644 --- a/entities/storage_entity.h +++ b/entities/storage_entity.h @@ -24,6 +24,10 @@ public: unsigned int capacity(); const QVector cargo(); + void add_cargo(cargo_entity object, bool &success); + cargo_entity get_cargo(unsigned long long oid, bool &found); + void withdraw_cargo(unsigned long long oid, bool &success); + void serialize(QDataStream &output); void deserialize(QDataStream &input); };