// // Created by koncord on 08.05.16. // #ifndef PLUGINSYSTEM3_LANGLUA_HPP #define PLUGINSYSTEM3_LANGLUA_HPP #include #include #include #include "../ScriptFunction.hpp" #include "../Language.hpp" struct LuaFuctionData { const char* name; lua_CFunction func; }; class LangLua: public Language { private: template struct indices {}; template struct build_indices : build_indices {}; template struct build_indices<0, Is...> : indices {}; template using IndicesFor = build_indices; public: virtual lib_t GetInterface() override; template static LuaFuctionData* functions(indices); lua_State *lua; public: LangLua(); LangLua(lua_State *lua); ~LangLua(); static int MakePublic(lua_State *lua) noexcept; static int CallPublic(lua_State *lua); static int CreateTimer(lua_State *lua) noexcept; static int CreateTimerEx(lua_State *lua); virtual void LoadProgram(const char *filename) override; virtual int FreeProgram() override; virtual bool IsCallbackPresent(const char *name) override; virtual boost::any Call(const char *name, const char *argl, int buf, ...) override; virtual boost::any Call(const char *name, const char *argl, const std::vector &args) override; }; #endif //PLUGINSYSTEM3_LANGLUA_HPP