aboutsummaryrefslogtreecommitdiff
path: root/src/staticobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/staticobject.h')
-rw-r--r--src/staticobject.h50
1 files changed, 33 insertions, 17 deletions
diff --git a/src/staticobject.h b/src/staticobject.h
index 03cd23cc8..eef090376 100644
--- a/src/staticobject.h
+++ b/src/staticobject.h
@@ -50,29 +50,24 @@ public:
*/
void insert(u16 id, const StaticObject &obj)
{
- if(id == 0)
- {
+ if (id == 0) {
m_stored.push_back(obj);
- }
- else
- {
- if(m_active.find(id) != m_active.end())
- {
- dstream<<"ERROR: StaticObjectList::insert(): "
- <<"id already exists"<<std::endl;
+ } else {
+ if (m_active.find(id) != m_active.end()) {
+ dstream << "ERROR: StaticObjectList::insert(): "
+ << "id already exists" << std::endl;
FATAL_ERROR("StaticObjectList::insert()");
}
- m_active[id] = obj;
+ setActive(id, obj);
}
}
void remove(u16 id)
{
assert(id != 0); // Pre-condition
- if(m_active.find(id) == m_active.end())
- {
- warningstream<<"StaticObjectList::remove(): id="<<id
- <<" not found"<<std::endl;
+ if (m_active.find(id) == m_active.end()) {
+ warningstream << "StaticObjectList::remove(): id=" << id << " not found"
+ << std::endl;
return;
}
m_active.erase(id);
@@ -81,13 +76,34 @@ public:
void serialize(std::ostream &os);
void deSerialize(std::istream &is);
+ // Never permit to modify outside of here. Only this object is responsible of m_stored and m_active modifications
+ const std::vector<StaticObject>& getAllStored() const { return m_stored; }
+ const std::map<u16, StaticObject> &getAllActives() const { return m_active; }
+
+ inline void setActive(u16 id, const StaticObject &obj) { m_active[id] = obj; }
+ inline size_t getActiveSize() const { return m_active.size(); }
+ inline size_t getStoredSize() const { return m_stored.size(); }
+ inline void clearStored() { m_stored.clear(); }
+ void pushStored(const StaticObject &obj) { m_stored.push_back(obj); }
+
+ bool storeActiveObject(u16 id);
+
+ inline void clear()
+ {
+ m_active.clear();
+ m_stored.clear();
+ }
+
+ inline size_t size()
+ {
+ return m_active.size() + m_stored.size();
+ }
+
+private:
/*
NOTE: When an object is transformed to active, it is removed
from m_stored and inserted to m_active.
- The caller directly manipulates these containers.
*/
std::vector<StaticObject> m_stored;
std::map<u16, StaticObject> m_active;
-
-private:
};