1*8e3e3a7aSWarner Losh /* 2*8e3e3a7aSWarner Losh ** $Id: ltable.h,v 2.23 2016/12/22 13:08:50 roberto Exp $ 3*8e3e3a7aSWarner Losh ** Lua tables (hash) 4*8e3e3a7aSWarner Losh ** See Copyright Notice in lua.h 5*8e3e3a7aSWarner Losh */ 6*8e3e3a7aSWarner Losh 7*8e3e3a7aSWarner Losh #ifndef ltable_h 8*8e3e3a7aSWarner Losh #define ltable_h 9*8e3e3a7aSWarner Losh 10*8e3e3a7aSWarner Losh #include "lobject.h" 11*8e3e3a7aSWarner Losh 12*8e3e3a7aSWarner Losh 13*8e3e3a7aSWarner Losh #define gnode(t,i) (&(t)->node[i]) 14*8e3e3a7aSWarner Losh #define gval(n) (&(n)->i_val) 15*8e3e3a7aSWarner Losh #define gnext(n) ((n)->i_key.nk.next) 16*8e3e3a7aSWarner Losh 17*8e3e3a7aSWarner Losh 18*8e3e3a7aSWarner Losh /* 'const' to avoid wrong writings that can mess up field 'next' */ 19*8e3e3a7aSWarner Losh #define gkey(n) cast(const TValue*, (&(n)->i_key.tvk)) 20*8e3e3a7aSWarner Losh 21*8e3e3a7aSWarner Losh /* 22*8e3e3a7aSWarner Losh ** writable version of 'gkey'; allows updates to individual fields, 23*8e3e3a7aSWarner Losh ** but not to the whole (which has incompatible type) 24*8e3e3a7aSWarner Losh */ 25*8e3e3a7aSWarner Losh #define wgkey(n) (&(n)->i_key.nk) 26*8e3e3a7aSWarner Losh 27*8e3e3a7aSWarner Losh #define invalidateTMcache(t) ((t)->flags = 0) 28*8e3e3a7aSWarner Losh 29*8e3e3a7aSWarner Losh 30*8e3e3a7aSWarner Losh /* true when 't' is using 'dummynode' as its hash part */ 31*8e3e3a7aSWarner Losh #define isdummy(t) ((t)->lastfree == NULL) 32*8e3e3a7aSWarner Losh 33*8e3e3a7aSWarner Losh 34*8e3e3a7aSWarner Losh /* allocated size for hash nodes */ 35*8e3e3a7aSWarner Losh #define allocsizenode(t) (isdummy(t) ? 0 : sizenode(t)) 36*8e3e3a7aSWarner Losh 37*8e3e3a7aSWarner Losh 38*8e3e3a7aSWarner Losh /* returns the key, given the value of a table entry */ 39*8e3e3a7aSWarner Losh #define keyfromval(v) \ 40*8e3e3a7aSWarner Losh (gkey(cast(Node *, cast(char *, (v)) - offsetof(Node, i_val)))) 41*8e3e3a7aSWarner Losh 42*8e3e3a7aSWarner Losh 43*8e3e3a7aSWarner Losh LUAI_FUNC const TValue *luaH_getint (Table *t, lua_Integer key); 44*8e3e3a7aSWarner Losh LUAI_FUNC void luaH_setint (lua_State *L, Table *t, lua_Integer key, 45*8e3e3a7aSWarner Losh TValue *value); 46*8e3e3a7aSWarner Losh LUAI_FUNC const TValue *luaH_getshortstr (Table *t, TString *key); 47*8e3e3a7aSWarner Losh LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); 48*8e3e3a7aSWarner Losh LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); 49*8e3e3a7aSWarner Losh LUAI_FUNC TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key); 50*8e3e3a7aSWarner Losh LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); 51*8e3e3a7aSWarner Losh LUAI_FUNC Table *luaH_new (lua_State *L); 52*8e3e3a7aSWarner Losh LUAI_FUNC void luaH_resize (lua_State *L, Table *t, unsigned int nasize, 53*8e3e3a7aSWarner Losh unsigned int nhsize); 54*8e3e3a7aSWarner Losh LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, unsigned int nasize); 55*8e3e3a7aSWarner Losh LUAI_FUNC void luaH_free (lua_State *L, Table *t); 56*8e3e3a7aSWarner Losh LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); 57*8e3e3a7aSWarner Losh LUAI_FUNC int luaH_getn (Table *t); 58*8e3e3a7aSWarner Losh 59*8e3e3a7aSWarner Losh 60*8e3e3a7aSWarner Losh #if defined(LUA_DEBUG) 61*8e3e3a7aSWarner Losh LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); 62*8e3e3a7aSWarner Losh LUAI_FUNC int luaH_isdummy (const Table *t); 63*8e3e3a7aSWarner Losh #endif 64*8e3e3a7aSWarner Losh 65*8e3e3a7aSWarner Losh 66*8e3e3a7aSWarner Losh #endif 67