forked from enlightenment/efl
63 lines
1.4 KiB
Lua
63 lines
1.4 KiB
Lua
-- EFL LuaJIT bindings: Eina (counter module)
|
|
-- For use with Elua
|
|
|
|
local ffi = require("ffi")
|
|
local C = ffi.C
|
|
|
|
ffi.cdef [[
|
|
typedef struct _Eina_Counter Eina_Counter;
|
|
Eina_Counter *eina_counter_new (const char *name);
|
|
void eina_counter_free (Eina_Counter *counter);
|
|
void eina_counter_start(Eina_Counter *counter);
|
|
void eina_counter_stop (Eina_Counter *counter, int specimen);
|
|
char *eina_counter_dump (Eina_Counter *counter);
|
|
|
|
void free(void*);
|
|
]]
|
|
|
|
local cutil = require("cutil")
|
|
local util = require("util")
|
|
|
|
local M = {}
|
|
|
|
local eina
|
|
|
|
local init = function()
|
|
eina = util.lib_load("eina")
|
|
end
|
|
|
|
local shutdown = function()
|
|
util.lib_unload("eina")
|
|
end
|
|
|
|
cutil.init_module(init, shutdown)
|
|
|
|
M.Counter = ffi.metatype("Eina_Counter", {
|
|
__new = function(self, name)
|
|
return ffi.gc(eina.eina_counter_new(name), self.free)
|
|
end,
|
|
__index = {
|
|
free = function(self)
|
|
return eina.eina_counter_free(ffi.gc(self, nil))
|
|
end,
|
|
|
|
start = function(self)
|
|
return eina.eina_counter_start(self)
|
|
end,
|
|
|
|
stop = function(self, specimen)
|
|
return eina.eina_counter_stop(self, specimen)
|
|
end,
|
|
|
|
dump = function(self)
|
|
local v = eina.eina_counter_dump(self)
|
|
if v == ffi.nullptr then return nil end
|
|
local r = ffi.string(v)
|
|
C.free(v)
|
|
return r
|
|
end
|
|
}
|
|
})
|
|
|
|
return M
|