2015-01-27 11:44:46 -05:00
|
|
|
#ifndef LUA_UTIL_HPP
|
|
|
|
#define LUA_UTIL_HPP
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
#include <lua.h>
|
|
|
|
#include <lauxlib.h>
|
|
|
|
#include <lualib.h>
|
|
|
|
}
|
|
|
|
|
|
|
|
#include <boost/filesystem/convenience.hpp>
|
|
|
|
#include <luabind/luabind.hpp>
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <string>
|
|
|
|
|
2016-01-05 10:51:13 -05:00
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace util
|
|
|
|
{
|
|
|
|
|
2016-03-22 16:23:25 -04:00
|
|
|
struct LuaState
|
|
|
|
{
|
|
|
|
LuaState() : handle{::luaL_newstate(), &::lua_close} { luaL_openlibs(*this); }
|
|
|
|
|
|
|
|
operator lua_State *() { return handle.get(); }
|
|
|
|
operator lua_State const *() const { return handle.get(); }
|
|
|
|
|
|
|
|
using handle_type = std::unique_ptr<lua_State, decltype(&::lua_close)>;
|
|
|
|
handle_type handle;
|
|
|
|
};
|
2015-01-27 11:44:46 -05:00
|
|
|
|
|
|
|
// Check if the lua function <name> is defined
|
2016-03-22 16:23:25 -04:00
|
|
|
inline bool luaFunctionExists(lua_State *lua_state, const char *name)
|
2015-01-27 11:44:46 -05:00
|
|
|
{
|
|
|
|
luabind::object globals_table = luabind::globals(lua_state);
|
|
|
|
luabind::object lua_function = globals_table[name];
|
|
|
|
return lua_function && (luabind::type(lua_function) == LUA_TFUNCTION);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add the folder contain the script to the lua load path, so script can easily require() other lua
|
|
|
|
// scripts inside that folder, or subfolders.
|
|
|
|
// See http://lua-users.org/wiki/PackagePath for details on the package.path syntax.
|
|
|
|
inline void luaAddScriptFolderToLoadPath(lua_State *lua_state, const char *file_name)
|
|
|
|
{
|
2015-05-15 09:30:41 -04:00
|
|
|
boost::filesystem::path profile_path = boost::filesystem::canonical(file_name);
|
2016-05-05 05:19:27 -04:00
|
|
|
std::string folder = profile_path.parent_path().generic_string();
|
2015-05-15 09:30:41 -04:00
|
|
|
const std::string lua_code = "package.path = \"" + folder + "/?.lua;\" .. package.path";
|
2015-01-27 11:44:46 -05:00
|
|
|
luaL_dostring(lua_state, lua_code.c_str());
|
|
|
|
}
|
2016-01-05 10:51:13 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-27 11:44:46 -05:00
|
|
|
#endif // LUA_UTIL_HPP
|