00001 #ifndef GLSTORAGEVECTOR_H_
00002 #define GLSTORAGEVECTOR_H_
00003 #include <vector>
00004 #include "GLBaseOrganism.h"
00005 #include "GLBaseOrganismStorage.h"
00006 #include "GLIteratorStorageStl.h"
00007 using namespace std;
00011 class GLStorageVector : public GLBaseOrganismStorage
00012 {
00013 public:
00020 GLStorageVector(unsigned expected_size = 0);
00021
00026 virtual ~GLStorageVector();
00027
00037 virtual bool addOrganism(GLBaseOrganism* organism,
00038 GLConstants::TTwinsFlags twins =
00039 GLConstants::NO_TWINS);
00040
00044 void emptyStorage();
00045
00050 virtual GLBaseOrganismStorage::iterator* getIterator();
00051
00058 virtual GLBaseOrganismStorage::const_iterator* getIteratorConst() const;
00059
00066 int findOrganismIndex(const GLBaseOrganism* organism,
00067 bool soft = true) const;
00068
00073 GLBaseOrganism* getOrganismPointer(unsigned i);
00074
00079 const GLBaseOrganism* getOrganismPointer(unsigned i) const;
00080
00098 virtual int
00099 getOrganismsVector(vector<GLBaseOrganism*>& container,
00100 GLConstants::TStorageFilling fill =
00101 GLConstants::APPEND,
00102 int size = -1,
00103 bool copy_clones = false);
00104
00120 virtual int
00121 getOrganismsVector(vector<const GLBaseOrganism*>& container,
00122 GLConstants::TStorageFilling fill =
00123 GLConstants::APPEND,
00124 int size = -1,
00125 bool copy_clones = false) const;
00126
00131 virtual int getSize() const
00132 { return m_storage.size(); }
00133
00140 virtual void merge(const GLBaseOrganismStorage* storage,
00141 GLConstants::TTwinsFlags twins =
00142 GLConstants::NO_TWINS);
00143
00150 virtual int trimSize(unsigned int new_size);
00151
00152 private:
00153
00154 TGLVectorOfOrganisms m_storage;
00155
00156
00157 template <class TIssuer, class TStlIterator, class TOrganism>
00158 class BidirectionalIterator;
00159 typedef GLIteratorStorageStl<TGLVectorOfOrganisms,
00160 TGLVectorOfOrganisms::iterator,
00161 GLBaseOrganism*>
00162 iterator;
00163 typedef GLIteratorStorageStl<const TGLVectorOfOrganisms,
00164 TGLVectorOfOrganisms::const_iterator,
00165 const GLBaseOrganism* const>
00166 const_iterator;
00167 };
00168
00169 #endif