summaryrefslogtreecommitdiffstats
path: root/src/uscxml/plugins/datamodel/lua
diff options
context:
space:
mode:
authorStefan Radomski <github@mintwerk.de>2017-05-10 20:48:14 (GMT)
committerStefan Radomski <github@mintwerk.de>2017-05-10 20:48:14 (GMT)
commita33a96fd7aee6d53f663102c56236e91d77f53a7 (patch)
tree3a27a07f8f4eeddd233b2bb8ed9a5c43c36077c6 /src/uscxml/plugins/datamodel/lua
parent5083ea697c263a507341c98c5dadbb23953bd4fb (diff)
downloaduscxml-a33a96fd7aee6d53f663102c56236e91d77f53a7.zip
uscxml-a33a96fd7aee6d53f663102c56236e91d77f53a7.tar.gz
uscxml-a33a96fd7aee6d53f663102c56236e91d77f53a7.tar.bz2
Fixed issue 114
Diffstat (limited to 'src/uscxml/plugins/datamodel/lua')
-rw-r--r--src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp45
-rw-r--r--src/uscxml/plugins/datamodel/lua/LuaDataModel.h1
2 files changed, 25 insertions, 21 deletions
diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
index 2071d39..94d2467 100644
--- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
@@ -208,13 +208,17 @@ int LuaDataModel::luaInFunction(lua_State * l) {
std::shared_ptr<DataModelImpl> LuaDataModel::create(DataModelCallbacks* callbacks) {
std::shared_ptr<LuaDataModel> dm(new LuaDataModel());
-
dm->_callbacks = callbacks;
- dm->_luaState = luaL_newstate();
- luaL_openlibs(dm->_luaState);
+ dm->setup();
+ return dm;
+}
+
+void LuaDataModel::setup() {
+ _luaState = luaL_newstate();
+ luaL_openlibs(_luaState);
try {
- const luabridge::LuaRef& requireFunc = luabridge::getGlobal(dm->_luaState, "require");
+ const luabridge::LuaRef& requireFunc = luabridge::getGlobal(_luaState, "require");
if (requireFunc.isFunction()) {
const luabridge::LuaRef& resultLxp = requireFunc("lxp");
const luabridge::LuaRef& resultLxpLOM = requireFunc("lxp.lom");
@@ -222,43 +226,42 @@ std::shared_ptr<DataModelImpl> LuaDataModel::create(DataModelCallbacks* callback
// MSVC compiler bug with implicit cast operators, see comments in LuaRef class
if ((bool)resultLxp && (bool)resultLxpLOM) {
_luaHasXMLParser = true;
- luabridge::setGlobal(dm->_luaState, resultLxp, "lxp");
- luabridge::setGlobal(dm->_luaState, resultLxpLOM, "lxp.lom");
+ luabridge::setGlobal(_luaState, resultLxp, "lxp");
+ luabridge::setGlobal(_luaState, resultLxpLOM, "lxp.lom");
}
}
} catch (luabridge::LuaException e) {
- LOG(dm->_callbacks->getLogger(), USCXML_INFO) << e.what() << std::endl;
+ LOG(_callbacks->getLogger(), USCXML_INFO) << e.what() << std::endl;
}
- luabridge::getGlobalNamespace(dm->_luaState).beginClass<LuaDataModel>("DataModel").endClass();
- luabridge::setGlobal(dm->_luaState, dm.get(), "__datamodel");
+ luabridge::getGlobalNamespace(_luaState).beginClass<LuaDataModel>("DataModel").endClass();
+ luabridge::setGlobal(_luaState, this, "__datamodel");
- luabridge::getGlobalNamespace(dm->_luaState).addCFunction("In", luaInFunction);
+ luabridge::getGlobalNamespace(_luaState).addCFunction("In", luaInFunction);
- luabridge::LuaRef ioProcTable = luabridge::newTable(dm->_luaState);
- std::map<std::string, IOProcessor> ioProcs = dm->_callbacks->getIOProcessors();
+ luabridge::LuaRef ioProcTable = luabridge::newTable(_luaState);
+ std::map<std::string, IOProcessor> ioProcs = _callbacks->getIOProcessors();
std::map<std::string, IOProcessor>::const_iterator ioProcIter = ioProcs.begin();
while(ioProcIter != ioProcs.end()) {
Data ioProcData = ioProcIter->second.getDataModelVariables();
- ioProcTable[ioProcIter->first] = getDataAsLua(dm->_luaState, ioProcData);
+ ioProcTable[ioProcIter->first] = getDataAsLua(_luaState, ioProcData);
ioProcIter++;
}
- luabridge::setGlobal(dm->_luaState, ioProcTable, "_ioprocessors");
+ luabridge::setGlobal(_luaState, ioProcTable, "_ioprocessors");
- luabridge::LuaRef invTable = luabridge::newTable(dm->_luaState);
- std::map<std::string, Invoker> invokers = dm->_callbacks->getInvokers();
+ luabridge::LuaRef invTable = luabridge::newTable(_luaState);
+ std::map<std::string, Invoker> invokers = _callbacks->getInvokers();
std::map<std::string, Invoker>::const_iterator invIter = invokers.begin();
while(invIter != invokers.end()) {
Data invData = invIter->second.getDataModelVariables();
- invTable[invIter->first] = getDataAsLua(dm->_luaState, invData);
+ invTable[invIter->first] = getDataAsLua(_luaState, invData);
invIter++;
}
- luabridge::setGlobal(dm->_luaState, invTable, "_invokers");
+ luabridge::setGlobal(_luaState, invTable, "_invokers");
- luabridge::setGlobal(dm->_luaState, dm->_callbacks->getName(), "_name");
- luabridge::setGlobal(dm->_luaState, dm->_callbacks->getSessionId(), "_sessionid");
+ luabridge::setGlobal(_luaState, _callbacks->getName(), "_name");
+ luabridge::setGlobal(_luaState, _callbacks->getSessionId(), "_sessionid");
- return dm;
}
LuaDataModel::~LuaDataModel() {
diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h
index c64656a..a43b959 100644
--- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h
+++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h
@@ -86,6 +86,7 @@ public:
const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
protected:
+ virtual void setup();
static int luaInFunction(lua_State * l);