diff --git a/src/pre_generated-zmq.nobj.c b/src/pre_generated-zmq.nobj.c index e8d6f46..cc604c2 100644 --- a/src/pre_generated-zmq.nobj.c +++ b/src/pre_generated-zmq.nobj.c @@ -12,6 +12,7 @@ #include #include "zmq.h" +#include "zmq_utils.h" #define REG_PACKAGE_IS_CONSTRUCTOR 0 @@ -175,6 +176,9 @@ static obj_type obj_types[] = { #define obj_type_id_ZMQ_Ctx 3 #define obj_type_ZMQ_Ctx (obj_types[obj_type_id_ZMQ_Ctx]) { NULL, 3, OBJ_TYPE_FLAG_WEAK_REF, "ZMQ_Ctx" }, +#define obj_type_id_ZMQ_StopWatch 4 +#define obj_type_ZMQ_StopWatch (obj_types[obj_type_id_ZMQ_StopWatch]) + { NULL, 4, OBJ_TYPE_FLAG_WEAK_REF, "ZMQ_StopWatch" }, {NULL, -1, 0, NULL}, }; @@ -706,6 +710,13 @@ static int nobj_try_loading_ffi(lua_State *L, const char *ffi_mod_name, #define obj_type_ZMQ_Ctx_push(L, obj, flags) \ obj_udata_luapush_weak(L, (void *)obj, &(obj_type_ZMQ_Ctx), flags) +#define obj_type_ZMQ_StopWatch_check(L, _index) \ + obj_udata_luacheck(L, _index, &(obj_type_ZMQ_StopWatch)) +#define obj_type_ZMQ_StopWatch_delete(L, _index, flags) \ + obj_udata_luadelete_weak(L, _index, &(obj_type_ZMQ_StopWatch), flags) +#define obj_type_ZMQ_StopWatch_push(L, obj, flags) \ + obj_udata_luapush_weak(L, (void *)obj, &(obj_type_ZMQ_StopWatch), flags) + @@ -966,10 +977,20 @@ static const char zmq_ffi_lua_code[] = "local error = error\n" "\n" "ZMQ_Socket zmq_socket(ZMQ_Ctx * this, int type);\n" "\n" +"typedef void * ZMQ_StopWatch;\n" +"\n" +"unsigned long zmq_stopwatch_stop (ZMQ_StopWatch watch_);\n" +"\n" +"ZMQ_StopWatch zmq_stopwatch_start();\n" +"\n" "ZMQ_Ctx zmq_init(int io_threads);\n" "\n" "ZMQ_Error zmq_device(int device, ZMQ_Socket insock, ZMQ_Socket outsock);\n" "\n" +"ZMQ_StopWatch zmq_stopwatch_start();\n" +"\n" +"void zmq_sleep(int seconds_);\n" +"\n" "\n" "]]\n" "\n" @@ -1101,6 +1122,38 @@ static const char zmq_ffi_lua_code[] = "local error = error\n" "end)()\n" "\n" "\n" +"local obj_type_ZMQ_StopWatch_check\n" +"local obj_type_ZMQ_StopWatch_delete\n" +"local obj_type_ZMQ_StopWatch_push\n" +"\n" +"(function()\n" +"local ZMQ_StopWatch_mt = _priv.ZMQ_StopWatch\n" +"local ZMQ_StopWatch_objects = setmetatable({}, { __mode = \"k\" })\n" +"function obj_type_ZMQ_StopWatch_check(ud_obj)\n" +" local c_obj = ZMQ_StopWatch_objects[ud_obj]\n" +" if c_obj == nil then\n" +" -- cdata object not in cache\n" +" c_obj = obj_udata_luacheck(ud_obj, ZMQ_StopWatch_mt)\n" +" c_obj = ffi.cast(\"ZMQ_StopWatch *\", c_obj) -- cast from 'void *'\n" +" ZMQ_StopWatch_objects[ud_obj] = c_obj\n" +" end\n" +" return c_obj\n" +"end\n" +"\n" +"function obj_type_ZMQ_StopWatch_delete(ud_obj)\n" +" ZMQ_StopWatch_objects[ud_obj] = nil\n" +" return obj_udata_luadelete_weak(ud_obj, ZMQ_StopWatch_mt)\n" +"end\n" +"\n" +"local ZMQ_StopWatch_type = ffi.cast(\"obj_type *\", ZMQ_StopWatch_mt[\".type\"])\n" +"function obj_type_ZMQ_StopWatch_push(c_obj, flags)\n" +" local ud_obj = obj_udata_luapush_weak(c_obj, ZMQ_StopWatch_mt, ZMQ_StopWatch_type, flags)\n" +" ZMQ_StopWatch_objects[ud_obj] = c_obj\n" +" return ud_obj\n" +"end\n" +"end)()\n" +"\n" +"\n" "local _pub = {}\n" "local _meth = {}\n" "for obj_name,mt in pairs(_priv) do\n" @@ -1679,6 +1732,32 @@ static const char zmq_ffi_lua_code[] = "local error = error\n" "\n" "-- End \"ZMQ_Ctx\" FFI interface\n" "\n" +"\n" +"-- Start \"ZMQ_StopWatch\" FFI interface\n" +"-- method: start\n" +"function _pub.ZMQ_StopWatch.start()\n" +" local this_flags = OBJ_UDATA_FLAG_OWN\n" +" local this\n" +" local rc_zmq_stopwatch_start\n" +" rc_zmq_stopwatch_start = C.zmq_stopwatch_start()\n" +" this = obj_type_ZMQ_StopWatch_push(this, this_flags)\n" +" rc_zmq_stopwatch_start = obj_type_ZMQ_StopWatch_push(rc_zmq_stopwatch_start, 0)\n" +" return this, rc_zmq_stopwatch_start\n" +"end\n" +"\n" +"-- method: stop\n" +"function _meth.ZMQ_StopWatch.stop(self)\n" +" local this,this_flags = obj_type_ZMQ_StopWatch_delete(self)\n" +" if(band(this_flags,OBJ_UDATA_FLAG_OWN) == 0) then return end\n" +" local usecs\n" +" usecs = tonumber(C.zmq_stopwatch_stop(this))\n" +"\n" +" usecs = usecs\n" +" return usecs\n" +"end\n" +"\n" +"-- End \"ZMQ_StopWatch\" FFI interface\n" +"\n" "-- method: init\n" "function _pub.zmq.init(io_threads)\n" " \n" @@ -1733,6 +1812,22 @@ static const char zmq_ffi_lua_code[] = "local error = error\n" " return rc_zmq_device, rc_zmq_device_err\n" "end\n" "\n" +"-- method: stopwatch_start\n" +"function _pub.zmq.stopwatch_start()\n" +" local rc_zmq_stopwatch_start_flags = OBJ_UDATA_FLAG_OWN\n" +" local rc_zmq_stopwatch_start\n" +" rc_zmq_stopwatch_start = C.zmq_stopwatch_start()\n" +" rc_zmq_stopwatch_start = obj_type_ZMQ_StopWatch_push(rc_zmq_stopwatch_start, rc_zmq_stopwatch_start_flags)\n" +" return rc_zmq_stopwatch_start\n" +"end\n" +"\n" +"-- method: sleep\n" +"function _pub.zmq.sleep(seconds_)\n" +" \n" +" C.zmq_sleep(seconds_)\n" +" return \n" +"end\n" +"\n" ""; /* detect zmq version >= 2.1.0 */ @@ -1989,6 +2084,8 @@ static int poller_poll(ZMQ_Poller *this, long timeout) { typedef void * ZMQ_Ctx; +typedef void * ZMQ_StopWatch; + /* * This wrapper function is to make the EAGAIN/ETERM error messages more like * what is returned by LuaSocket. @@ -2797,6 +2894,29 @@ static int ZMQ_Ctx__socket__meth(lua_State *L) { return 1; } +/* method: start */ +static int ZMQ_StopWatch__start__meth(lua_State *L) { + int this_flags = OBJ_UDATA_FLAG_OWN; + ZMQ_StopWatch * this; + ZMQ_StopWatch rc_zmq_stopwatch_start; + rc_zmq_stopwatch_start = zmq_stopwatch_start(); + obj_type_ZMQ_StopWatch_push(L, this, this_flags); + obj_type_ZMQ_StopWatch_push(L, rc_zmq_stopwatch_start, 0); + return 2; +} + +/* method: stop */ +static int ZMQ_StopWatch__stop__meth(lua_State *L) { + int this_flags = 0; + ZMQ_StopWatch * this = obj_type_ZMQ_StopWatch_delete(L,1,&(this_flags)); + unsigned long usecs = 0; + if(!(this_flags & OBJ_UDATA_FLAG_OWN)) { return 0; } + usecs = zmq_stopwatch_stop(this); + + lua_pushinteger(L, usecs); + return 1; +} + /* method: version */ static int zmq__version__func(lua_State *L) { int major, minor, patch; @@ -2865,6 +2985,22 @@ static int zmq__device__func(lua_State *L) { return 2; } +/* method: stopwatch_start */ +static int zmq__stopwatch_start__func(lua_State *L) { + int rc_zmq_stopwatch_start_flags = OBJ_UDATA_FLAG_OWN; + ZMQ_StopWatch rc_zmq_stopwatch_start; + rc_zmq_stopwatch_start = zmq_stopwatch_start(); + obj_type_ZMQ_StopWatch_push(L, rc_zmq_stopwatch_start, rc_zmq_stopwatch_start_flags); + return 1; +} + +/* method: sleep */ +static int zmq__sleep__func(lua_State *L) { + int seconds_ = luaL_checkinteger(L,1); + zmq_sleep(seconds_); + return 0; +} + /* method: dump_ffi */ static int zmq__dump_ffi__func(lua_State *L) { size_t ffi_code_len = 0; @@ -3017,11 +3153,42 @@ static const obj_const obj_ZMQ_Ctx_constants[] = { {NULL, NULL, 0.0 , 0} }; +static const luaL_reg obj_ZMQ_StopWatch_pub_funcs[] = { + {"start", ZMQ_StopWatch__start__meth}, + {NULL, NULL} +}; + +static const luaL_reg obj_ZMQ_StopWatch_methods[] = { + {"stop", ZMQ_StopWatch__stop__meth}, + {NULL, NULL} +}; + +static const luaL_reg obj_ZMQ_StopWatch_metas[] = { + {"__gc", ZMQ_StopWatch__stop__meth}, + {"__tostring", obj_udata_default_tostring}, + {"__eq", obj_udata_default_equal}, + {NULL, NULL} +}; + +static const obj_base obj_ZMQ_StopWatch_bases[] = { + {-1, NULL} +}; + +static const obj_field obj_ZMQ_StopWatch_fields[] = { + {NULL, 0, 0, 0} +}; + +static const obj_const obj_ZMQ_StopWatch_constants[] = { + {NULL, NULL, 0.0 , 0} +}; + static const luaL_reg zmq_function[] = { {"version", zmq__version__func}, {"init", zmq__init__func}, {"init_ctx", zmq__init_ctx__func}, {"device", zmq__device__func}, + {"stopwatch_start", zmq__stopwatch_start__func}, + {"sleep", zmq__sleep__func}, {"dump_ffi", zmq__dump_ffi__func}, {NULL, NULL} }; @@ -3088,6 +3255,7 @@ static const reg_sub_module reg_sub_modules[] = { { &(obj_type_ZMQ_Socket), 0, obj_ZMQ_Socket_pub_funcs, obj_ZMQ_Socket_methods, obj_ZMQ_Socket_metas, obj_ZMQ_Socket_bases, obj_ZMQ_Socket_fields, obj_ZMQ_Socket_constants}, { &(obj_type_ZMQ_Poller), 0, obj_ZMQ_Poller_pub_funcs, obj_ZMQ_Poller_methods, obj_ZMQ_Poller_metas, obj_ZMQ_Poller_bases, obj_ZMQ_Poller_fields, obj_ZMQ_Poller_constants}, { &(obj_type_ZMQ_Ctx), 0, obj_ZMQ_Ctx_pub_funcs, obj_ZMQ_Ctx_methods, obj_ZMQ_Ctx_metas, obj_ZMQ_Ctx_bases, obj_ZMQ_Ctx_fields, obj_ZMQ_Ctx_constants}, + { &(obj_type_ZMQ_StopWatch), 0, obj_ZMQ_StopWatch_pub_funcs, obj_ZMQ_StopWatch_methods, obj_ZMQ_StopWatch_metas, obj_ZMQ_StopWatch_bases, obj_ZMQ_StopWatch_fields, obj_ZMQ_StopWatch_constants}, {NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL} }; diff --git a/src/stopwatch.nobj.lua b/src/stopwatch.nobj.lua new file mode 100644 index 0000000..94e4e4e --- /dev/null +++ b/src/stopwatch.nobj.lua @@ -0,0 +1,44 @@ +-- Copyright (c) 2011 by Robert G. Jakabosky +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and associated documentation files (the "Software"), to deal +-- in the Software without restriction, including without limitation the rights +-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-- copies of the Software, and to permit persons to whom the Software is +-- furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +-- THE SOFTWARE. + +object "ZMQ_StopWatch" { + include "zmq_utils.h", + ffi_cdef[[ +typedef void * ZMQ_StopWatch; + +unsigned long zmq_stopwatch_stop (ZMQ_StopWatch watch_); +]], + c_source[[ +typedef void * ZMQ_StopWatch; +]], + constructor "start" { + c_call "ZMQ_StopWatch" "zmq_stopwatch_start" {}, + }, + destructor "stop" { + var_out{ "unsigned long", "usecs" }, + c_source[[ + ${usecs} = zmq_stopwatch_stop(${this}); +]], + ffi_source[[ + ${usecs} = tonumber(C.zmq_stopwatch_stop(${this})) +]], + }, +} + diff --git a/zmq.nobj.lua b/zmq.nobj.lua index 565a07e..8735439 100644 --- a/zmq.nobj.lua +++ b/zmq.nobj.lua @@ -136,6 +136,7 @@ subfiles { "src/socket.nobj.lua", "src/poller.nobj.lua", "src/ctx.nobj.lua", +"src/stopwatch.nobj.lua", }, -- @@ -186,6 +187,16 @@ c_function "device" { { "int", "device", "ZMQ_Socket", "insock", "ZMQ_Socket", "outsock" }, }, +-- +-- zmq_utils.h +-- +include "zmq_utils.h", +c_function "stopwatch_start" { + c_call "!ZMQ_StopWatch" "zmq_stopwatch_start" {}, +}, +c_function "sleep" { + c_call "void" "zmq_sleep" { "int", "seconds_" }, +}, -- -- This dump function is for getting a copy of the FFI-based bindings code and is -- only for debugging.