Fix exporting of zmq.poller C functions for FFI bindings.

pull/47/merge
Robert G. Jakabosky 14 years ago
parent b2aec4654e
commit 36fa3226ef

@ -272,10 +272,10 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
constructor "new" { constructor "new" {
var_in{ "unsigned int", "length", is_optional = true, default = 10 }, var_in{ "unsigned int", "length", is_optional = true, default = 10 },
c_method_call "void" "poller_init" { "unsigned int", "length" }, c_export_method_call "void" "poller_init" { "unsigned int", "length" },
}, },
destructor "close" { destructor "close" {
c_method_call "void" "poller_cleanup" {}, c_export_method_call "void" "poller_cleanup" {},
}, },
method "add" { method "add" {
var_in{ "<any>", "sock" }, var_in{ "<any>", "sock" },
@ -310,7 +310,7 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
else else
error("expected number or ZMQ_Socket") error("expected number or ZMQ_Socket")
end end
${idx} = C.poller_get_free_item(${this}) ${idx} = Cmod.poller_get_free_item(${this})
local item = ${this}.items[${idx}] local item = ${this}.items[${idx}]
item.socket = sock item.socket = sock
item.fd = fd item.fd = fd
@ -358,11 +358,11 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
if sock_type == 'cdata' then if sock_type == 'cdata' then
sock = obj_type_ZMQ_Socket_check(${sock}) sock = obj_type_ZMQ_Socket_check(${sock})
-- find sock in items list. -- find sock in items list.
${idx} = C.poller_find_sock_item(${this}, sock) ${idx} = Cmod.poller_find_sock_item(${this}, sock)
elseif sock_type == 'number' then elseif sock_type == 'number' then
fd = ${sock} fd = ${sock}
-- find fd in items list. -- find fd in items list.
${idx} = C.poller_find_fd_item(${this}, fd); ${idx} = Cmod.poller_find_fd_item(${this}, fd);
else else
error("expected number or ZMQ_Socket") error("expected number or ZMQ_Socket")
end end
@ -372,7 +372,7 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
item.fd = fd item.fd = fd
item.events = ${events} item.events = ${events}
else else
C.poller_remove_item(${this}, ${idx}) Cmod.poller_remove_item(${this}, ${idx})
end end
]], ]],
}, },
@ -407,26 +407,24 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
if sock_type == 'cdata' then if sock_type == 'cdata' then
sock = obj_type_ZMQ_Socket_check(${sock}) sock = obj_type_ZMQ_Socket_check(${sock})
-- find sock in items list. -- find sock in items list.
${idx} = C.poller_find_sock_item(${this}, sock) ${idx} = Cmod.poller_find_sock_item(${this}, sock)
elseif sock_type == 'number' then elseif sock_type == 'number' then
fd = ${sock} fd = ${sock}
-- find fd in items list. -- find fd in items list.
${idx} = C.poller_find_fd_item(${this}, fd); ${idx} = Cmod.poller_find_fd_item(${this}, fd);
else else
error("expected number or ZMQ_Socket") error("expected number or ZMQ_Socket")
end end
if ${idx} >= 0 then if ${idx} >= 0 then
C.poller_remove_item(${this}, ${idx}) Cmod.poller_remove_item(${this}, ${idx})
end end
]], ]],
}, },
method "poll" { method "poll" {
var_in{ "long", "timeout" },
var_out{ "int", "count" }, var_out{ "int", "count" },
var_out{ "ZMQ_Error", "err" }, -- poll for events
c_export_method_call { "ZMQ_Error", "err>2" } "poller_poll" { "long", "timeout" },
c_source[[ c_source[[
/* poll for events */
${err} = poller_poll(${this}, ${timeout});
if(${err} > 0) { if(${err} > 0) {
${this}->next = 0; ${this}->next = 0;
${count} = ${err}; ${count} = ${err};
@ -436,8 +434,6 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
} }
]], ]],
ffi_source[[ ffi_source[[
-- poll for events
${err} = C.poller_poll(${this}, ${timeout})
if(${err} > 0) then if(${err} > 0) then
${this}.next = 0 ${this}.next = 0
${count} = ${err} ${count} = ${err}
@ -448,7 +444,7 @@ void poller_remove_item(ZMQ_Poller *poller, int idx);
]], ]],
}, },
method "next_revents_idx" { method "next_revents_idx" {
c_method_call { "int", "idx>1" } "poller_next_revents" { "int", "&revents>2" }, c_export_method_call { "int", "idx>1" } "poller_next_revents" { "int", "&revents>2" },
}, },
method "count" { method "count" {
var_out{ "int", "count" }, var_out{ "int", "count" },

@ -351,6 +351,7 @@ static const char *nobj_lua_Reader(lua_State *L, void *data, size_t *size) {
nobj_reader_state *state = (nobj_reader_state *)data; nobj_reader_state *state = (nobj_reader_state *)data;
const char *ptr; const char *ptr;
(void)L;
ptr = state->ffi_init_code[state->offset]; ptr = state->ffi_init_code[state->offset];
if(ptr != NULL) { if(ptr != NULL) {
*size = strlen(ptr); *size = strlen(ptr);
@ -523,7 +524,7 @@ static FUNC_UNUSED void *obj_udata_luacheck(lua_State *L, int _index, obj_type *
static FUNC_UNUSED void *obj_udata_luaoptional(lua_State *L, int _index, obj_type *type) { static FUNC_UNUSED void *obj_udata_luaoptional(lua_State *L, int _index, obj_type *type) {
void *obj = NULL; void *obj = NULL;
if(lua_isnil(L, _index)) { if(lua_gettop(L) < _index) {
return obj; return obj;
} }
obj_udata_luacheck_internal(L, _index, &(obj), type, 1); obj_udata_luacheck_internal(L, _index, &(obj), type, 1);
@ -731,7 +732,7 @@ static FUNC_UNUSED void * obj_simple_udata_luacheck(lua_State *L, int _index, ob
} }
static FUNC_UNUSED void * obj_simple_udata_luaoptional(lua_State *L, int _index, obj_type *type) { static FUNC_UNUSED void * obj_simple_udata_luaoptional(lua_State *L, int _index, obj_type *type) {
if(lua_isnil(L, _index)) { if(lua_gettop(L) < _index) {
return NULL; return NULL;
} }
return obj_simple_udata_luacheck(L, _index, type); return obj_simple_udata_luacheck(L, _index, type);
@ -1398,6 +1399,8 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
"\n" "\n"
"void poller_cleanup(ZMQ_Poller *);\n" "void poller_cleanup(ZMQ_Poller *);\n"
"\n" "\n"
"ZMQ_Error poller_poll(ZMQ_Poller *, long);\n"
"\n"
"int poller_next_revents(ZMQ_Poller *, int*);\n" "int poller_next_revents(ZMQ_Poller *, int*);\n"
"\n" "\n"
"ZMQ_Error zmq_term(ZMQ_Ctx *);\n" "ZMQ_Error zmq_term(ZMQ_Ctx *);\n"
@ -1612,8 +1615,8 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
"\n" "\n"
" function obj_type_ZMQ_Ctx_check(ptr)\n" " function obj_type_ZMQ_Ctx_check(ptr)\n"
" -- if ptr is nil or is the correct type, then just return it.\n" " -- if ptr is nil or is the correct type, then just return it.\n"
" if not ptr or ffi.istype(obj_ctype, ptr) then return ptr end\n" " if not ptr or ffi.istype(obj_ctype, ptr) then return ptr end\n", /* ----- CUT ----- */
" -- check if it is a compatible type.\n", /* ----- CUT ----- */ " -- check if it is a compatible type.\n"
" local ctype = tostring(ffi.typeof(ptr))\n" " local ctype = tostring(ffi.typeof(ptr))\n"
" local bcaster = _obj_subs.ZMQ_Ctx[ctype]\n" " local bcaster = _obj_subs.ZMQ_Ctx[ctype]\n"
" if bcaster then\n" " if bcaster then\n"
@ -2207,8 +2210,8 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
"end\n" "end\n"
"end\n" "end\n"
"end\n" "end\n"
"\n" "\n", /* ----- CUT ----- */
"-- method: set_affinity\n", /* ----- CUT ----- */ "-- method: set_affinity\n"
"if (_M.VERSION_2_0 or _M.VERSION_3_0) then\n" "if (_M.VERSION_2_0 or _M.VERSION_3_0) then\n"
"function _meth.ZMQ_Socket.set_affinity(self, value2)\n" "function _meth.ZMQ_Socket.set_affinity(self, value2)\n"
" \n" " \n"
@ -2905,7 +2908,7 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
"function _pub.ZMQ_Poller.new(length1)\n" "function _pub.ZMQ_Poller.new(length1)\n"
" length1 = length1 or 10\n" " length1 = length1 or 10\n"
" local self = ffi.new(\"ZMQ_Poller\")\n" " local self = ffi.new(\"ZMQ_Poller\")\n"
" C.poller_init(self, length1)\n" " Cmod.poller_init(self, length1)\n"
" return obj_type_ZMQ_Poller_push(self)\n" " return obj_type_ZMQ_Poller_push(self)\n"
"end\n" "end\n"
"register_default_constructor(_pub,\"ZMQ_Poller\",_pub.ZMQ_Poller.new)\n" "register_default_constructor(_pub,\"ZMQ_Poller\",_pub.ZMQ_Poller.new)\n"
@ -2914,7 +2917,7 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
"function _meth.ZMQ_Poller.close(self)\n" "function _meth.ZMQ_Poller.close(self)\n"
" local self = obj_type_ZMQ_Poller_delete(self)\n" " local self = obj_type_ZMQ_Poller_delete(self)\n"
" if not self then return end\n" " if not self then return end\n"
" C.poller_cleanup(self)\n" " Cmod.poller_cleanup(self)\n"
" return \n" " return \n"
"end\n" "end\n"
"_priv.ZMQ_Poller.__gc = _meth.ZMQ_Poller.close\n" "_priv.ZMQ_Poller.__gc = _meth.ZMQ_Poller.close\n"
@ -2933,7 +2936,7 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
" else\n" " else\n"
" error(\"expected number or ZMQ_Socket\")\n" " error(\"expected number or ZMQ_Socket\")\n"
" end\n" " end\n"
" idx1 = C.poller_get_free_item(self)\n" " idx1 = Cmod.poller_get_free_item(self)\n"
" local item = self.items[idx1]\n" " local item = self.items[idx1]\n"
" item.socket = sock\n" " item.socket = sock\n"
" item.fd = fd\n" " item.fd = fd\n"
@ -2952,11 +2955,11 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
" if sock_type == 'cdata' then\n" " if sock_type == 'cdata' then\n"
" sock = obj_type_ZMQ_Socket_check(sock2)\n" " sock = obj_type_ZMQ_Socket_check(sock2)\n"
" -- find sock in items list.\n" " -- find sock in items list.\n"
" idx1 = C.poller_find_sock_item(self, sock)\n" " idx1 = Cmod.poller_find_sock_item(self, sock)\n"
" elseif sock_type == 'number' then\n" " elseif sock_type == 'number' then\n"
" fd = sock2\n" " fd = sock2\n"
" -- find fd in items list.\n" " -- find fd in items list.\n"
" idx1 = C.poller_find_fd_item(self, fd);\n" " idx1 = Cmod.poller_find_fd_item(self, fd);\n"
" else\n" " else\n"
" error(\"expected number or ZMQ_Socket\")\n" " error(\"expected number or ZMQ_Socket\")\n"
" end\n" " end\n"
@ -2966,7 +2969,7 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
" item.fd = fd\n" " item.fd = fd\n"
" item.events = events3\n" " item.events = events3\n"
" else\n" " else\n"
" C.poller_remove_item(self, idx1)\n" " Cmod.poller_remove_item(self, idx1)\n"
" end\n" " end\n"
"\n" "\n"
" return idx1\n" " return idx1\n"
@ -2981,16 +2984,16 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
" if sock_type == 'cdata' then\n" " if sock_type == 'cdata' then\n"
" sock = obj_type_ZMQ_Socket_check(sock2)\n" " sock = obj_type_ZMQ_Socket_check(sock2)\n"
" -- find sock in items list.\n" " -- find sock in items list.\n"
" idx1 = C.poller_find_sock_item(self, sock)\n" " idx1 = Cmod.poller_find_sock_item(self, sock)\n"
" elseif sock_type == 'number' then\n" " elseif sock_type == 'number' then\n"
" fd = sock2\n" " fd = sock2\n"
" -- find fd in items list.\n" " -- find fd in items list.\n"
" idx1 = C.poller_find_fd_item(self, fd);\n" " idx1 = Cmod.poller_find_fd_item(self, fd);\n"
" else\n" " else\n"
" error(\"expected number or ZMQ_Socket\")\n" " error(\"expected number or ZMQ_Socket\")\n"
" end\n" " end\n"
" if idx1 >= 0 then\n" " if idx1 >= 0 then\n"
" C.poller_remove_item(self, idx1)\n" " Cmod.poller_remove_item(self, idx1)\n"
" end\n" " end\n"
"\n" "\n"
" return idx1\n" " return idx1\n"
@ -3002,8 +3005,7 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
" \n" " \n"
" local count1 = 0\n" " local count1 = 0\n"
" local err2 = 0\n" " local err2 = 0\n"
" -- poll for events\n" " err2 = Cmod.poller_poll(self, timeout2)\n"
" err2 = C.poller_poll(self, timeout2)\n"
" if(err2 > 0) then\n" " if(err2 > 0) then\n"
" self.next = 0\n" " self.next = 0\n"
" count1 = err2\n" " count1 = err2\n"
@ -3025,7 +3027,7 @@ static const char *zmq_ffi_lua_code[] = { "local ffi=require\"ffi\"\n"
" \n" " \n"
" local idx1 = 0\n" " local idx1 = 0\n"
" local revents2 = next_revents_idx_revents_tmp\n" " local revents2 = next_revents_idx_revents_tmp\n"
" idx1 = C.poller_next_revents(self, revents2)\n" " idx1 = Cmod.poller_next_revents(self, revents2)\n"
" return idx1, revents2[0]\n" " return idx1, revents2[0]\n"
"end\n" "end\n"
"end\n" "end\n"
@ -5509,8 +5511,7 @@ static int ZMQ_Poller__poll__meth(lua_State *L) {
long timeout2 = luaL_checkinteger(L,2); long timeout2 = luaL_checkinteger(L,2);
int count1 = 0; int count1 = 0;
ZMQ_Error err2 = 0; ZMQ_Error err2 = 0;
/* poll for events */ err2 = poller_poll(this1, timeout2);
err2 = poller_poll(this1, timeout2);
if(err2 > 0) { if(err2 > 0) {
this1->next = 0; this1->next = 0;
count1 = err2; count1 = err2;

Loading…
Cancel
Save