Track the number of objects
With this patch, we track the number of objects that are alive for any class. This information can be accessed via class.instances() For example: print("wiboxes", wibox.instances()) print("widgets", widget.instances()) Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
c368b84817
commit
8701295e6c
|
@ -174,6 +174,7 @@ luaA_class_gc(lua_State *L)
|
||||||
signal_array_wipe(&item->signals);
|
signal_array_wipe(&item->signals);
|
||||||
/* Get the object class */
|
/* Get the object class */
|
||||||
lua_class_t *class = luaA_class_get(L, 1);
|
lua_class_t *class = luaA_class_get(L, 1);
|
||||||
|
class->instances--;
|
||||||
/* Call the collector function of the class, and all its parent classes */
|
/* Call the collector function of the class, and all its parent classes */
|
||||||
for(; class; class = class->parent)
|
for(; class; class = class->parent)
|
||||||
if(class->collector)
|
if(class->collector)
|
||||||
|
@ -243,6 +244,7 @@ luaA_class_setup(lua_State *L, lua_class_t *class,
|
||||||
class->newindex_miss_property = newindex_miss_property;
|
class->newindex_miss_property = newindex_miss_property;
|
||||||
class->checker = checker;
|
class->checker = checker;
|
||||||
class->parent = parent;
|
class->parent = parent;
|
||||||
|
class->instances = 0;
|
||||||
|
|
||||||
signal_add(&class->signals, "new");
|
signal_add(&class->signals, "new");
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,8 @@ struct lua_class_t
|
||||||
lua_class_propfunc_t newindex_miss_property;
|
lua_class_propfunc_t newindex_miss_property;
|
||||||
/** Function to call to check if an object is valid */
|
/** Function to call to check if an object is valid */
|
||||||
lua_class_checker_t checker;
|
lua_class_checker_t checker;
|
||||||
|
/** Number of instances of this class in lua */
|
||||||
|
unsigned int instances;
|
||||||
};
|
};
|
||||||
|
|
||||||
const char * luaA_typename(lua_State *, int);
|
const char * luaA_typename(lua_State *, int);
|
||||||
|
@ -133,13 +135,21 @@ luaA_checkudataornil(lua_State *L, int udx, lua_class_t *class)
|
||||||
luaA_class_emit_signal(L, &(lua_class), luaL_checkstring(L, 1), \
|
luaA_class_emit_signal(L, &(lua_class), luaL_checkstring(L, 1), \
|
||||||
lua_gettop(L) - 1); \
|
lua_gettop(L) - 1); \
|
||||||
return 0; \
|
return 0; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline int \
|
||||||
|
luaA_##prefix##_class_instances(lua_State *L) \
|
||||||
|
{ \
|
||||||
|
lua_pushnumber(L, (lua_class).instances); \
|
||||||
|
return 1; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LUA_CLASS_METHODS(class) \
|
#define LUA_CLASS_METHODS(class) \
|
||||||
{ "add_signal", luaA_##class##_class_add_signal }, \
|
{ "add_signal", luaA_##class##_class_add_signal }, \
|
||||||
{ "connect_signal", luaA_##class##_class_connect_signal }, \
|
{ "connect_signal", luaA_##class##_class_connect_signal }, \
|
||||||
{ "disconnect_signal", luaA_##class##_class_disconnect_signal }, \
|
{ "disconnect_signal", luaA_##class##_class_disconnect_signal }, \
|
||||||
{ "emit_signal", luaA_##class##_class_emit_signal },
|
{ "emit_signal", luaA_##class##_class_emit_signal }, \
|
||||||
|
{ "instances", luaA_##class##_class_instances }, \
|
||||||
|
|
||||||
#define LUA_CLASS_META \
|
#define LUA_CLASS_META \
|
||||||
{ "__index", luaA_class_index }, \
|
{ "__index", luaA_class_index }, \
|
||||||
|
|
|
@ -167,6 +167,7 @@ int luaA_object_emit_signal_simple(lua_State *);
|
||||||
{ \
|
{ \
|
||||||
type *p = lua_newuserdata(L, sizeof(type)); \
|
type *p = lua_newuserdata(L, sizeof(type)); \
|
||||||
p_clear(p, 1); \
|
p_clear(p, 1); \
|
||||||
|
(lua_class).instances++; \
|
||||||
luaA_settype(L, &(lua_class)); \
|
luaA_settype(L, &(lua_class)); \
|
||||||
lua_newtable(L); \
|
lua_newtable(L); \
|
||||||
lua_newtable(L); \
|
lua_newtable(L); \
|
||||||
|
|
|
@ -27,3 +27,8 @@ module("button")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of button objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -128,3 +128,8 @@ module("client")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of client objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -128,3 +128,8 @@ module("image")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of image objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -30,3 +30,8 @@ module("key")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of key objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -33,3 +33,8 @@ module("tag")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of tag objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -38,3 +38,8 @@ module("timer")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of timer objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -58,3 +58,8 @@ module("wibox")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of wibox objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
|
@ -66,3 +66,8 @@ module("widget")
|
||||||
-- @param ... Various arguments, optional.
|
-- @param ... Various arguments, optional.
|
||||||
-- @name emit_signal
|
-- @name emit_signal
|
||||||
-- @class function
|
-- @class function
|
||||||
|
|
||||||
|
--- Get the number of instances.
|
||||||
|
-- @return The number of widget objects alive.
|
||||||
|
-- @name instances
|
||||||
|
-- @class function
|
||||||
|
|
Loading…
Reference in New Issue