1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /* Read-only tables for Lua */
- #ifndef lrotable_h
- #define lrotable_h
- #include "lua.h"
- #include "llimits.h"
- #include "lobject.h"
- #include "luaconf.h"
- /* Macros one can use to define rotable entries */
- #ifndef LUA_PACK_VALUE
- #define LRO_FUNCVAL(v) {{.p = v}, LUA_TLIGHTFUNCTION}
- #define LRO_LUDATA(v) {{.p = v}, LUA_TLIGHTUSERDATA}
- #define LRO_NUMVAL(v) {{.n = v}, LUA_TNUMBER}
- #define LRO_ROVAL(v) {{.p = (void*)v}, LUA_TROTABLE}
- #define LRO_NILVAL {{.p = NULL}, LUA_TNIL}
- #else // #ifndef LUA_PACK_VALUE
- #define LRO_NUMVAL(v) {.value.n = v}
- #ifdef ELUA_ENDIAN_LITTLE
- #define LRO_FUNCVAL(v) {{(int)v, add_sig(LUA_TLIGHTFUNCTION)}}
- #define LRO_LUDATA(v) {{(int)v, add_sig(LUA_TLIGHTUSERDATA)}}
- #define LRO_ROVAL(v) {{(int)v, add_sig(LUA_TROTABLE)}}
- #define LRO_NILVAL {{0, add_sig(LUA_TNIL)}}
- #else // #ifdef ELUA_ENDIAN_LITTLE
- #define LRO_FUNCVAL(v) {{add_sig(LUA_TLIGHTFUNCTION), (int)v}}
- #define LRO_LUDATA(v) {{add_sig(LUA_TLIGHTUSERDATA), (int)v}}
- #define LRO_ROVAL(v) {{add_sig(LUA_TROTABLE), (int)v}}
- #define LRO_NILVAL {{add_sig(LUA_TNIL), 0}}
- #endif // #ifdef ELUA_ENDIAN_LITTLE
- #endif // #ifndef LUA_PACK_VALUE
- #define LRO_STRKEY(k) {LUA_TSTRING, {.strkey = k}}
- #define LRO_NUMKEY(k) {LUA_TNUMBER, {.numkey = k}}
- #define LRO_NILKEY {LUA_TNIL, {.strkey=NULL}}
- /* Maximum length of a rotable name and of a string key*/
- #define LUA_MAX_ROTABLE_NAME 32
- /* Type of a numeric key in a rotable */
- typedef int luaR_numkey;
- /* The next structure defines the type of a key */
- typedef struct
- {
- int type;
- union
- {
- const char* strkey;
- luaR_numkey numkey;
- } id;
- } luaR_key;
- /* An entry in the read only table */
- typedef struct
- {
- const luaR_key key;
- const TValue value;
- } luaR_entry;
- /* A rotable */
- typedef struct
- {
- const char *name;
- const luaR_entry *pentries;
- } luaR_table;
- void* luaR_findglobal(const char *key, unsigned len);
- int luaR_findfunction(lua_State *L, const luaR_entry *ptable);
- const TValue* luaR_findentry(void *data, const char *strkey, luaR_numkey numkey, unsigned *ppos);
- void luaR_getcstr(char *dest, const TString *src, size_t maxsize);
- void luaR_next(lua_State *L, void *data, TValue *key, TValue *val);
- void* luaR_getmeta(void *data);
- #ifdef LUA_META_ROTABLES
- int luaR_isrotable(void *p);
- #else
- #define luaR_isrotable(p) (0)
- #endif
- #endif
|