/* * WorldIterators.cpp * * Created on: Feb 25, 2010 * Author: crueger */ #include "Descriptors/AtomDescriptor.hpp" #include "Descriptors/AtomDescriptor_impl.hpp" #include "atom.hpp" #include "World.hpp" World::AtomIterator::AtomIterator(){ state = World::get()->atomEnd(); } World::AtomIterator::AtomIterator(AtomDescriptor _descr, World* _world) : descr(_descr.get_impl()), world(_world), index(0) { state = world->atoms.begin(); advanceState(); } World::AtomIterator::AtomIterator(const AtomIterator& rhs) : state(rhs.state), descr(rhs.descr), index(rhs.index), world(rhs.world) {} World::AtomIterator& World::AtomIterator::operator=(const AtomIterator& rhs) { if(&rhs!=this){ state=rhs.state; descr=rhs.descr; index=rhs.index; world=rhs.world; } return *this; } World::AtomIterator& World::AtomIterator::operator++(){ ++state; ++index; advanceState(); return *this; } World::AtomIterator World::AtomIterator::operator++(int){ AtomIterator res(*this); ++(*this); return res; } bool World::AtomIterator::operator==(const AtomIterator& rhs){ return state==rhs.state; } bool World::AtomIterator::operator==(const World::AtomSet::iterator& rhs){ return state==rhs; } bool World::AtomIterator::operator!=(const AtomIterator& rhs){ return state!=rhs.state; } bool World::AtomIterator::operator!=(const World::AtomSet::iterator& rhs){ return state!=rhs; } atom* World::AtomIterator::operator*(){ return (*state).second; } void World::AtomIterator::advanceState(){ while((state!=world->atoms.end()) && (!descr->predicate(*state))){ ++state; ++index; } } int World::AtomIterator::getCount(){ return index; }