OpenSim.Region.ScriptEngine.../src/LUA/LuaTable.cs

120 lines
2.6 KiB
C#

using System;
using System.Collections;
using NLua.Extensions;
using LuaState = KeraLua.Lua;
namespace NLua
{
public class LuaTable : LuaBase
{
public LuaTable(int reference, Lua interpreter): base(reference, interpreter)
{
}
/*
* Indexer for string fields of the table
*/
public object this[string field] {
get
{
Lua lua;
if (!TryGet(out lua))
return null;
return lua.GetObject(_Reference, field);
}
set
{
Lua lua;
if (!TryGet(out lua))
return;
lua.SetObject(_Reference, field, value);
}
}
/*
* Indexer for numeric fields of the table
*/
public object this[object field] {
get
{
Lua lua;
if (!TryGet(out lua))
return null;
return lua.GetObject(_Reference, field);
}
set
{
Lua lua;
if (!TryGet(out lua))
return;
lua.SetObject(_Reference, field, value);
}
}
public IDictionaryEnumerator GetEnumerator()
{
Lua lua;
if (!TryGet(out lua))
return null;
return lua.GetTableDict(this).GetEnumerator();
}
public ICollection Keys
{
get
{
Lua lua;
if (!TryGet(out lua))
return null;
return lua.GetTableDict(this).Keys;
}
}
public ICollection Values
{
get
{
Lua lua;
if (!TryGet(out lua))
return null;
return lua.GetTableDict(this).Values;
}
}
/*
* Gets an string fields of a table ignoring its metatable,
* if it exists
*/
internal object RawGet(string field)
{
Lua lua;
if (!TryGet(out lua))
return null;
return lua.RawGetObject(_Reference, field);
}
/*
* Pushes this table into the Lua stack
*/
internal void Push(LuaState luaState)
{
luaState.GetRef(_Reference);
}
public override string ToString()
{
return "table";
}
}
}