109 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  open source routing machine
 | |
|  Copyright (C) Dennis Luxen, others 2010
 | |
| 
 | |
|  This program is free software; you can redistribute it and/or modify
 | |
|  it under the terms of the GNU AFFERO General Public License as published by
 | |
|  the Free Software Foundation; either version 3 of the License, or
 | |
|  any later version.
 | |
| 
 | |
|  This program is distributed in the hope that it will be useful,
 | |
|  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  GNU General Public License for more details.
 | |
| 
 | |
|  You should have received a copy of the GNU Affero General Public License
 | |
|  along with this program; if not, write to the Free Software
 | |
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
|  or see http://www.gnu.org/licenses/agpl.txt.
 | |
|  */
 | |
| 
 | |
| #include "ScriptingEnvironment.h"
 | |
| 
 | |
| ScriptingEnvironment::ScriptingEnvironment() {}
 | |
| ScriptingEnvironment::ScriptingEnvironment(const char * fileName) {
 | |
| 	INFO("Using script " << fileName);
 | |
| 
 | |
|     // Create a new lua state
 | |
|     for(int i = 0; i < omp_get_max_threads(); ++i)
 | |
|         luaStateVector.push_back(luaL_newstate());
 | |
| 
 | |
|     // Connect LuaBind to this lua state for all threads
 | |
| #pragma omp parallel
 | |
|     {
 | |
|         lua_State * myLuaState = getLuaStateForThreadID(omp_get_thread_num());
 | |
|         luabind::open(myLuaState);
 | |
|         //open utility libraries string library;
 | |
|         luaL_openlibs(myLuaState);
 | |
| 
 | |
|         luaAddScriptFolderToLoadPath( myLuaState, fileName );
 | |
| 
 | |
|         // Add our function to the state's global scope
 | |
|         luabind::module(myLuaState) [
 | |
|                                      luabind::def("print", LUA_print<std::string>),
 | |
|                                      luabind::def("parseMaxspeed", parseMaxspeed),
 | |
|                                      luabind::def("durationIsValid", durationIsValid),
 | |
|                                      luabind::def("parseDuration", parseDuration)
 | |
|         ];
 | |
| 
 | |
|         luabind::module(myLuaState) [
 | |
|                                      luabind::class_<HashTable<std::string, std::string> >("keyVals")
 | |
|                                      .def("Add", &HashTable<std::string, std::string>::Add)
 | |
|                                      .def("Find", &HashTable<std::string, std::string>::Find)
 | |
|                                      .def("Holds", &HashTable<std::string, std::string>::Holds)
 | |
|                                      ];
 | |
| 
 | |
|         luabind::module(myLuaState) [
 | |
|                                      luabind::class_<ImportNode>("Node")
 | |
|                                      .def(luabind::constructor<>())
 | |
|                                      .def_readwrite("lat", &ImportNode::lat)
 | |
|                                      .def_readwrite("lon", &ImportNode::lon)
 | |
|                                      .def_readwrite("id", &ImportNode::id)
 | |
|                                      .def_readwrite("bollard", &ImportNode::bollard)
 | |
|                                      .def_readwrite("traffic_light", &ImportNode::trafficLight)
 | |
|                                      .def_readwrite("tags", &ImportNode::keyVals)
 | |
|                                      ];
 | |
| 
 | |
|         luabind::module(myLuaState) [
 | |
|                                      luabind::class_<ExtractionWay>("Way")
 | |
|                                      .def(luabind::constructor<>())
 | |
|                                      .def_readwrite("name", &ExtractionWay::name)
 | |
|                                      .def_readwrite("speed", &ExtractionWay::speed)
 | |
|                                      .def_readwrite("backward_speed", &ExtractionWay::backward_speed)
 | |
|                                      .def_readwrite("duration", &ExtractionWay::duration)
 | |
|                                      .def_readwrite("type", &ExtractionWay::type)
 | |
|                                      .def_readwrite("access", &ExtractionWay::access)
 | |
|                                      .def_readwrite("roundabout", &ExtractionWay::roundabout)
 | |
|                                      .def_readwrite("is_access_restricted", &ExtractionWay::isAccessRestricted)
 | |
|                                      .def_readwrite("ignore_in_grid", &ExtractionWay::ignoreInGrid)
 | |
|                                      .def_readwrite("tags", &ExtractionWay::keyVals)
 | |
|                                      .def_readwrite("direction", &ExtractionWay::direction)
 | |
|                                      .enum_("constants")
 | |
| 										 [
 | |
| 										  luabind::value("notSure", 0),
 | |
| 										  luabind::value("oneway", 1),
 | |
| 										  luabind::value("bidirectional", 2),
 | |
| 										  luabind::value("opposite", 3)
 | |
| 										 ]
 | |
|         							 ];
 | |
|         luabind::module(myLuaState) [
 | |
|                                      luabind::class_<std::vector<std::string> >("vector")
 | |
|                                      .def("Add", &std::vector<std::string>::push_back)
 | |
|                                      ];
 | |
| 
 | |
|         if(0 != luaL_dofile(myLuaState, fileName) ) {
 | |
|             ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block");
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| ScriptingEnvironment::~ScriptingEnvironment() {
 | |
|     for(unsigned i = 0; i < luaStateVector.size(); ++i) {
 | |
|         //        luaStateVector[i];
 | |
|     }
 | |
| }
 | |
| 
 | |
| lua_State * ScriptingEnvironment::getLuaStateForThreadID(const int id) {
 | |
|     return luaStateVector[id];
 | |
| }
 |