lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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