diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-04-10 20:57:11 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-04-10 20:57:11 (GMT) |
commit | 45ab2909e17f7e0348ccfe4179f23a897a2fd305 (patch) | |
tree | 7a5dfe75657034659e45431469b3909cb69db035 /src/uscxml/plugins/datamodel/null | |
parent | 1c7064006d4283ffbfa64febea397e68df8e2b54 (diff) | |
download | uscxml-45ab2909e17f7e0348ccfe4179f23a897a2fd305.zip uscxml-45ab2909e17f7e0348ccfe4179f23a897a2fd305.tar.gz uscxml-45ab2909e17f7e0348ccfe4179f23a897a2fd305.tar.bz2 |
New DataModels
Diffstat (limited to 'src/uscxml/plugins/datamodel/null')
-rw-r--r-- | src/uscxml/plugins/datamodel/null/NULLDataModel.cpp | 121 | ||||
-rw-r--r-- | src/uscxml/plugins/datamodel/null/NULLDataModel.h | 77 |
2 files changed, 198 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 diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.h b/src/uscxml/plugins/datamodel/null/NULLDataModel.h new file mode 100644 index 0000000..eaa9dbd --- /dev/null +++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.h @@ -0,0 +1,77 @@ +#ifndef NULLDATAMODEL_H_KN8TWG0V +#define NULLDATAMODEL_H_KN8TWG0V + +#include "uscxml/Interpreter.h" +#include <list> + +#ifdef BUILD_AS_PLUGINS +#include "uscxml/plugins/Plugins.h" +#endif + +namespace uscxml { +class Event; +class Data; +} + +namespace uscxml { + +class NULLDataModel : public DataModelImpl { +public: + NULLDataModel(); + virtual ~NULLDataModel(); + virtual boost::shared_ptr<DataModelImpl> create(InterpreterImpl* interpreter); + + virtual std::set<std::string> getNames() { + std::set<std::string> names; + names.insert("null"); + return names; + } + + virtual void initialize(); + virtual void setEvent(const Event& event); + + virtual bool validate(const std::string& location, const std::string& schema); + + virtual uint32_t getLength(const std::string& expr); + virtual void pushContext(); + virtual void popContext(); + + virtual void eval(const std::string& expr); + virtual void assign(const std::string& location, + const Arabica::DOM::Document<std::string>& doc, + const Arabica::DOM::Element<std::string>& assignElem) {} + virtual void assign(const std::string& location, + const std::string& expr, + const Arabica::DOM::Element<std::string>& assignElem) {} + virtual void assign(const std::string& location, + const Data& data, + const Arabica::DOM::Element<std::string>& assignElem) {} + + virtual void init(const std::string& location, + const Arabica::DOM::Document<std::string>& doc, + const Arabica::DOM::Element<std::string>& dataElem) {}; + virtual void init(const std::string& location, + const std::string& expr, + const Arabica::DOM::Element<std::string>& dataElem) {}; + virtual void init(const std::string& location, + const Data& data, + const Arabica::DOM::Element<std::string>& dataElem) {}; + + virtual Data getStringAsData(const std::string& content); + virtual bool isDeclared(const std::string& expr); + + virtual std::string evalAsString(const std::string& expr); + virtual bool evalAsBool(const std::string& expr); + virtual double evalAsNumber(const std::string& expr); + +protected: + +}; + +#ifdef BUILD_AS_PLUGINS +PLUMA_INHERIT_PROVIDER(NULLDataModel, DataModelImpl); +#endif + +} + +#endif /* end of include guard: NULLDATAMODEL_H_KN8TWG0V */ |