41 static int LuaDatasetGC(
lua_State *luastate)
45 if (s != NULL && s->
set != NULL) {
53 static int LuaDatasetGetRef(
lua_State *luastate)
58 const char *
name = lua_tostring(luastate, 2);
64 if (dataset == NULL) {
71 static int LuaDatasetAdd(
lua_State *luastate)
74 struct LuaDataset *s = luaL_checkudata(luastate, 1,
"dataset::metatable");
76 LUA_ERROR(
"dataset is not initialized (call :get first)");
80 const uint8_t *
str = (
const uint8_t *)lua_tolstring(luastate, 2, &real_len);
85 if (!lua_isinteger(luastate, 3)) {
88 lua_Integer n = lua_tointeger(luastate, 3);
89 if (n < 0 || (
size_t)n > real_len) {
90 LUA_ERROR(
"length out of range for supplied string");
92 uint32_t str_len = (uint32_t)n;
96 lua_pushnumber(luastate, (lua_Number)r);
101 static int LuaDatasetNew(
lua_State *luastate)
108 memset(s, 0,
sizeof(*s));
109 luaL_getmetatable(luastate,
"dataset::metatable");
110 lua_setmetatable(luastate, -2);
116 static const luaL_Reg datasetlib[] = {
117 {
"new", LuaDatasetNew },
118 {
"get", LuaDatasetGetRef },
119 {
"add", LuaDatasetAdd },
120 {
"__gc", LuaDatasetGC },
127 luaL_newmetatable(luastate,
"dataset::metatable");
128 lua_pushvalue(luastate, -1);
129 lua_setfield(luastate, -2,
"__index");
130 luaL_setfuncs(luastate, datasetlib, 0);
131 luaL_newlib(luastate, datasetlib);