2015-06-30 93 views
3

我調用C函數在Lua傳遞數組/表以它作爲參數:是否可以使用c指針訪問Lua表元素?

tools:setColors({255,255,0}) 

在C函數I得到的尺寸:而不是遍歷表是

if (lua_gettop(state) == 2 && lua_istable(state, -1)) 
{ 
    lua_len(state, -1); 
    int count = lua_tointeger(state, -1); 
    lua_pop(state, 1); 
} 

有可能獲得指向該數組的C指針,以便稍後用於memcpy?或者也許有另一種方法直接複製數據?

更新: 我確實嘗試這樣做,所以也許有人有更好的解決辦法... 在我的Lua腳本中,我做了一些計算與顏色。所有顏色的RGB值都保存在一個大表格中(上面的例子意味着一種顏色)。該表通過setColors調用返回給我的C代碼,我通常會使用memcpy將它複製到std :: vector(memcpy(_colors.data(), data, length); 此刻,我做了以下內容:

// one argument with array of colors (triple per color) 
    lua_len(state, -1); 
    int count = lua_tointeger(state, -1); 
    lua_pop(state, 1); 

    for (int i=0; i < count/3; i++) 
    { 
     ColorRgb color; // struct {uint8_t red, uint8_t green, uint8_t blue} 
     lua_rawgeti(state, 2, 1 + i*3); 
     color.red = luaL_checkinteger(state, -1); 
     lua_pop(state, 1); 

     lua_rawgeti(state, 2, 2 + i*3); 
     color.green = luaL_checkinteger(state, -1); 
     lua_pop(state, 1); 

     lua_rawgeti(state, 2, 3 + i*3); 
     color.blue = luaL_checkinteger(state, -1); 
     lua_pop(state, 1); 
     _colors[i] = color; 
    } 

似乎對我來說一個簡單的複製操作大量的代碼...... 附: 我與Lua 5.3一起工作

+0

我以爲Lua沒有數組 - 一切都是表格。 「陣列」只是帶有鍵1,2,...的表格的語法糖。 –

+0

直到Lua 4纔出現這種情況;在Lua 5中,混合數據結構被用來實現具有獨立陣列和散列表部分的表。請參閱http://www.lua.org/doc/jucs05.pdf的§4。 – legends2k

+0

@Gama如果您使用的是Lua 5+,並且您存儲爲數組元素的數據可以連續存儲它們(例如表格 - 因爲它們是通過引用存儲的) )。我建議你查找Lua實現代碼或者在[Lua郵件列表](http://lua-users.org/)中詢問。 – legends2k

回答

1

不,不可能通過指針使用Lua表作爲C數組。

獲取和放入Lua表中的值的唯一方法是使用Lua C API。