[C++] Come restituire una tabella di tabelle a Lua dalla funzione C, attraverso un ciclo for


Answers

Poiché si conoscono le dimensioni delle tabelle in anticipo, è possibile evitare di riallocare la memoria utilizzando lua_createtable e alcuni overhead utilizzando rawseti .

static int make_matrix(lua_State *L) {
    lua_createtable(L, 512, 0);
    for (int i = 0; i < 512; ++i) {
        lua_createtable(L, 512, 0);
        for (int j = 0; j < 512; ++j) {
           lua_pushnumber(L, i + j);  // push some value, e.g. "pos[i][j]"
           lua_rawseti(L, -2, j + 1);
        }
        lua_rawseti(L, -2, i + 1);
    }
    return 1;
}
Question

Ho una std::list degli oggetti, e voglio dare a Lua una funzione che restituisca le sue posizioni multidimensionali. Quindi ho bisogno di creare una tabella di tabelle:

{{1,2,3...,512}, {1,2,3...,512},...,512}

lua_newtable(L);

    for (int i = 0; i < 512; i++)
    {
        lua_newtable(L);

        lua_pushnumber(L, pos[i]);
        lua_rawseti(L, -2, i);
        lua_rawseti(L, -2, i+1);

        for (int j = 0; j < 512; j++)
        {
                //pos[i][j]
        }
    }

Proverei per tentativi ed errori, ma dato che non so come fare il debug per ora, sono davvero perso.