Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/World.cpp

    r57adc7 r6e97e5  
    1515#include "Descriptors/MoleculeDescriptor.hpp"
    1616#include "Descriptors/MoleculeDescriptor_impl.hpp"
     17#include "Descriptors/SelectiveIterator_impl.hpp"
    1718#include "Actions/ManipulateAtomsProcess.hpp"
     19
     20#include "Patterns/Singleton_impl.hpp"
    1821
    1922using namespace std;
     
    170173    atomId_t id = *(atomIdPool.begin());
    171174    atomIdPool.erase(id);
     175    return id;
    172176  }
    173177}
     
    206210/******************************* Iterators ********************************/
    207211
    208 /*
    209  * Actual Implementation of the iterators can be found in WorldIterators.cpp
    210  */
     212// Build the AtomIterator from template
     213CONSTRUCT_SELECTIVE_ITERATOR(atom*,World::AtomSet,AtomDescriptor);
     214
    211215
    212216World::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
     220World::AtomIterator World::atomEnd(){
     221  return AtomIterator(AllAtoms(),atoms,atoms.end());
     222}
     223
     224// build the MoleculeIterator from template
     225CONSTRUCT_SELECTIVE_ITERATOR(molecule*,World::MoleculeSet,MoleculeDescriptor);
    219226
    220227World::MoleculeIterator World::getMoleculeIter(MoleculeDescriptor descr){
    221   return MoleculeIterator(descr,this);
    222 }
    223 
    224 World::MoleculeSet::iterator World::moleculeEnd(){
    225   return molecules.end();
     228  return MoleculeIterator(descr,molecules);
     229}
     230
     231World::MoleculeIterator World::moleculeEnd(){
     232  return MoleculeIterator(AllMolecules(),molecules,molecules.end());
    226233}
    227234
    228235/******************************* Singleton Stuff **************************/
    229 
    230 // TODO: Hide boost-thread using Autotools stuff when no threads are used
    231 World* World::theWorld = 0;
    232 boost::mutex World::worldLock;
    233236
    234237World::World() :
     
    260263}
    261264
    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
     267CONSTRUCT_SINGLETON(World)
    300268
    301269/******************************* deprecated Legacy Stuff ***********************/
Note: See TracChangeset for help on using the changeset viewer.