lua-users home
lua-l archive

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


Hello,

I try to replace a LUA table in C++. I do this in LUA:

    tc=TestClass:new ()
    a={10,11,12,13,14,15,16,17,18,19,20,21}
    tc:testX (a)
    print (a[1])
    print (a[2])
    print (a[3])

Printed from LUA:
10
11
12

What does testX()?

    printf ("dump1:\n");
    stackDump (L);
    
    array2table( L, lobj );
    lua_remove(L, 2);
    
    printf ("dump2:\n");
    stackDump (L);

... and...

void array2table( lua_State *L, lua_Object lobj )
{
    if (lua_istable (L, lobj))
    {
        printf ("element is table");
        
        int arr[4] = { 5,100,-20,0 };
        lua_newtable(L);              // table
        
        for (int i=0; i<4; i++) 
        {
           lua_pushinteger(L, i+1);    // table,key
           lua_pushinteger(L, arr[i]); // table,key,value
           lua_settable(L,-3);         // table
        }
    }
}

This in printed in C++:

31018474 PID:1fe001a TID:53001e dump1:
31018474 PID:1fe001a TID:53001e stack dump start
31018474 PID:1fe001a TID:53001e userdata
31018475 PID:1fe001a TID:53001e   
31018475 PID:1fe001a TID:53001e table
31018476 PID:1fe001a TID:53001e table dump start
31018476 PID:1fe001a TID:53001e 10
31018477 PID:1fe001a TID:53001e 11
31018477 PID:1fe001a TID:53001e 12
31018478 PID:1fe001a TID:53001e 13
31018479 PID:1fe001a TID:53001e 14
31018479 PID:1fe001a TID:53001e 15
31018480 PID:1fe001a TID:53001e 16
31018480 PID:1fe001a TID:53001e 17
31018481 PID:1fe001a TID:53001e 18
31018481 PID:1fe001a TID:53001e 19
31018482 PID:1fe001a TID:53001e 20
31018485 PID:1fe001a TID:53001e 21
31018485 PID:1fe001a TID:53001e table dump end
31018486 PID:1fe001a TID:53001e   
31018487 PID:1fe001a TID:53001e 
31018488 PID:1fe001a TID:53001e stack dump end
31018489 PID:1fe001a TID:53001e element is table

31018490 PID:1fe001a TID:53001e dump2:
31018491 PID:1fe001a TID:53001e stack dump start
31018492 PID:1fe001a TID:53001e userdata
31018492 PID:1fe001a TID:53001e   
31018493 PID:1fe001a TID:53001e table
31018493 PID:1fe001a TID:53001e table dump start
31018495 PID:1fe001a TID:53001e 5
31018495 PID:1fe001a TID:53001e 100
31018496 PID:1fe001a TID:53001e -20
31018496 PID:1fe001a TID:53001e 0
31018497 PID:1fe001a TID:53001e table dump end
31018497 PID:1fe001a TID:53001e   
31018498 PID:1fe001a TID:53001e 
31018498 PID:1fe001a TID:53001e stack dump end

As you could see in 'dump2' I replaced the input table with my own table. Looks good so far. But why does LUA then print "10 11 12"? I would expect "5 100 -20". How could I access the table I replace in C++?

If I don't "lua_remove(L, 2);" then the new table is after the input table. But is there any way to access this new table in LUA?

regards
Andreas

--  
Dipl.-Inf. (FH) Andreas Volz, ES1
Elektrobit 
Phone: +49 (9131) 7701 167, mailto:Andreas.Volz@elektrobit.com
Fax: +49 (9131) 7701 333, http://www.elektrobit.com

Elektrobit Automotive GmbH, Am Wolfsmantel 46, 91058 Erlangen, Germany
Managing Director Otto Fößel
Register Court Fürth HRB 4886


----------------------------------------------------------------
Please note: This e-mail may contain confidential information
intended solely for the addressee. If you have received this
e-mail in error, please do not disclose it to anyone, notify
the sender promptly, and delete the message from your system.
Thank you.