efl/src/bindings/lua/eina/counter.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