SegFault_gcc4.6
      
      
        
          | Last change
 on this file since 15c75f8 was             af5384, checked in by Frederik Heber <heber@…>, 12 years ago | 
        
          | 
Actions can now clone() and split off prepare() from call().
 ActionQueue now separates call phase into clone(), prepare(), and call().
ActionQueue's dstor releases Actions in deque.
CurrentAction is an index as push_back always invalidates iterator.
ActionQueue_t is now a simple vector of ptrs.
call() is now non-interactive, (maybe) interactive part is placed in
prepare() where dialogs are used to fill parameters.
only fully prepared Actions are placed in ActionQueue.
ActionQueue obtains action instances from Registry, copies, prepares them,
and places them in the queue.
Action::clone() gets QueryOptions as param. This lets us either clone without
params or really copy the instance.
If action is called as COMMAND, params have been filled already.
Reactions require a ActionQueue::getLastAction() to actually obtain result
of (cloned) Action.
FIX: Calculation now has const has...() and getResult().
 | 
        
          | 
              
Property                 mode
 set to                 100644 | 
        
          | File size:
            1.4 KB | 
      
      
| Line |  | 
|---|
| 1 | /* | 
|---|
| 2 | * ActionSequenze.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Dec 17, 2009 | 
|---|
| 5 | *      Author: crueger | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef ACTIONSEQUENZE_HPP_ | 
|---|
| 9 | #define ACTIONSEQUENZE_HPP_ | 
|---|
| 10 |  | 
|---|
| 11 | // include config.h | 
|---|
| 12 | #ifdef HAVE_CONFIG_H | 
|---|
| 13 | #include <config.h> | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 |  | 
|---|
| 17 | #include "Actions/Action.hpp" | 
|---|
| 18 |  | 
|---|
| 19 | #include <deque> | 
|---|
| 20 |  | 
|---|
| 21 | namespace MoleCuilder { | 
|---|
| 22 |  | 
|---|
| 23 | /** | 
|---|
| 24 | * Store Actions for later use. | 
|---|
| 25 | */ | 
|---|
| 26 | class ActionSequence | 
|---|
| 27 | { | 
|---|
| 28 | friend class MakroAction; | 
|---|
| 29 | public: | 
|---|
| 30 | typedef std::deque<Action*> actionSet; | 
|---|
| 31 | typedef std::deque<ActionState::ptr> stateSet; | 
|---|
| 32 |  | 
|---|
| 33 | ActionSequence(); | 
|---|
| 34 | ActionSequence(const ActionSequence &_other); | 
|---|
| 35 | virtual ~ActionSequence(); | 
|---|
| 36 |  | 
|---|
| 37 | void addAction(Action*); | 
|---|
| 38 | Action* removeLastAction(); | 
|---|
| 39 | unsigned int getLoop() const | 
|---|
| 40 | { return loop; } | 
|---|
| 41 |  | 
|---|
| 42 | void callAll(); | 
|---|
| 43 |  | 
|---|
| 44 | bool canUndo(); | 
|---|
| 45 | bool shouldUndo(); | 
|---|
| 46 |  | 
|---|
| 47 | void outputAsCLI(std::ostream &ost) const; | 
|---|
| 48 | void outputAsPython(std::ostream &ost, const std::string &prefix) const; | 
|---|
| 49 |  | 
|---|
| 50 | protected: | 
|---|
| 51 | /** removes the first occurence of an action name \a name from sequence. | 
|---|
| 52 | * | 
|---|
| 53 | * \param name name of action | 
|---|
| 54 | * \return true - action removed, false - action not found | 
|---|
| 55 | */ | 
|---|
| 56 | bool removeAction(const std::string &name); | 
|---|
| 57 |  | 
|---|
| 58 | stateSet callAll(bool); // Dummy parameter to allow overloading | 
|---|
| 59 | Dialog* fillAllDialogs(Dialog *dialog); | 
|---|
| 60 | stateSet undoAll(stateSet); | 
|---|
| 61 | stateSet redoAll(stateSet); | 
|---|
| 62 | void setLoop(unsigned int _loop) | 
|---|
| 63 | { loop = _loop; } | 
|---|
| 64 | private: | 
|---|
| 65 | actionSet actions; | 
|---|
| 66 | //!> how often the sequence is repeated | 
|---|
| 67 | unsigned int loop; | 
|---|
| 68 | }; | 
|---|
| 69 |  | 
|---|
| 70 | } | 
|---|
| 71 |  | 
|---|
| 72 | #endif /* ACTIONSEQUENZE_HPP_ */ | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.