[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Re: Re: How do I manipulate C++ vectors of C structs in Lua?
- From: "Ken Smith" <kgsmith@...>
- Date: Tue, 14 Nov 2006 08:44:00 -0800
On 11/14/06, Zé Pedro <zarroba@gmail.com> wrote:
Thanks for the reply, but I'm not sure if that's what I want. I already do
something like that when translating C++ classes to lua, but two dimensional
arrays, I'm having dificulties seeing how to do it. Taking your example
would it be something like:
// export two dimensional arrays to Lua
I would do it like this.
---C++ backend---
static int class_to_lua_table(lua_State* L)
{
// Declare return table t
lua_newtable(L);
int table_stack_pos = lua_gettop(L);
for (int i=0; i<10; i++)
{
// Declare subtable at t[i]
lua_pushnumber(L, i);
lua_newtable(L);
int subtable_stack_pos = lua_gettop(L);
for (int j=0; j<10; j++)
{
char tmp_str[10];
sprintf(tmp_str, "%d,%d", i, j);
// Set t[i][j] to tmp_str
lua_pushnumber(L, j);
lua_pushstring(L, tmp_str);
// Finalize t[i][j]
lua_settable(L, subtable_stack_pos);
}
// Finalize t[i]
lua_settable(L, table_stack_pos);
}
// The top level table is the only thing on the stack.
assert(lua_gettop(L) == 1);
return 1;
}
Then the following lua will iterate through the 2d table.
---Lua---
t = mylib.class_to_lua_table()
for i,subtable in ipairs(t) do
for j,str in ipairs(subtable) do
print(i,j,str)
end
end
The above will print something like the following.
1 1 1,1
1 2 1,2
1 3 1,3
1 4 1,4
1 5 1,5
1 6 1,6
1 7 1,7
1 8 1,8
1 9 1,9
2 1 2,1
2 2 2,2
2 3 2,3
2 4 2,4
2 5 2,5
2 6 2,6
2 7 2,7
2 8 2,8
2 9 2,9
3 1 3,1
3 2 3,2
3 3 3,3
3 4 3,4
3 5 3,5
3 6 3,6
3 7 3,7
3 8 3,8
3 9 3,9
4 1 4,1
4 2 4,2
4 3 4,3
4 4 4,4
4 5 4,5
4 6 4,6
4 7 4,7
4 8 4,8
4 9 4,9
5 1 5,1
5 2 5,2
5 3 5,3
5 4 5,4
5 5 5,5
5 6 5,6
5 7 5,7
5 8 5,8
5 9 5,9
6 1 6,1
6 2 6,2
6 3 6,3
6 4 6,4
6 5 6,5
6 6 6,6
6 7 6,7
6 8 6,8
6 9 6,9
7 1 7,1
7 2 7,2
7 3 7,3
7 4 7,4
7 5 7,5
7 6 7,6
7 7 7,7
7 8 7,8
7 9 7,9
8 1 8,1
8 2 8,2
8 3 8,3
8 4 8,4
8 5 8,5
8 6 8,6
8 7 8,7
8 8 8,8
8 9 8,9
9 1 9,1
9 2 9,2
9 3 9,3
9 4 9,4
9 5 9,5
9 6 9,6
9 7 9,7
9 8 9,8
9 9 9,9
Cheers,
Ken Smith