// use lunaStack::push if possible. public static void push(Lua.lua_State L, LWF.Point obj, bool gc, Lua.CharPtr metatable = null) { int objectId = -1; if (!objectIdentifiers[L].TryGetValue(obj, out objectId)) { objectId = idOffset++; objectIdentifiers[L].Add(obj, objectId); objects[L].Add(objectId, obj); } if (metatable == null) { metatable = LunaTraits_LWF_Point.className; } Lua.lua_pushstring(L, "__luna"); Lua.lua_gettable(L, Lua.LUA_GLOBALSINDEX); int __luna = Lua.lua_gettop(L); Luna.userdataType ud = new Luna.userdataType( objectId: objectId, // store object in userdata gc: gc, // collect garbage has_env: false, // does this userdata has a table attached to it? typeId: LunaTraits_LWF_Point.uniqueID ); ud.ToBytes((byte[])Lua.lua_newuserdata(L, Luna.userdataType.Size)); Lua.lua_pushstring(L, metatable); Lua.lua_gettable(L, __luna); Lua.lua_setmetatable(L, -2); //Luna.printStack(L); Lua.lua_insert(L, -2); // swap __luna and userdata Lua.lua_pop(L, 1); }
private static int tostring_T(Lua.lua_State L) { Luna.userdataType ud = (Luna.userdataType)Lua.lua_touserdata(L, 1); LWF.Point obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) { return(0); } char[] buff = obj.ToString().ToCharArray(0, 32); Lua.lua_pushfstring(L, "%s (%s)", new object[] { LunaTraits_LWF_Point.className, buff }); return(1); }
// garbage collection metamethod private static int gc_T(Lua.lua_State L) { Luna.userdataType ud = (Luna.userdataType)Lua.lua_touserdata(L, 1); LWF.Point obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) { return(0); } if (ud.Gc) { LunaTraits_LWF_Point._bind_dtor(obj); // call constructor for T objects } Destroy(L, obj); return(0); }
private static int tostring_T(Lua.lua_State L) { byte[] d = (byte[])Lua.lua_touserdata(L, 1); if (d == null) { Luna.print("checkRaw: ud==nil\n"); Lua.luaL_typerror(L, 1, LunaTraits_LWF_Point.className); } Luna.userdataType ud = new Luna.userdataType(d); LWF.Point obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) { return(0); } char[] buff = obj.ToString().ToCharArray(0, 32); Lua.lua_pushfstring(L, "%s (%s)", new object[] { LunaTraits_LWF_Point.className, buff }); return(1); }
static public LWF.Point check(Lua.lua_State L, int narg) { byte[] d = (byte[])Lua.lua_touserdata(L, narg); if (d == null) { Luna.print("checkRaw: ud==nil\n"); Lua.luaL_typerror(L, narg, LunaTraits_LWF_Point.className); } Luna.userdataType ud = new Luna.userdataType(d); if (ud.TypeId != LunaTraits_LWF_Point.uniqueID) // type checking with almost no overhead { Luna.print(String.Format("ud.uid: {0} != interface::uid : {1}\n", ud.TypeId, LunaTraits_LWF_Point.uniqueID)); Lua.luaL_typerror(L, narg, LunaTraits_LWF_Point.className); } LWF.Point obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) { return(null); } return(obj); }
// garbage collection metamethod private static int gc_T(Lua.lua_State L) { byte[] d = (byte[])Lua.lua_touserdata(L, 1); if (d == null) { Luna.print("checkRaw: ud==nil\n"); Lua.luaL_typerror(L, 1, LunaTraits_LWF_Point.className); } Luna.userdataType ud = new Luna.userdataType(d); LWF.Point obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) { return(0); } if (ud.Gc) { LunaTraits_LWF_Point._bind_dtor(obj); // call constructor for T objects Destroy(L, obj); } return(0); }
private static int tostring_T (Lua.lua_State L) { byte[] d = (byte[])Lua.lua_touserdata(L, 1); if(d == null) { Luna.print("checkRaw: ud==nil\n"); Lua.luaL_typerror(L, 1, LunaTraits_LWF_Movie.className); } Luna.userdataType ud = new Luna.userdataType(d); LWF.Movie obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) return 0; char[] buff = obj.ToString().ToCharArray(0,32); Lua.lua_pushfstring(L, "%s (%s)", new object[] {LunaTraits_LWF_Movie.className, buff}); return 1; }
// garbage collection metamethod private static int gc_T(Lua.lua_State L) { byte[] d = (byte[])Lua.lua_touserdata(L, 1); if(d == null) { Luna.print("checkRaw: ud==nil\n"); Lua.luaL_typerror(L, 1, LunaTraits_LWF_Movie.className); } Luna.userdataType ud = new Luna.userdataType(d); LWF.Movie obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) return 0; if (ud.Gc) { LunaTraits_LWF_Movie._bind_dtor(obj); // call constructor for T objects Destroy(L, obj); } return 0; }
// use lunaStack::push if possible. public static void push(Lua.lua_State L, LWF.Movie obj, bool gc, Lua.CharPtr metatable=null) { if (obj == null) { Lua.lua_pushnil(L); return; } int objectId = -1; if (!objectIdentifiers[L].TryGetValue(obj, out objectId)) { objectId = idOffset ++; objectIdentifiers[L].Add(obj, objectId); objects[L].Add(objectId, obj); } if (metatable == null) metatable = LunaTraits_LWF_Movie.className; Lua.lua_pushstring(L,"__luna"); Lua.lua_gettable(L, Lua.LUA_GLOBALSINDEX); int __luna= Lua.lua_gettop(L); Luna.userdataType ud = new Luna.userdataType( objectId:objectId, // store object in userdata gc:gc, // collect garbage has_env:false, // does this userdata has a table attached to it? typeId:LunaTraits_LWF_Movie.uniqueID ); ud.ToBytes((byte[])Lua.lua_newuserdata(L, Luna.userdataType.Size)); Lua.lua_pushstring(L, metatable); Lua.lua_gettable(L, __luna); Lua.lua_setmetatable(L, -2); //Luna.printStack(L); Lua.lua_insert(L, -2); // swap __luna and userdata Lua.lua_pop(L,1); }
static public LWF.Movie check(Lua.lua_State L, int narg) { byte[] d = (byte[])Lua.lua_touserdata(L,narg); if(d == null) { Luna.print("checkRaw: ud==nil\n"); Lua.luaL_typerror(L, narg, LunaTraits_LWF_Movie.className); } Luna.userdataType ud = new Luna.userdataType(d); if(ud.TypeId !=LunaTraits_LWF_Movie.uniqueID) // type checking with almost no overhead { Luna.print(String.Format("ud.uid: {0} != interface::uid : {1}\n", ud.TypeId, LunaTraits_LWF_Movie.uniqueID)); Lua.luaL_typerror(L, narg, LunaTraits_LWF_Movie.className); } LWF.Movie obj = null; if (!objects[L].TryGetValue(ud.ObjectId, out obj)) return null; return obj; }