120 lines
2.6 KiB
C#
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";
|
|
}
|
|
}
|
|
} |