Exemple #1
0
static void
_dict_close(Table *t, bool free_root) {
	if(t == NULL) {
		return;
	}
	int i = 0;
	for(i=0; i<t->capacity; i++) {
		TableNode *node = t->node + i;

		if((Table*)node->value != NULL) {
			_dict_close((Table*)node->value, true);
		}
	}
	free(t->node);
	if(free_root)
		free(t);
}
Exemple #2
0
static int
dict_open(lua_State *L) {
    luaL_checktype(L, 1, LUA_TTABLE);

    Table *dict = table_new();
    size_t len = lua_rawlen(L,1);
    size_t i;
    for(i=1;i<=len;i++) {
        lua_rawgeti(L, 1, i);
        if(!_dict_insert(L, dict)) {
            _dict_close(dict);
            return luaL_error(L, "illegal parameters in table index %d", i);
        }
        lua_pop(L, 1);
    }

    g_dict = dict;
    return 0;
}