79 typedef bool (*
Deserializer)(
const char *stream,
const char **next);
118 static void CreateObject(
const luaL_Reg *methods,
const luaL_Reg *attrs,
const luaL_Reg *meta,
bool protect =
false);
138 static void CreateClass(
const char *type,
const char *parent,
const luaL_Reg *methods,
const luaL_Reg *attrs,
const luaL_Reg *meta);
176 static bool Deserialize(
const char *stream,
const char **next);
188 const char *
GetType()
const {
return m_type; }
198 bool Isa(
const char *base)
const;
205 template <
typename T>
215 static inline void PushToLua(
const T &o);
216 template <
typename... Args>
219 template <
typename Ret,
typename Key,
typename... Args>
220 static inline Ret
CallMethod(T *o,
const Key &key,
const Args &... args);
221 template <
typename Key,
typename... Args>
222 static inline void CallMethod(T *o,
const Key &key,
const Args &... args)
224 CallMethod<bool>(o, key, args...);
227 template <
typename Ret1,
typename Ret2,
typename... Ret,
typename Key,
typename... Args>
228 static inline std::tuple<Ret1, Ret2, Ret...>
CallMethod(T *o,
const Key &key,
const Args &... args);
235 #pragma clang diagnostic push
236 #pragma clang diagnostic ignored "-Wundefined-var-template"
240 #pragma clang diagnostic pop
248 #pragma clang diagnostic push
249 #pragma clang diagnostic ignored "-Wundefined-var-template"
253 #pragma clang diagnostic pop
260 return dynamic_cast<T *
>(o);
265 #pragma clang diagnostic push
266 #pragma clang diagnostic ignored "-Wundefined-var-template"
272 #pragma clang diagnostic pop
278 static const char *s_type;
284 template <
typename T>
290 m_deleteConnection = m_object->DeleteEmitter::onDelete.connect(sigc::mem_fun(
this, &LuaCoreObject::OnDelete));
295 if (m_deleteConnection.connected())
296 m_deleteConnection.disconnect();
312 sigc::connection m_deleteConnection;
319 template <
typename T>
327 return m_object.Get();
337 template <
typename T>
366 template <
typename T>
390 template <
typename T>
393 if (!PushRegistered(o))
397 template <
typename T>
400 if (!PushRegistered(o))
404 template <
typename T>
410 template <
typename T>
411 template <
typename... Args>
414 T *p(
new T(std::forward<Args>(args)...));
418 template <
typename T>
419 template <
typename Ret,
typename Key,
typename... Args>
426 lua_checkstack(l,
sizeof...(args) + 5);
430 lua_pushvalue(l, -2);
440 template <
typename T>
441 template <
typename Ret1,
typename Ret2,
typename... Ret,
typename Key,
typename... Args>
447 lua_checkstack(l,
sizeof...(args) + 5);
451 lua_pushvalue(l, -2);
455 auto ret_values =
pi_lua_multiple_pull<Ret1, Ret2, Ret...>(l, -2 -
static_cast<int>(
sizeof...(Ret)));
456 lua_pop(l, 2 +
static_cast<int>(
sizeof...(Ret)));
nlohmann::json Json
Definition: Json.h:8
void pi_lua_generic_pull(lua_State *l, int index, SystemPath &out)
Definition: LuaObject.h:466
bool(* PromotionTest)(LuaWrappable *o)
Definition: LuaObject.h:74
void pi_lua_generic_push(lua_State *l, const SystemPath &value)
Definition: LuaObject.h:472
bool pi_lua_strict_pull(lua_State *l, int index, T *&out)
Definition: LuaObject.h:487
std::tuple< Types... > pi_lua_multiple_pull(lua_State *l, int beg)
Definition: LuaPushPull.h:215
void pi_lua_multiple_push(lua_State *l, Types... args)
#define LUA_DEBUG_START(luaptr)
Definition: LuaUtils.h:100
#define LUA_DEBUG_END(luaptr, expectedStackDiff)
Definition: LuaUtils.h:101
void pi_lua_protected_call(lua_State *L, int nargs, int nresults)
Definition: Sandbox.cpp:172
Definition: DeleteEmitter.h:16
Definition: LuaObject.h:338
LuaCopyObject(const T &o)
Definition: LuaObject.h:340
LuaWrappable * GetObject() const
Definition: LuaObject.h:354
~LuaCopyObject()
Definition: LuaObject.h:348
Definition: LuaObject.h:285
LuaCoreObject(T *o)
Definition: LuaObject.h:287
~LuaCoreObject()
Definition: LuaObject.h:293
LuaWrappable * GetObject() const
Definition: LuaObject.h:299
lua_State * GetLuaState()
Definition: LuaManager.h:14
Definition: LuaObject.h:111
static void CreateObject(const luaL_Reg *methods, const luaL_Reg *attrs, const luaL_Reg *meta, bool protect=false)
Definition: LuaObject.cpp:288
static void * Allocate(size_t n)
Definition: LuaObject.cpp:743
const char * GetType() const
Definition: LuaObject.h:188
virtual LuaWrappable * GetObject() const =0
static bool Deserialize(const char *stream, const char **next)
Definition: LuaObject.cpp:692
static LuaWrappable * CheckFromLua(int index, const char *type)
Definition: LuaObject.cpp:589
void ToJson(Json &out)
Definition: LuaObject.cpp:713
LuaObjectBase(const char *type)
Definition: LuaObject.h:130
static PropertyMap * GetPropertiesFromObject(lua_State *l, int object)
Definition: LuaObject.cpp:239
static LuaWrappable * GetFromLua(int index, const char *type)
Definition: LuaObject.cpp:609
static void RegisterPromotion(const char *base_type, const char *target_type, PromotionTest test_fn)
Definition: LuaObject.cpp:665
static void CreateClass(const char *type, const char *parent, const luaL_Reg *methods, const luaL_Reg *attrs, const luaL_Reg *meta)
Definition: LuaObject.cpp:347
virtual ~LuaObjectBase()
Definition: LuaObject.h:132
static bool PushRegistered(LuaWrappable *o)
Definition: LuaObject.cpp:453
static void Register(LuaObjectBase *lo)
Definition: LuaObject.cpp:487
std::string Serialize()
Definition: LuaObject.cpp:675
static void RegisterSerializer(const char *type, SerializerPair pair)
Definition: LuaObject.cpp:670
static bool FromJson(const Json &obj)
Definition: LuaObject.cpp:729
static void Deregister(LuaObjectBase *lo)
Definition: LuaObject.cpp:567
Definition: LuaObject.cpp:96
Definition: LuaObject.h:206
static void CreateInLua(Args &&... args)
Definition: LuaObject.h:412
static void CallMethod(T *o, const Key &key, const Args &... args)
Definition: LuaObject.h:222
static void PushToLua(DeleteEmitter *o)
Definition: LuaObject.h:391
static T * CheckFromLua(int idx)
Definition: LuaObject.h:232
LuaObject()
Definition: LuaObject.h:268
static bool DynamicCastPromotionTest(LuaWrappable *o)
Definition: LuaObject.h:258
static T * GetFromLua(int idx)
Definition: LuaObject.h:245
static Ret CallMethod(T *o, const Key &key, const Args &... args)
Definition: LuaObject.h:420
static void RegisterClass()
Definition: LuaObject.h:367
LuaWrappable * GetObject() const
Definition: LuaObject.h:379
~LuaOwnObject()
Definition: LuaObject.h:374
LuaOwnObject(T *o)
Definition: LuaObject.h:369
Definition: LuaSerializer.h:12
Definition: LuaObject.h:320
LuaSharedObject(T *o)
Definition: LuaObject.h:322
LuaWrappable * GetObject() const
Definition: LuaObject.h:325
Definition: LuaWrappable.h:13
Definition: PropertyMap.h:11
Definition: RefCounted.h:36
Definition: RefCounted.h:11
Definition: SystemPath.h:13
const Color4ub * GetFromLua(lua_State *L, int idx)
Definition: LuaColor.cpp:303
void PushToLua(lua_State *L, const Color4ub &v)
Definition: LuaColor.h:14
Color4ub * CheckFromLua(lua_State *L, int idx)
Definition: LuaColor.cpp:308
void Register(lua_State *L)
Definition: LuaColor.cpp:273
LuaManager * manager
Definition: Lua.cpp:43
Definition: LuaObject.h:77
ToJson to_json
Definition: LuaObject.h:102
FromJson from_json
Definition: LuaObject.h:103
bool(* FromJson)(const Json &obj)
Definition: LuaObject.h:82
SerializerPair()
Definition: LuaObject.h:84
Serializer serialize
Definition: LuaObject.h:100
Deserializer deserialize
Definition: LuaObject.h:101
bool(* Deserializer)(const char *stream, const char **next)
Definition: LuaObject.h:79
void(* ToJson)(Json &out, LuaWrappable *o)
Definition: LuaObject.h:81
SerializerPair(Serializer serialize_, Deserializer deserialize_, ToJson to_json_, FromJson from_json_)
Definition: LuaObject.h:91