lua-users home
lua-l archive

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

Thank you! lua_next is what I was looking for. :)
On Apr 9, 2008, at 6:16 AM, Abhinav Lele wrote:

here is a snippet that i use in one of my programs.
 if(lua_istable(L,-2)) {
                               int index=-2;
                               int key; double value;
                               while(lua_next(L,index) != 0) {
                                       if(!lua_isnumber(L,-2) ||
!lua_isnumber(L,-1)) E("[ERR] C:set_lib_data - invalid key,value
                                       else {
                                               key =
(int)lua_tonumber(L,-2); value = lua_tonumber(L,-1);
                                               M("[INFO] key: " <<
key << " value: " << value << endl)
                       }else { E("[ERR] C:set_lib_data - invalid
argument 2\n") }

hope this helps.


On Wed, Apr 9, 2008 at 7:01 AM, Eugen-Andrei Gavriloaie
<> wrote:

It might sound stupid, but it seems that I can't find a way to iterate through a table in c++. Suppose we have a table pushed onto the stack (lua calls a c++ function and passes all the parameters using a table: key/value pairs). How do I iterate on that table (present on the top of stack) in c++?
I need both elements (key and value).

Please don't make fun of me now because I think I'll try to scratch with my
left on the right side of my head .... :)

One approach would be to globalize the table from the stack by giving it a name using lua_setglobal and after that evaluate a generated lua script like

for k,v in pairs(_some_random_name) do


evaluation is made using lua_loadstring()/lua_pcall()

After this, we can use lua_setglobal again to set `_some_random_name` to
nil and make the table available for GC.

But this is a huuuuge implementation overhead IMHO, because you must keep a
state in c++ outside the function
call_another_cpp_function_that_handles_only_one_row_in_the_table (store the key/value pair (now present on the stack like 2 distinct elements, easy to
pick up) into a more