FastMicroStep.h
Go to the documentation of this file.
1 
20 #ifndef FASTMICROSTEP_H_065FE1F7
21 #define FASTMICROSTEP_H_065FE1F7
22 
23 //#define USCXML_VERBOSE 1
24 
25 #include "uscxml/config.h"
26 #include "uscxml/util/DOM.h" // X
27 
28 #include <vector>
29 #include <set>
30 #include "MicroStepImpl.h"
31 
32 #include <boost/dynamic_bitset.hpp>
33 
34 namespace uscxml {
35 
40 class FastMicroStep : public MicroStepImpl {
41 public:
43  virtual ~FastMicroStep();
44 
45  virtual InterpreterState step(bool blocking);
46  virtual void reset();
47  virtual bool isInState(const std::string& stateId);
48  virtual std::list<XERCESC_NS::DOMElement*> getConfiguration();
49  void markAsCancelled();
50 
51 protected:
52  class Transition {
53  public:
54  Transition() : element(NULL), source(0), onTrans(NULL), type(0) {}
55 
56  XERCESC_NS::DOMElement* element;
57  boost::dynamic_bitset<> conflicts;
58  boost::dynamic_bitset<> exitSet;
59 
60  uint32_t source;
61  boost::dynamic_bitset<> target;
62 
63  XERCESC_NS::DOMElement* onTrans;
64 
65  std::string event;
66  std::string cond;
67 
68  unsigned char type;
69 
70  };
71 
72  class State {
73  public:
74  State() : element(NULL), parent(0), documentOrder(0), doneData(NULL), type(0) {}
75 
76  XERCESC_NS::DOMElement* element;
77  boost::dynamic_bitset<> completion;
78  boost::dynamic_bitset<> children;
79  boost::dynamic_bitset<> ancestors;
80  uint32_t parent;
81  uint32_t documentOrder;
82 
83  std::list<XERCESC_NS::DOMElement*> data;
84  std::list<XERCESC_NS::DOMElement*> invoke;
85  std::list<XERCESC_NS::DOMElement*> onEntry;
86  std::list<XERCESC_NS::DOMElement*> onExit;
87  XERCESC_NS::DOMElement* doneData;
88 
89  unsigned char type;
90  };
91 
92  virtual void init(XERCESC_NS::DOMElement* scxml);
93 
94  std::list<XERCESC_NS::DOMElement*> getCompletion(const XERCESC_NS::DOMElement* state);
95 
96  unsigned char _flags;
97  std::map<std::string, int> _stateIds;
98 
99  std::vector<State*> _states;
100  std::vector<Transition*> _transitions;
101  std::list<XERCESC_NS::DOMElement*> _globalScripts;
102 
103  boost::dynamic_bitset<> _configuration;
104  boost::dynamic_bitset<> _invocations;
105  boost::dynamic_bitset<> _history;
106  boost::dynamic_bitset<> _initializedData;
107 
108  std::set<boost::dynamic_bitset<> > _microstepConfigurations;
109 
110  Binding _binding;
111  XERCESC_NS::DOMElement* _scxml;
112  X _xmlPrefix;
113  X _xmlNS;
114 
115  bool _isInitialized;
116  bool _isCancelled;
117  Event _event; // we do not care about the event's representation
118 
119 private:
120  std::list<XERCESC_NS::DOMElement*> getHistoryCompletion(const XERCESC_NS::DOMElement* state);
121  void resortStates(XERCESC_NS::DOMNode* node, const X& xmlPrefix);
122 
123 // bool hasLegalConfiguration();
124 
125 #ifdef USCXML_VERBOSE
126  void printStateNames(const boost::dynamic_bitset<>& bitset);
127 #endif
128 
129 };
130 
131 }
132 
133 #endif /* end of include guard: FASTMICROSTEP_H_065FE1F7 */
134 
Definition: FastMicroStep.h:40
Definition: MicroStepImpl.h:67
Definition: InterpreterIssue.cpp:33
virtual InterpreterState step(bool blocking)
Definition: FastMicroStep.cpp:401
Definition: MicroStepImpl.h:40
Definition: Event.h:84
virtual void reset()
Reset state machine.
Definition: FastMicroStep.cpp:915
Definition: FastMicroStep.h:52
virtual void init(XERCESC_NS::DOMElement *scxml)
Definition: FastMicroStep.cpp:158
Definition: FastMicroStep.h:72
Definition: DOM.h:120