lua-utils: add object destructor 62/2562/1
authorJanos Kovacs <jankovac503@gmail.com>
Mon, 10 Dec 2012 19:46:18 +0000 (21:46 +0200)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Mon, 10 Dec 2012 20:33:52 +0000 (22:33 +0200)
src/core/lua-utils/object.c
src/core/lua-utils/object.h

index 0355346..b80630e 100644 (file)
@@ -172,6 +172,30 @@ void mrp_lua_set_object_name(lua_State          *L,
     }
 }
 
+void mrp_lua_destroy_object(lua_State *L, const char *name, void *data)
+{
+    static int offset = ((userdata_t *)0)->data - (char *)0;
+
+    userdata_t *userdata = (userdata_t *)(data - offset);
+    mrp_lua_classdef_t *def;
+
+    if (data && userdata == userdata->self && userdata->dead) {
+        def = userdata->def;
+
+        luaL_unref(L, LUA_REGISTRYINDEX, userdata->luatbl);
+
+        mrp_lua_get_class_table(L, def);
+        luaL_checktype(L, -1, LUA_TTABLE);
+
+        lua_pushstring(L, name);
+        lua_pushnil(L);
+
+        lua_rawset(L, -3);
+
+        lua_pop(L, 1);
+    }
+}
+
 int mrp_lua_find_object(lua_State *L, mrp_lua_classdef_t *def,const char *name)
 {
     if (!name)
@@ -267,7 +291,6 @@ int mrp_lua_push_object(lua_State *L, void *data)
 }
 
 
-
 static bool valid_id(const char *id)
 {
     const char *p;
index 1c1761f..b27323a 100644 (file)
@@ -132,6 +132,8 @@ void *mrp_lua_create_object(lua_State *L, mrp_lua_classdef_t *class,
 void  mrp_lua_set_object_name(lua_State  *L, mrp_lua_classdef_t *def,
                               const char *name);
 
+void  mrp_lua_destroy_object(lua_State *L, const char *name, void *object);
+
 int   mrp_lua_find_object(lua_State *L, mrp_lua_classdef_t *def,
                           const char *name);