00001 #ifndef GLBASEORGANISMSTORAGE_H_
00002 #define GLBASEORGANISMSTORAGE_H_
00003 #include <vector>
00004 #include "GLConstants.h"
00005 #include "GLIterators.h"
00006 using namespace std;
00007 class GLBaseOrganism;
00013 class GLBaseOrganismStorage
00014 {
00015 public:
00019 typedef GLBaseBidirectOrganismIterator iterator;
00023 typedef GLBaseBidirectOrganismIteratorConst const_iterator;
00024
00028 GLBaseOrganismStorage();
00029
00033 virtual ~GLBaseOrganismStorage();
00034
00043 virtual bool addOrganism(GLBaseOrganism* organism,
00044 GLConstants::TTwinsFlags twins =
00045 GLConstants::NO_TWINS) = 0;
00046
00053 virtual void deleteAllOrganisms(iterator* start = NULL);
00054
00061 virtual void deleteOrganisms(iterator* start = NULL);
00062
00068 virtual void emptyStorage() = 0;
00069
00083 virtual int fillFromVector(const vector<GLBaseOrganism*>& vector,
00084 GLConstants::TStorageFilling fill =
00085 GLConstants::APPEND,
00086 int size = -1);
00087
00099 virtual const GLBaseOrganism* findOrganism(
00100 const GLBaseOrganism* organism,
00101 bool soft = true) const;
00102
00107 virtual iterator* getIterator() = 0;
00108
00115 virtual const_iterator* getIteratorConst() const = 0;
00116
00121 GLConstants::TMemoryPolicy getMemoryPolicy() const
00122 { return m_free_memory; }
00123
00141 virtual int
00142 getOrganismsVector(vector<const GLBaseOrganism*>& container,
00143 GLConstants::TStorageFilling fill =
00144 GLConstants::APPEND,
00145 int size = -1,
00146 bool copy_clones = false) const;
00147
00165 virtual int
00166 getOrganismsVector(vector<GLBaseOrganism*>& container,
00167 GLConstants::TStorageFilling fill =
00168 GLConstants::APPEND,
00169 int size = -1,
00170 bool copy_clones = false);
00171
00176 virtual int getSize() const = 0;
00177
00184 virtual void merge(const GLBaseOrganismStorage* storage,
00185 GLConstants::TTwinsFlags twins =
00186 GLConstants::NO_TWINS) = 0;
00187
00192 void setMemoryPolicy(GLConstants::TMemoryPolicy new_policy)
00193 { m_free_memory = new_policy; }
00194
00202 virtual int trimSize(unsigned int new_size) = 0;
00203
00212 virtual void setMemoryLockForAllOrganisms(bool new_lock,
00213 iterator* start = NULL);
00214
00215 private:
00216
00217
00218
00219 GLConstants::TMemoryPolicy m_free_memory;
00220 };
00221
00222 #endif