From 5c6b788d5ae4adeabe176d56c7b79d27a8ffe129 Mon Sep 17 00:00:00 2001 From: Lars Kanis <lars@greiz-reinsdorf.de> Date: Sat, 13 Jun 2015 22:51:49 +0200 Subject: [PATCH] Add GVL callback wrappers for Bool, Int, Uint and Long methods. --- ext/fox16_c/FXRuby.cpp | 4 +- ext/fox16_c/include/FXRuby.h | 32 +++++++------- ext/fox16_c/include/gvl_wrappers.h | 69 +++++++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 19 deletions(-) diff --git a/ext/fox16_c/FXRuby.cpp b/ext/fox16_c/FXRuby.cpp index dd01d88..4d014fd 100644 --- a/ext/fox16_c/FXRuby.cpp +++ b/ext/fox16_c/FXRuby.cpp @@ -1416,7 +1416,7 @@ void FXRbCallVoidMethod_gvlcb(FXDC* recv,ID func) { //---------------------------------------------------------------------- -bool FXRbCallBoolMethod(const FXObject* recv,ID func){ +bool FXRbCallBoolMethod_gvlcb(const FXObject* recv,ID func){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,0,NULL); @@ -1426,7 +1426,7 @@ bool FXRbCallBoolMethod(const FXObject* recv,ID func){ //---------------------------------------------------------------------- // Call function with "FXint" return value -FXint FXRbCallIntMethod(const FXObject* recv,ID func){ +FXint FXRbCallIntMethod_gvlcb(const FXObject* recv,ID func){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE result=rb_funcall(obj,func,0,NULL); diff --git a/ext/fox16_c/include/FXRuby.h b/ext/fox16_c/include/FXRuby.h index e3589dd..c601e36 100644 --- a/ext/fox16_c/include/FXRuby.h +++ b/ext/fox16_c/include/FXRuby.h @@ -569,27 +569,27 @@ void FXRbCallVoidMethod_gvlcb(FXObject* recv,ID func,TYPE1& arg1,TYPE2 arg2,TYPE } // Call function with "FXbool" return value -inline bool FXRbCallBoolMethod(FXStream* recv,ID func){ +inline bool FXRbCallBoolMethod_gvlcb(FXStream* recv,ID func){ VALUE v=rb_funcall(FXRbGetRubyObj(recv,false),func,0,NULL); return (v==Qtrue); } template<class TYPE1> -bool FXRbCallBoolMethod(FXStream* recv,ID func,TYPE1 arg){ +bool FXRbCallBoolMethod_gvlcb(FXStream* recv,ID func,TYPE1 arg){ VALUE v=rb_funcall(FXRbGetRubyObj(recv,false),func,1,to_ruby(arg)); return (v==Qtrue); } template<class TYPE1,class TYPE2> -bool FXRbCallBoolMethod(FXStream* recv,ID func,TYPE1 arg1,TYPE2 arg2){ +bool FXRbCallBoolMethod_gvlcb(FXStream* recv,ID func,TYPE1 arg1,TYPE2 arg2){ VALUE v=rb_funcall(FXRbGetRubyObj(recv,false),func,2,to_ruby(arg1),to_ruby(arg2)); return (v==Qtrue); } -bool FXRbCallBoolMethod(const FXObject* recv,ID func); +bool FXRbCallBoolMethod_gvlcb(const FXObject* recv,ID func); template<class TYPE> -bool FXRbCallBoolMethod(FXObject* recv, ID func, TYPE& arg){ +bool FXRbCallBoolMethod_gvlcb(FXObject* recv, ID func, TYPE& arg){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,1,to_ruby(arg)); @@ -597,13 +597,13 @@ bool FXRbCallBoolMethod(FXObject* recv, ID func, TYPE& arg){ } template<class TYPE> -bool FXRbCallBoolMethod(const FXObject* recv,ID func,TYPE& arg){ +bool FXRbCallBoolMethod_gvlcb(const FXObject* recv,ID func,TYPE& arg){ VALUE v=rb_funcall(FXRbGetRubyObj(recv,false),func,1,to_ruby(arg)); return (v==Qtrue); } template<class TYPE1, class TYPE2> -bool FXRbCallBoolMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2){ +bool FXRbCallBoolMethod_gvlcb(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,2,to_ruby(arg1),to_ruby(arg2)); @@ -611,7 +611,7 @@ bool FXRbCallBoolMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2){ } template<class TYPE1, class TYPE2, class TYPE3> -bool FXRbCallBoolMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3){ +bool FXRbCallBoolMethod_gvlcb(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,3,to_ruby(arg1),to_ruby(arg2),to_ruby(arg3)); @@ -619,7 +619,7 @@ bool FXRbCallBoolMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, T } template<class TYPE1, class TYPE2, class TYPE3, class TYPE4, class TYPE5> -bool FXRbCallBoolMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5){ +bool FXRbCallBoolMethod_gvlcb(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,5,to_ruby(arg1),to_ruby(arg2),to_ruby(arg3),to_ruby(arg4),to_ruby(arg5)); @@ -627,10 +627,10 @@ bool FXRbCallBoolMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, T } // Call function with "FXint" return value -FXint FXRbCallIntMethod(const FXObject* recv,ID func); +FXint FXRbCallIntMethod_gvlcb(const FXObject* recv,ID func); template<class TYPE> -FXint FXRbCallIntMethod(FXObject* recv, ID func, TYPE arg){ +FXint FXRbCallIntMethod_gvlcb(FXObject* recv, ID func, TYPE arg){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,1,to_ruby(arg)); @@ -638,7 +638,7 @@ FXint FXRbCallIntMethod(FXObject* recv, ID func, TYPE arg){ } template<class TYPE> -FXint FXRbCallIntMethod(const FXObject* recv, ID func, TYPE arg){ +FXint FXRbCallIntMethod_gvlcb(const FXObject* recv, ID func, TYPE arg){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,1,to_ruby(arg)); @@ -646,7 +646,7 @@ FXint FXRbCallIntMethod(const FXObject* recv, ID func, TYPE arg){ } template<class TYPE1, class TYPE2> -FXint FXRbCallIntMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2){ +FXint FXRbCallIntMethod_gvlcb(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE result=rb_funcall(obj,func,2,to_ruby(arg1),to_ruby(arg2)); @@ -654,7 +654,7 @@ FXint FXRbCallIntMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2){ } template<class TYPE1, class TYPE2, class TYPE3, class TYPE4, class TYPE5> -FXint FXRbCallIntMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5){ +FXint FXRbCallIntMethod_gvlcb(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE result=rb_funcall(obj,func,5,to_ruby(arg1),to_ruby(arg2),to_ruby(arg3),to_ruby(arg4),to_ruby(arg5)); @@ -663,7 +663,7 @@ FXint FXRbCallIntMethod(const FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, T // Call function with "long" return value template<class TYPE1, class TYPE2, class TYPE3> -long FXRbCallLongMethod(FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3){ +long FXRbCallLongMethod_gvlcb(FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,3,to_ruby(arg1),to_ruby(arg2),to_ruby(arg3)); @@ -672,7 +672,7 @@ long FXRbCallLongMethod(FXObject* recv, ID func, TYPE1 arg1, TYPE2 arg2, TYPE3 a // Call functions with "FXuint" return value template<class TYPE> -FXuint FXRbCallUIntMethod(FXObject* recv, ID func, TYPE arg){ +FXuint FXRbCallUIntMethod_gvlcb(FXObject* recv, ID func, TYPE arg){ VALUE obj=FXRbGetRubyObj(recv,false); FXASSERT(!NIL_P(obj)); VALUE v=rb_funcall(obj,func,1,to_ruby(arg)); diff --git a/ext/fox16_c/include/gvl_wrappers.h b/ext/fox16_c/include/gvl_wrappers.h index 0dadbcf..918a99a 100644 --- a/ext/fox16_c/include/gvl_wrappers.h +++ b/ext/fox16_c/include/gvl_wrappers.h @@ -271,6 +271,62 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL ) param(TYPE8, , arg8) \ param(TYPE9, , arg9) +#define FOR_EACH_PARAM_OF_FXRbCallBoolMethod_2(param) \ + param(ID, , func) + +#define FOR_EACH_PARAM_OF_FXRbCallBoolMethod_3(param) \ + param(ID, , func) \ + param(TYPE1, &, arg1) + +#define FOR_EACH_PARAM_OF_FXRbCallBoolMethod_4(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) \ + param(TYPE2, , arg2) + +#define FOR_EACH_PARAM_OF_FXRbCallBoolMethod_5(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) \ + param(TYPE2, , arg2) \ + param(TYPE3, , arg3) + +#define FOR_EACH_PARAM_OF_FXRbCallBoolMethod_7(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) \ + param(TYPE2, , arg2) \ + param(TYPE3, , arg3) \ + param(TYPE4, , arg4) \ + param(TYPE5, , arg5) + +#define FOR_EACH_PARAM_OF_FXRbCallIntMethod_2(param) \ + param(ID, , func) + +#define FOR_EACH_PARAM_OF_FXRbCallIntMethod_3(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) + +#define FOR_EACH_PARAM_OF_FXRbCallIntMethod_4(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) \ + param(TYPE2, , arg2) + +#define FOR_EACH_PARAM_OF_FXRbCallIntMethod_7(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) \ + param(TYPE2, , arg2) \ + param(TYPE3, , arg3) \ + param(TYPE4, , arg4) \ + param(TYPE5, , arg5) + +#define FOR_EACH_PARAM_OF_FXRbCallLongMethod_5(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) \ + param(TYPE2, , arg2) \ + param(TYPE3, , arg3) + +#define FOR_EACH_PARAM_OF_FXRbCallUIntMethod_3(param) \ + param(ID, , func) \ + param(TYPE1, , arg1) + /* function( name, void_or_nonvoid, returntype, firstparamtype, firstparamname, paramcount ) */ #define FOR_EACH_CALLBACK_FUNCTION(function) \ function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 2) \ @@ -281,7 +337,18 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL ) function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 7) \ function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 8) \ function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 9) \ - function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 11) + function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 11) \ + function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 2) \ + function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 3) \ + function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 4) \ + function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 5) \ + function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 7) \ + function(FXRbCallIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 2) \ + function(FXRbCallIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 3) \ + function(FXRbCallIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 4) \ + function(FXRbCallIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 7) \ + function(FXRbCallLongMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 5) \ + function(FXRbCallUIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 3) \ FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_STUB_DECL ) FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_WRAPPER_STRUCT ) -- GitLab