20 #ifndef INTERPRETERIMPL_H_2A79C83D
21 #define INTERPRETERIMPL_H_2A79C83D
38 #include <xercesc/dom/DOM.hpp>
42 class InterpreterMonitor;
43 class InterpreterIssue;
66 void cloneFrom(std::shared_ptr<InterpreterImpl> other);
68 virtual InterpreterState step(
bool blocking) {
69 if (!_isInitialized) {
71 _state = USCXML_INITIALIZED;
73 _state = _microStepper.step(blocking);
79 _microStepper.reset();
80 _isInitialized =
false;
81 _state = USCXML_INSTANTIATED;
87 virtual void cancel();
89 InterpreterState getState() {
93 std::list<XERCESC_NS::DOMElement*> getConfiguration() {
94 return _microStepper.getConfiguration();
97 void setMonitor(InterpreterMonitor* monitor) {
105 _currEvent = _internalQueue.dequeue(
false);
107 _dataModel.setEvent(_currEvent);
110 virtual Event dequeueExternal(
bool blocking);
111 virtual bool isTrue(
const std::string& expr);
113 virtual void raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC_NS::DOMElement* doneData) {
114 _execContent.raiseDoneEvent(state, doneData);
117 virtual void process(XERCESC_NS::DOMElement* block) {
118 _execContent.process(block, _xmlPrefix);
121 virtual bool isMatched(
const Event& event,
const std::string& eventDesc);
122 virtual void initData(XERCESC_NS::DOMElement* element);
124 virtual void invoke(XERCESC_NS::DOMElement* invoke) {
125 _execContent.invoke(invoke);
128 virtual void uninvoke(XERCESC_NS::DOMElement* invoke) {
129 _execContent.uninvoke(invoke);
142 virtual const std::string& getSessionId() {
145 virtual const std::map<std::string, IOProcessor>& getIOProcessors() {
148 virtual const std::map<std::string, Invoker>& getInvokers() {
152 virtual bool isInState(
const std::string& stateId) {
153 return _microStepper.isInState(stateId);
155 virtual XERCESC_NS::DOMDocument* getDocument()
const {
164 return _internalQueue.enqueue(event);
166 virtual void enqueueExternal(
const Event& event) {
167 return _externalQueue.enqueue(event);
169 virtual void enqueueExternalDelayed(
const Event& event,
size_t delayMs,
const std::string& eventUUID) {
170 return _delayQueue.enqueueDelayed(event, delayMs, eventUUID);
172 virtual void cancelDelayed(
const std::string& eventId);
174 virtual size_t getLength(
const std::string& expr) {
175 return _dataModel.getLength(expr);
178 virtual void setForeach(
const std::string& item,
179 const std::string& array,
180 const std::string& index,
181 uint32_t iteration) {
182 return _dataModel.setForeach(item, array, index, iteration);
184 virtual Data evalAsData(
const std::string& expr) {
185 return _dataModel.evalAsData(expr);
188 virtual Data getAsData(
const std::string& expr) {
189 return _dataModel.getAsData(expr);
192 virtual void assign(
const std::string& location,
const Data& data);
194 virtual std::string getInvokeId() {
197 virtual std::string getBaseURL() {
201 virtual bool checkValidSendType(
const std::string& type,
const std::string& target);
202 virtual void invoke(
const std::string& type,
const std::string& src,
bool autoForward, XERCESC_NS::DOMElement* finalize,
const Event& invokeEvent);
203 virtual void uninvoke(
const std::string& invokeId);
204 virtual void enqueue(
const std::string& type,
const std::string& target,
size_t delayMs,
const Event& sendEvent);
206 virtual const Event& getCurrentEvent() {
214 virtual void eventReady(Event& event,
const std::string& eventUUID);
224 static std::map<std::string, std::weak_ptr<InterpreterImpl> > getInstances();
226 virtual XERCESC_NS::DOMDocument* getDocument() {
231 static void addInstance(std::shared_ptr<InterpreterImpl> instance);
235 std::string _sessionId;
237 std::string _invokeId;
240 XERCESC_NS::DOMDocument* _document;
241 XERCESC_NS::DOMElement* _scxml;
243 std::map<std::string, std::tuple<std::string, std::string, std::string> > _delayedEventTargets;
247 static std::map<std::string, std::weak_ptr<InterpreterImpl> > _instances;
248 static std::recursive_mutex _instanceMutex;
249 std::recursive_mutex _delayMutex;
251 friend class Interpreter;
252 friend class InterpreterIssue;
253 friend class TransformerImpl;
254 friend class USCXMLInvoker;
255 friend class SCXMLIOProcessor;
263 MicroStep _microStepper;
264 DataModel _dataModel;
265 ContentExecutor _execContent;
267 InterpreterState _state;
269 EventQueue _internalQueue;
270 EventQueue _externalQueue;
271 EventQueue _parentQueue;
272 DelayedEventQueue _delayQueue;
277 std::map<std::string, IOProcessor> _ioProcs;
278 std::map<std::string, Invoker> _invokers;
279 std::set<std::string> _autoForwarders;
280 InterpreterMonitor* _monitor;
Definition: InterpreterIssue.cpp:33
Definition: InterpreterMonitor.h:46
virtual Event dequeueInternal()
MicrostepCallbacks.
Definition: InterpreterImpl.h:104
Definition: MicroStepImpl.h:40
void setActionLanguage(const ActionLanguage &al)
Definition: InterpreterImpl.h:218
virtual void process(XERCESC_NS::DOMElement *block)
Executable Content.
Definition: InterpreterImpl.h:117
virtual void reset()
Definition: InterpreterImpl.h:78
Definition: EventQueueImpl.h:51
MicroStep microStepper
The microstepper instance to use.
Definition: Interpreter.h:92
virtual const std::string & getName()
DataModelCallbacks.
Definition: InterpreterImpl.h:139
Collection of instances for interpreter that constitute its action language.
Definition: Interpreter.h:90
DataModel dataModel
The datamodel to uses.
Definition: Interpreter.h:93
Definition: InterpreterImpl.h:49
virtual void enqueueInternal(const Event &event)
ContentExecutorCallbacks.
Definition: InterpreterImpl.h:163
ContentExecutor execContent
To process executable content elements.
Definition: Interpreter.h:94
Callbacks available for every data-model.
Definition: DataModelImpl.h:44
Definition: ContentExecutorImpl.h:38
virtual InterpreterMonitor * getMonitor()
Monitoring.
Definition: InterpreterImpl.h:132
virtual void invoke(XERCESC_NS::DOMElement *invoke)
Invocations.
Definition: InterpreterImpl.h:124