Changes in src/World.cpp [57adc7:6e97e5]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/World.cpp
r57adc7 r6e97e5 15 15 #include "Descriptors/MoleculeDescriptor.hpp" 16 16 #include "Descriptors/MoleculeDescriptor_impl.hpp" 17 #include "Descriptors/SelectiveIterator_impl.hpp" 17 18 #include "Actions/ManipulateAtomsProcess.hpp" 19 20 #include "Patterns/Singleton_impl.hpp" 18 21 19 22 using namespace std; … … 170 173 atomId_t id = *(atomIdPool.begin()); 171 174 atomIdPool.erase(id); 175 return id; 172 176 } 173 177 } … … 206 210 /******************************* Iterators ********************************/ 207 211 208 / *209 * Actual Implementation of the iterators can be found in WorldIterators.cpp 210 */ 212 // Build the AtomIterator from template 213 CONSTRUCT_SELECTIVE_ITERATOR(atom*,World::AtomSet,AtomDescriptor); 214 211 215 212 216 World::AtomIterator World::getAtomIter(AtomDescriptor descr){ 213 return AtomIterator(descr,this); 214 } 215 216 World::AtomSet::iterator World::atomEnd(){ 217 return atoms.end(); 218 } 217 return AtomIterator(descr,atoms); 218 } 219 220 World::AtomIterator World::atomEnd(){ 221 return AtomIterator(AllAtoms(),atoms,atoms.end()); 222 } 223 224 // build the MoleculeIterator from template 225 CONSTRUCT_SELECTIVE_ITERATOR(molecule*,World::MoleculeSet,MoleculeDescriptor); 219 226 220 227 World::MoleculeIterator World::getMoleculeIter(MoleculeDescriptor descr){ 221 return MoleculeIterator(descr, this);222 } 223 224 World::Molecule Set::iterator World::moleculeEnd(){225 return molecules.end();228 return MoleculeIterator(descr,molecules); 229 } 230 231 World::MoleculeIterator World::moleculeEnd(){ 232 return MoleculeIterator(AllMolecules(),molecules,molecules.end()); 226 233 } 227 234 228 235 /******************************* Singleton Stuff **************************/ 229 230 // TODO: Hide boost-thread using Autotools stuff when no threads are used231 World* World::theWorld = 0;232 boost::mutex World::worldLock;233 236 234 237 World::World() : … … 260 263 } 261 264 262 World* World::get(){ 263 // boost supports RAII-Style locking, so we don't need to unlock 264 boost::mutex::scoped_lock guard(worldLock); 265 if(!theWorld) { 266 theWorld = new World(); 267 } 268 return theWorld; 269 } 270 271 void World::destroy(){ 272 // boost supports RAII-Style locking, so we don't need to unlock 273 boost::mutex::scoped_lock guard(worldLock); 274 delete theWorld; 275 theWorld = 0; 276 } 277 278 World* World::reset(){ 279 World* oldWorld = 0; 280 { 281 // boost supports RAII-Style locking, so we don't need to unlock 282 boost::mutex::scoped_lock guard(worldLock); 283 284 oldWorld = theWorld; 285 theWorld = new World(); 286 // oldworld does not need protection any more, 287 // since we should have the only reference 288 289 // worldLock handles access to the pointer, 290 // not to the object 291 } // scope-end releases the lock 292 293 // we have to let all the observers know that the 294 // oldWorld was destroyed. oldWorld calls subjectKilled 295 // upon destruction. Every Observer getting that signal 296 // should see that it gets the updated new world 297 delete oldWorld; 298 return theWorld; 299 } 265 // Explicit instantiation of the singleton mechanism at this point 266 267 CONSTRUCT_SINGLETON(World) 300 268 301 269 /******************************* deprecated Legacy Stuff ***********************/
Note:
See TracChangeset
for help on using the changeset viewer.