diff options
author | Stefan Radomski <github@mintwerk.de> | 2017-05-10 20:48:14 (GMT) |
---|---|---|
committer | Stefan Radomski <github@mintwerk.de> | 2017-05-10 20:48:14 (GMT) |
commit | a33a96fd7aee6d53f663102c56236e91d77f53a7 (patch) | |
tree | 3a27a07f8f4eeddd233b2bb8ed9a5c43c36077c6 /src/uscxml/plugins/datamodel/lua | |
parent | 5083ea697c263a507341c98c5dadbb23953bd4fb (diff) | |
download | uscxml-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.cpp | 45 | ||||
-rw-r--r-- | src/uscxml/plugins/datamodel/lua/LuaDataModel.h | 1 |
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); |