Changes in src/World.hpp [6e97e5:31af19]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/World.hpp
r6e97e5 r31af19 16 16 #include <boost/shared_ptr.hpp> 17 17 18 #include "types.hpp" 19 #include "Descriptors/SelectiveIterator.hpp" 18 #include "defs.hpp" 20 19 #include "Patterns/Observer.hpp" 21 20 #include "Patterns/Cacheable.hpp" 22 #include "Patterns/Singleton.hpp"23 24 21 25 22 // forward declarations … … 36 33 class AtomsCalculation; 37 34 38 39 40 class World : public Singleton<World>, public Observable 35 class World : public Observable 41 36 { 42 43 // Make access to constructor and destructor possible from inside the singleton44 friend class Singleton<World>;45 46 37 // necessary for coupling with descriptors 47 38 friend class AtomDescriptor_impl; … … 54 45 template<typename> friend class AtomsCalculation; 55 46 public: 56 57 // Types for Atom and Molecule structures58 47 typedef std::map<atomId_t,atom*> AtomSet; 59 48 typedef std::map<moleculeId_t,molecule*> MoleculeSet; … … 161 150 162 151 // Atoms 163 typedef SelectiveIterator<atom*,AtomSet,AtomDescriptor> AtomIterator; 152 153 class AtomIterator : 154 public std::iterator<std::iterator_traits<AtomSet::iterator>::difference_type, 155 std::iterator_traits<AtomSet::iterator>::value_type, 156 std::iterator_traits<AtomSet::iterator>::pointer, 157 std::iterator_traits<AtomSet::iterator>::reference> 158 { 159 public: 160 161 typedef AtomSet::iterator _Iter; 162 typedef _Iter::value_type value_type; 163 typedef _Iter::difference_type difference_type; 164 typedef _Iter::pointer pointer; 165 typedef _Iter::reference reference; 166 typedef _Iter::iterator_category iterator_category; 167 168 169 AtomIterator(); 170 AtomIterator(AtomDescriptor, World*); 171 AtomIterator(const AtomIterator&); 172 AtomIterator& operator=(const AtomIterator&); 173 AtomIterator& operator++(); // prefix 174 AtomIterator operator++(int); // postfix with dummy parameter 175 bool operator==(const AtomIterator&); 176 bool operator==(const AtomSet::iterator&); 177 bool operator!=(const AtomIterator&); 178 bool operator!=(const AtomSet::iterator&); 179 atom* operator*(); 180 181 int getCount(); 182 protected: 183 void advanceState(); 184 AtomSet::iterator state; 185 boost::shared_ptr<AtomDescriptor_impl> descr; 186 int index; 187 188 World* world; 189 }; 164 190 165 191 /** … … 175 201 * used for internal purposes, like AtomProcesses and AtomCalculations. 176 202 */ 177 Atom Iterator atomEnd();203 AtomSet::iterator atomEnd(); 178 204 179 205 // Molecules 180 206 181 typedef SelectiveIterator<molecule*,MoleculeSet,MoleculeDescriptor> MoleculeIterator; 207 class MoleculeIterator : 208 public std::iterator<std::iterator_traits<MoleculeSet::iterator>::difference_type, 209 std::iterator_traits<MoleculeSet::iterator>::value_type, 210 std::iterator_traits<MoleculeSet::iterator>::pointer, 211 std::iterator_traits<MoleculeSet::iterator>::reference> 212 { 213 public: 214 215 typedef MoleculeSet::iterator _Iter; 216 typedef _Iter::value_type value_type; 217 typedef _Iter::difference_type difference_type; 218 typedef _Iter::pointer pointer; 219 typedef _Iter::reference reference; 220 typedef _Iter::iterator_category iterator_category; 221 222 MoleculeIterator(); 223 MoleculeIterator(MoleculeDescriptor, World*); 224 MoleculeIterator(const MoleculeIterator&); 225 MoleculeIterator& operator=(const MoleculeIterator&); 226 MoleculeIterator& operator++(); // prefix 227 MoleculeIterator operator++(int); // postfix with dummy parameter 228 bool operator==(const MoleculeIterator&); 229 bool operator==(const MoleculeSet::iterator&); 230 bool operator!=(const MoleculeIterator&); 231 bool operator!=(const MoleculeSet::iterator&); 232 molecule* operator*(); 233 234 int getCount(); 235 protected: 236 void advanceState(); 237 MoleculeSet::iterator state; 238 boost::shared_ptr<MoleculeDescriptor_impl> descr; 239 int index; 240 241 World* world; 242 }; 182 243 183 244 /** … … 193 254 * used for internal purposes, like MoleculeProcesses and MoleculeCalculations. 194 255 */ 195 Molecule Iterator moleculeEnd();256 MoleculeSet::iterator moleculeEnd(); 196 257 197 258 … … 206 267 207 268 periodentafel *periode; 208 public:209 269 AtomSet atoms; 210 private:211 270 std::set<atomId_t> atomIdPool; //<!stores the pool for all available AtomIds below currAtomId 212 271 atomId_t currAtomId; //!< stores the next available Id for atoms 213 272 MoleculeSet molecules; 214 273 moleculeId_t currMoleculeId; 274 275 276 /***** singleton Stuff *****/ 277 public: 278 279 /** 280 * get the currently active instance of the World. 281 */ 282 static World* get(); 283 284 /** 285 * destroy the currently active instance of the World. 286 */ 287 static void destroy(); 288 289 /** 290 * destroy the currently active instance of the World and immidiately 291 * create a new one. Use this to reset while somebody is still Observing 292 * the world and should reset the observed instance. All observers will be 293 * sent the subjectKille() message from the old world. 294 */ 295 static World* reset(); 296 215 297 private: 216 298 /** … … 225 307 */ 226 308 virtual ~World(); 309 310 static World *theWorld; 311 // this mutex only saves the singleton pattern... 312 // use other mutexes to protect internal data as well 313 // this mutex handles access to the pointer, not to the object!!! 314 static boost::mutex worldLock; 227 315 228 316 /*****
Note:
See TracChangeset
for help on using the changeset viewer.