extern "C" { #include "lua.h" #include "lauxlib.h" } #include #include using namespace std; using namespace __gnu_cxx; namespace __gnu_cxx { template<> struct hash { size_t operator()(const string& s) const { return __stl_hash_string(s.c_str()); } }; } hash_map _m; hash_map _ms; extern "C"{ static int _set(lua_State *L) { lua_Integer k = luaL_checkinteger(L, 1); lua_Integer v = luaL_checkinteger(L, 2); _m[(int)k] = (int)v; return 0; } static int _get(lua_State *L) { lua_Integer k = luaL_checkinteger(L, 1); lua_pushinteger(L, (int)_m[(int)k]); return 1; } static int _sets(lua_State *L) { const char* k = luaL_checkstring(L, 1); const char* v = luaL_checkstring(L, 2); _ms[string(k)] = string(v); return 0; } static int _gets(lua_State *L) { const char* k = luaL_checkstring(L, 1); lua_pushstring(L, _ms[string(k)].c_str()); return 1; } LUAMOD_API int luaopen_map(lua_State *L) { luaL_Reg l[] = { { "get", _get}, { "set", _set}, { "gets", _gets}, { "sets", _sets}, { NULL, NULL }, }; luaL_newlib(L,l); return 1; } }