Ignore:
Timestamp:
Feb 19, 2010, 11:49:42 AM (16 years ago)
Author:
Tillmann Crueger <crueger@…>
Children:
9ef76a
Parents:
cbc27f
git-author:
Tillmann Crueger <crueger@…> (02/19/10 11:31:39)
git-committer:
Tillmann Crueger <crueger@…> (02/19/10 11:49:42)
Message:

Added a class that allows constructing Processes that have a result

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/World.cpp

    rcbc27f r5d4edf  
    1313#include "Descriptors/AtomDescriptor.hpp"
    1414#include "Descriptors/AtomDescriptor_impl.hpp"
     15#include "Actions/ManipulateAtomsProcess.hpp"
    1516
    1617using namespace std;
     
    4748}
    4849
     50
     51ManipulateAtomsProcess* World::manipulateAtoms(boost::function<void(atom*)> op,std::string name,AtomDescriptor descr){
     52  return new ManipulateAtomsProcess(op, descr,name,true);
     53}
     54
    4955/******************************* Iterators ********************************/
     56
     57World::AtomIterator::AtomIterator(){
     58  state = World::get()->atomEnd();
     59}
    5060
    5161World::AtomIterator::AtomIterator(AtomDescriptor _descr, World* _world) :
    5262    descr(_descr.get_impl()),
    53     world(_world)
     63    world(_world),
     64    index(0)
    5465{
    5566  state = world->atoms.begin();
     
    5970World::AtomIterator::AtomIterator(const AtomIterator& rhs) :
    6071    state(rhs.state),
    61     descr(rhs.descr)
     72    descr(rhs.descr),
     73    index(rhs.index),
     74    world(rhs.world)
    6275  {}
    6376
     77World::AtomIterator& World::AtomIterator::operator=(const AtomIterator& rhs)
     78{
     79  if(&rhs!=this){
     80    state=rhs.state;
     81    descr=rhs.descr;
     82    index=rhs.index;
     83    world=rhs.world;
     84  }
     85  return *this;
     86}
     87
    6488World::AtomIterator& World::AtomIterator::operator++(){
     89  ++state;
     90  ++index;
    6591  advanceState();
     92  return *this;
     93}
     94
     95World::AtomIterator World::AtomIterator::operator++(int){
     96  AtomIterator res(*this);
     97  ++(*this);
     98  return res;
    6699}
    67100
     
    70103}
    71104
     105bool World::AtomIterator::operator==(const World::AtomList::iterator& rhs){
     106  return state==rhs;
     107}
     108
    72109bool World::AtomIterator::operator!=(const AtomIterator& rhs){
    73110  return state!=rhs.state;
    74111}
    75112
     113bool World::AtomIterator::operator!=(const World::AtomList::iterator& rhs){
     114  return state!=rhs;
     115}
     116
    76117atom* World::AtomIterator::operator*(){
    77118  return (*state).second;
     
    79120
    80121void World::AtomIterator::advanceState(){
    81   while(state!=world->atoms.end() && !descr->predicate(*state))
    82     state++;
     122  while((state!=world->atoms.end()) && (!descr->predicate(*state))){
     123    ++state;
     124    ++index;
     125  }
     126}
     127
     128int World::AtomIterator::getCount(){
     129  return index;
    83130}
    84131
    85132World::AtomIterator World::getAtomIter(AtomDescriptor descr){
    86133  return AtomIterator(descr,this);
     134}
     135
     136World::AtomList::iterator World::atomEnd(){
     137  return atoms.end();
    87138}
    88139
     
    98149    dummyId(0),
    99150    periode(new periodentafel),
    100     molecules_deprecated(new MoleculeListClass)
     151    molecules_deprecated(new MoleculeListClass),
     152    atoms()
    101153{
    102154  molecules_deprecated->signOn(this);
Note: See TracChangeset for help on using the changeset viewer.