public static LuaDelegate NewDelegate(IntPtr ptr, int p) { LuaState state = LuaState.Get(ptr); LuaNativeMethods.lua_pushvalue(ptr, p); // push function int fref = LuaNativeMethods.luaL_ref(ptr, LuaIndexes.LUARegistryIndex); // new ref function LuaDelegate f = new LuaDelegate(ptr, fref); LuaNativeMethods.lua_pushvalue(ptr, p); LuaNativeMethods.lua_pushinteger(ptr, fref); LuaNativeMethods.lua_settable(ptr, -3); // __LuaDelegate[func]= fref state.DelegateMap[fref] = f; return(f); }
public void SetObject(int reference, int index, object o) { if (index >= 1) { LuaNativeMethods.lua_getref(statePointer, reference); LuaObject.PushVar(statePointer, o); LuaNativeMethods.lua_rawseti(statePointer, -2, index); LuaNativeMethods.lua_pop(statePointer, 1); } else { LuaNativeMethods.lua_getref(statePointer, reference); LuaNativeMethods.lua_pushinteger(statePointer, index); LuaObject.PushVar(statePointer, o); LuaNativeMethods.lua_settable(statePointer, -3); LuaNativeMethods.lua_pop(statePointer, 1); } }
public object GetObject(int reference, int index) { if (index >= 1) { LuaNativeMethods.lua_getref(statePointer, reference); LuaNativeMethods.lua_rawgeti(statePointer, -1, index); object returnValue = GetObject(statePointer, -1); LuaNativeMethods.lua_pop(statePointer, 2); return(returnValue); } else { LuaNativeMethods.lua_getref(statePointer, reference); LuaNativeMethods.lua_pushinteger(statePointer, index); LuaNativeMethods.lua_gettable(statePointer, -2); object returnValue = GetObject(statePointer, -1); LuaNativeMethods.lua_pop(statePointer, 2); return(returnValue); } }
public static void PushValue(IntPtr ptr, byte i) { LuaNativeMethods.lua_pushinteger(ptr, i); }
public static void PushValue(IntPtr ptr, ushort v) { LuaNativeMethods.lua_pushinteger(ptr, v); }
public void SetupPushVar() { typePushMap[typeof(float)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushnumber(ptr, (float)o); }; typePushMap[typeof(double)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushnumber(ptr, (double)o); }; typePushMap[typeof(int)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushinteger(ptr, (int)o); }; typePushMap[typeof(uint)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushnumber(ptr, Convert.ToUInt32(o)); }; typePushMap[typeof(short)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushinteger(ptr, (short)o); }; typePushMap[typeof(ushort)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushinteger(ptr, (ushort)o); }; typePushMap[typeof(sbyte)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushinteger(ptr, (sbyte)o); }; typePushMap[typeof(byte)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushinteger(ptr, (byte)o); }; typePushMap[typeof(long)] = typePushMap[typeof(ulong)] = (IntPtr ptr, object o) => { #if LUA_5_3 LuaNativeMethods.lua_pushinteger(ptr, (long)o); #else LuaNativeMethods.lua_pushnumber(ptr, System.Convert.ToDouble(o)); #endif }; typePushMap[typeof(string)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushstring(ptr, (string)o); }; typePushMap[typeof(bool)] = (IntPtr ptr, object o) => { LuaNativeMethods.lua_pushboolean(ptr, (bool)o); }; typePushMap[typeof(LuaTable)] = typePushMap[typeof(LuaFunction)] = typePushMap[typeof(LuaThread)] = (IntPtr ptr, object o) => { ((LuaVar)o).Push(ptr); }; typePushMap[typeof(LuaCSFunction)] = (IntPtr ptr, object o) => { LuaObject.PushValue(ptr, (LuaCSFunction)o); }; }
protected static void AddMember(IntPtr ptr, int v, string name) { LuaNativeMethods.lua_pushinteger(ptr, v); LuaNativeMethods.lua_setfield(ptr, -2, name); }