summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-04-10 20:57:11 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2013-04-10 20:57:11 (GMT)
commit45ab2909e17f7e0348ccfe4179f23a897a2fd305 (patch)
tree7a5dfe75657034659e45431469b3909cb69db035 /src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
parent1c7064006d4283ffbfa64febea397e68df8e2b54 (diff)
downloaduscxml-45ab2909e17f7e0348ccfe4179f23a897a2fd305.zip
uscxml-45ab2909e17f7e0348ccfe4179f23a897a2fd305.tar.gz
uscxml-45ab2909e17f7e0348ccfe4179f23a897a2fd305.tar.bz2
New DataModels
Diffstat (limited to 'src/uscxml/plugins/datamodel/null/NULLDataModel.cpp')
-rw-r--r--src/uscxml/plugins/datamodel/null/NULLDataModel.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
new file mode 100644
index 0000000..69970dd
--- /dev/null
+++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp
@@ -0,0 +1,121 @@
+#include "uscxml/Common.h"
+#include "NULLDataModel.h"
+
+#include "uscxml/Message.h"
+#include <glog/logging.h>
+
+#ifdef BUILD_AS_PLUGINS
+#include <Pluma/Connector.hpp>
+#endif
+
+namespace uscxml {
+
+#ifdef BUILD_AS_PLUGINS
+PLUMA_CONNECTOR
+bool connect(pluma::Host& host) {
+ host.add( new NULLDataModelProvider() );
+ return true;
+}
+#endif
+
+NULLDataModel::NULLDataModel() {
+}
+
+boost::shared_ptr<DataModelImpl> NULLDataModel::create(InterpreterImpl* interpreter) {
+ boost::shared_ptr<NULLDataModel> dm = boost::shared_ptr<NULLDataModel>(new NULLDataModel());
+ dm->_interpreter = interpreter;
+ return dm;
+}
+
+NULLDataModel::~NULLDataModel() {
+}
+
+void NULLDataModel::pushContext() {
+}
+
+void NULLDataModel::popContext() {
+}
+
+void NULLDataModel::initialize() {
+}
+
+void NULLDataModel::setEvent(const Event& event) {
+}
+
+Data NULLDataModel::getStringAsData(const std::string& content) {
+ Data data;
+ return data;
+}
+
+bool NULLDataModel::validate(const std::string& location, const std::string& schema) {
+ return true;
+}
+
+uint32_t NULLDataModel::getLength(const std::string& expr) {
+ return 0;
+}
+
+void NULLDataModel::eval(const std::string& expr) {
+}
+
+bool NULLDataModel::isDeclared(const std::string& expr) {
+ return true;
+}
+
+/**
+ * The boolean expression language consists of the In predicate only. It has the
+ * form 'In(id)', where id is the id of a state in the enclosing state machine.
+ * The predicate must return 'true' if and only if that state is in the current
+ * state configuration.
+ */
+bool NULLDataModel::evalAsBool(const std::string& expr) {
+ std::string trimmedExpr = expr;
+ boost::trim(trimmedExpr);
+ if (!boost::istarts_with(trimmedExpr, "in"))
+ return false;
+
+ // find string in between brackets
+ size_t start = trimmedExpr.find_first_of("(");
+ size_t end = trimmedExpr.find_last_of(")");
+ if (start == std::string::npos || end == std::string::npos || start >= end)
+ return false;
+ start++;
+
+ // split at comma
+ std::stringstream ss(trimmedExpr.substr(start, end - start));
+ std::vector<std::string> stateExprs;
+ std::string item;
+ while(std::getline(ss, item, ',')) {
+ stateExprs.push_back(item);
+ }
+
+ for (unsigned int i = 0; i < stateExprs.size(); i++) {
+ // remove ticks
+ size_t start = stateExprs[i].find_first_of("'");
+ size_t end = stateExprs[i].find_last_of("'");
+
+ std::string stateName;
+ if (start != std::string::npos && end != std::string::npos && start < end) {
+ start++;
+ stateName = stateExprs[i].substr(start, end - start);
+ } else {
+ stateName = stateExprs[i];
+ }
+
+ if (Interpreter::isMember(_interpreter->getState(stateName), _interpreter->getConfiguration())) {
+ continue;
+ }
+ return false;
+ }
+ return true;
+}
+
+std::string NULLDataModel::evalAsString(const std::string& expr) {
+ return expr;
+}
+
+double NULLDataModel::evalAsNumber(const std::string& expr) {
+ return 0;
+}
+
+} \ No newline at end of file