2015-01-11 7 views
5

In Lua 5.3 Tabelle verwandte Funktionen in der C-API empfangen und zurück lua_Integer.lua_Integer und lua_createtable (Tabelle Größenbeschränkung)

void lua_rawgeti (lua_State *L, int idx, lua_Integer n); 
void lua_rawseti (lua_State *L, int idx, lua_Integer n); 
lua_Integer luaL_len (lua_State *L, int index); 

Aber lua_createtable erhält noch int.

void lua_createtable (lua_State *L, int narr, int nrec); 

Im Beispiel Funktion unter der Länge der Quelltabelle wird verwendet, um eine Kopie zu erstellen, welche die gleiche Größe.

static int copy_sequence(lua_State *L) { 
    lua_Integer len, i; 
    luaL_checktype(L, 1, LUA_TTABLE); 
    len = luaL_len(L, 1); 
    lua_createtable(L, (int)len, 0); /* conversion warning */ 
    for (i = 1; i <= len; i++) { 
     lua_rawgeti(L, 1, i); 
     lua_rawseti(L, -2, i); 
    } 
    return 1; 
} 

Aber ein gegossenes erforderlich, um die Warnung zum Schweigen zu bringen:

Warnung: Umstellung auf 'int' von 'lua_Integer' kann seinen Wert [-Wconversion]

Suche verändern Auf der Lua-Mailingliste habe ich folgende thread gefunden, die über Lua 5.2 ist (gilt auch für frühere Versionen):

Zitat: Roberto Ierusalimschy (7 Aug 2012)

Die Größe der Tabellen ist bereits auf 2147483647 Elemente beschränkt. Lua verwendet intern 'int', um alle seine Arrays zu indizieren (außer Strings/Byte Arrays). Es ist ein Schmerz, mit unsigned Werten (wie size_t) überall zu arbeiten; ptrdiff_t hat keinerlei Garantien.

Ist dies immer noch der Fall für Lua 5.3 die long long für lua_Integer verwendet? Ist die Besetzung int von lua_Integer wie im obigen Beispiel sicher in Lua 5.3?

+0

Diese Frage scheint für die Lua-Mailingliste besser geeignet zu sein. – lhf

Antwort

5

Die Größe einer Tabelle (Anzahl der Elemente) ist immer noch auf 'int' beschränkt. Das verhindert nicht, dass eine Tabelle willkürliche lua_Integer-Schlüssel hat (solange , da die Tabelle keine richtige Sequenz ist).

+2

Danke, dass Sie sich die Zeit genommen haben, dies zu beantworten. Ich habe gerade einen Beitrag zu lua-l geschrieben, als ich deine Antwort gesehen habe. – Adam

Verwandte Themen