Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/ActionSequence.cpp

    r5b0b98 r1fa107  
    88#include "Actions/ActionSequence.hpp"
    99#include "Actions/Action.hpp"
    10 
    11 #include "Helpers/Assert.hpp"
    1210
    1311using namespace std;
     
    3634}
    3735
    38 ActionSequence::stateSet ActionSequence::callAll(){
    39   stateSet states;
    40   for(actionSet::iterator it=actions.begin(); it!=actions.end(); it++){
    41     // we want to have a global bookkeeping for all actions in the sequence, so
    42     // we bypass the normal call
    43     Action::state_ptr state = (*it)->performCall();
    44     states.push_back(state);
    45   }
    46   return states;
     36void ActionSequence::callAll(){
     37  deque<Action*>::iterator it;
     38  for(it=actions.begin(); it!=actions.end(); it++)
     39    (*it)->call();
    4740}
    4841
    49 ActionSequence::stateSet ActionSequence::undoAll(stateSet states){
    50   ASSERT(canUndo(),"Trying to undo a sequence that contains methods that can't be undone");
    51   stateSet res;
    52   actionSet::reverse_iterator actionRit = actions.rbegin();
    53   stateSet::reverse_iterator stateRit = states.rbegin();
    54   for(;actionRit!=actions.rend();++actionRit,++stateRit){
    55     ASSERT(stateRit!=states.rend(),"End of states prematurely reached.");
    56     if((*actionRit)->shouldUndo()){
    57       Action::state_ptr newState = (*actionRit)->performUndo(*stateRit);
    58       // The order of the states has to correspond to the order of the actions
    59       // this is why we have to add at the beginning
    60       res.push_front(newState);
    61     }
    62     else{
    63       res.push_front(Action::success);
    64     }
    65   }
    66   return res;
    67 }
    68 
    69 ActionSequence::stateSet ActionSequence::redoAll(stateSet states){
    70   stateSet res;
    71   actionSet::iterator actionIt = actions.begin();
    72   stateSet::iterator stateIt = states.begin();
    73   for(;actionIt!=actions.end();++actionIt,++stateIt){
    74     ASSERT(stateIt!=states.end(),"End of states prematurely reached.");
    75     if((*actionIt)->shouldUndo()){
    76       Action::state_ptr newState =(*actionIt)->performRedo(*stateIt);
    77       res.push_back(newState);
    78     }
    79     else{
    80       res.push_back(Action::success);
    81     }
    82   }
    83   return res;
     42void ActionSequence::undoAll(){
     43  deque<Action*>::reverse_iterator rit;
     44  for(rit=actions.rbegin(); rit!=actions.rend(); rit++)
     45    (*rit)->undo();
    8446}
    8547
    8648bool ActionSequence::canUndo(){
    8749  bool canUndo=true;
    88   for(deque<Action*>::iterator it=actions.begin(); it!=actions.end(); ++it){
    89     if((*it)->shouldUndo()){
    90       canUndo &= (*it)->canUndo();
    91     }
    92   }
     50  deque<Action*>::iterator it;
     51  for(it=actions.begin(); it!=actions.end(); it++)
     52    canUndo &= (*it)->canUndo();
    9353  return canUndo;
    9454}
    95 
    96 bool ActionSequence::shouldUndo(){
    97   bool shouldUndo = false;
    98   for(deque<Action*>::iterator it=actions.begin();it!=actions.end();++it){
    99     shouldUndo |= (*it)->shouldUndo();
    100   }
    101   return shouldUndo;
    102 }
Note: See TracChangeset for help on using the changeset viewer.