github.com: Return a multidimensional table from C function to Lua

github.com: Return a multidimensional table from C function to Lua

/*

Return an array in this structure

http://stackoverflow.com/questions/20173954/how-to-return-a-multidimensional-table-from-c-function-to-lua

In Lua array values usually starts at 1.

{

[1] = { ["field1"] = "1", ["field2"] = "2" , ["field3"] = "3" },

[2] = { ["field1"] = "10" , ["field2"] = "20", ["field3"] = "30" }

}

*/

/* Pushes multidimentional table on top of Lua VM stack. */

int l_push_multidim_table(lua_State *l)

{

    /* Creates parent table of size 2 array elements: */

    lua_createtable(L, 2, 0);

    /* Puts key of the first child table on-top of Lua VM stack: */

    lua_pushnumber(L, 1);

    /*Creates first child table of size 3 non-array elements: */

    lua_createtable(L, 0, 3);

    /* Fills the first child table: */

    lua_pushnumber(L, 1);

    lua_setfield(L, -2, "field1");

    lua_pushnumber(L, 2);

    /* setfield() pops the value from Lua VM stack. */

    lua_setfield(L, -2, "field2");

    lua_pushnumber(L, 3);

    lua_setfield(L, -2, "field3");

    /* Remember, child table is on-top of the stack.

* lua_settable() pops key, value pair from Lua VM stack. */

    lua_settable(L, -3);

    /* Pushes they key value for the second child table: */

    lua_pushnumber(L, 2);

    /*Creates second child table of size 3 non-array elements: */

    lua_createtable(L, 0, 3);

    /* Fills the second child table: */

    lua_pushnumber(L, 10);

    lua_setfield(L, -2, "field1");

    lua_pushnumber(L, 20);

    lua_setfield(L, -2, "field2");

    lua_pushnumber(L, 30);

    lua_setfield(L, -2, "field3");

    /* Remember, child table is still on-top of the stack.

* lua_settable pops the key, value pair from Lua VM stack

* And puts child table into the parent. */

    lua_settable(L, -3);

    /* Returns number of output tables:

* (1 multidimentional) */

    return 1;

}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s