DataModelImpl.h
Go to the documentation of this file.
1 
20 #ifndef DATAMODELIMPL_H_5A33C087
21 #define DATAMODELIMPL_H_5A33C087
22 
23 #include "uscxml/config.h"
24 #include "uscxml/Common.h"
25 #include "uscxml/plugins/Invoker.h"
27 
28 #include <xercesc/dom/DOM.hpp>
29 
30 #include <list>
31 #include <string>
32 #include <memory>
33 
34 namespace uscxml {
35 
36 class InterpreterImpl;
37 class DataModelImpl;
38 
44 class USCXML_API DataModelCallbacks {
45 public:
46  virtual const std::string& getName() = 0;
47  virtual const std::string& getSessionId() = 0;
48  virtual const std::map<std::string, IOProcessor>& getIOProcessors() = 0;
49  virtual bool isInState(const std::string& stateId) = 0;
50  virtual XERCESC_NS::DOMDocument* getDocument() const = 0;
51  virtual const std::map<std::string, Invoker>& getInvokers() = 0;
52 };
53 
54 class USCXML_API DataModelExtension {
55 public:
56  DataModelExtension() : dm(NULL) {}
57  virtual ~DataModelExtension() {}
58  virtual std::string provides() = 0;
59  virtual Data getValueOf(const std::string& member) = 0;
60  virtual void setValueOf(const std::string& member, const Data& data) = 0;
61  DataModelImpl* dm;
62 };
63 
69 class USCXML_API DataModelImpl {
70 public:
71  virtual ~DataModelImpl() {}
72 
82  virtual std::shared_ptr<DataModelImpl> create(DataModelCallbacks* callbacks) = 0;
83 
87  virtual std::list<std::string> getNames() = 0;
88 
95  virtual bool isValidSyntax(const std::string& expr) {
96  return true; // overwrite when datamodel supports it
97  }
98 
103  virtual void setEvent(const Event& event) = 0;
104 
112  size_t replaceExpressions(std::string& content);
113 
116 
117  // foreach
118  virtual uint32_t getLength(const std::string& expr) = 0;
119  virtual void setForeach(const std::string& item,
120  const std::string& array,
121  const std::string& index,
122  uint32_t iteration) = 0;
124 
130  virtual Data getAsData(const std::string& content) = 0;
131 
137  virtual Data evalAsData(const std::string& content) = 0;
138 
145  virtual bool evalAsBool(const std::string& expr) = 0;
146 
152  virtual bool isDeclared(const std::string& expr) = 0;
153 
172  virtual void assign(const std::string& location, const Data& data) = 0;
173 
182  virtual void init(const std::string& location, const Data& data) = 0;
183 
184 
185  virtual void addExtension(DataModelExtension* ext);
186  virtual std::string andExpressions(std::list<std::string>) {
187  return "";
188  }
189 
190 protected:
191  DataModelCallbacks* _callbacks;
192 };
193 
194 }
195 
196 #endif /* end of include guard: DATAMODELIMPL_H_5A33C087 */
Definition: InterpreterIssue.cpp:33
Definition: DataModelImpl.h:54
Abstract base class for all data-model implementations.
Definition: DataModelImpl.h:69
Definition: Event.h:84
Callbacks available for every data-model.
Definition: DataModelImpl.h:44
virtual bool isValidSyntax(const std::string &expr)
Determine whether a given string constitutes valid syntax in the data-model's language.
Definition: DataModelImpl.h:95
Definition: Data.h:44