diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2005-07-19 13:17:50 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2005-07-19 13:17:50 +0000 |
commit | ad51a5256a81891061f4c1cc729c718029beb128 (patch) | |
tree | cc7472041e4f67c1d8f31b0d4c4981d27fbe5039 /externals/grill/flext/source/flproxy.cpp | |
parent | 35a59e7dbce7f5cd6fb8c26e40fc66dfd8384cce (diff) |
upped version number
optimizations for message handling and memory footprint
made flext::Forward threadsafe
digest one-element list messages as single atoms
simplified message analysis
svn path=/trunk/; revision=3359
Diffstat (limited to 'externals/grill/flext/source/flproxy.cpp')
-rwxr-xr-x | externals/grill/flext/source/flproxy.cpp | 67 |
1 files changed, 15 insertions, 52 deletions
diff --git a/externals/grill/flext/source/flproxy.cpp b/externals/grill/flext/source/flproxy.cpp index d650e42e..ffecd405 100755 --- a/externals/grill/flext/source/flproxy.cpp +++ b/externals/grill/flext/source/flproxy.cpp @@ -33,10 +33,7 @@ void flext_base::cb_px_anything(t_class *c,const t_symbol *s,int argc,t_atom *ar } #define DEF_IN_FT(IX) \ -void flext_base::cb_px_ft ## IX(t_class *c,float v) { \ - t_atom atom; SETFLOAT(&atom,v); \ - thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); \ -} +void flext_base::cb_px_ft ## IX(t_class *c,float v) { t_atom atom; SetFloat(atom,v); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); } #define ADD_IN_FT(IX) \ add_method1(c,cb_px_ft ## IX,"ft" #IX,A_FLOAT) @@ -45,63 +42,38 @@ add_method1(c,cb_px_ft ## IX,"ft" #IX,A_FLOAT) void flext_base::cb_px_anything(t_class *c,const t_symbol *s,short argc,t_atom *argv) { - // check if inlet allows anything (or list) - - flext_base *o = thisObject(c); - int ci = ((flext_hdr *)o->x_obj)->curinlet; - o->CbMethodHandler(ci,s,argc,argv); + // check if inlet allows anything (or list) + int ci = ((flext_hdr *)c)->curinlet; + thisObject(c)->CbMethodHandler(ci,s,argc,argv); } -#if 0 //FLEXT_OS == FLEXT_OS_WIN -// could also work for OSX! - void flext_base::cb_px_int(t_class *c,long v) { - flext_base *o = thisObject(c); - int ci = proxy_getinlet((t_object *)o->x_obj); // check if inlet allows int type - t_atom atom; - SetInt(atom,v); - o->CbMethodHandler(ci,sym_int,1,&atom); + t_atom atom; SetInt(atom,v); + int ci = ((flext_hdr *)c)->curinlet; + thisObject(c)->CbMethodHandler(ci,sym_int,1,&atom); } void flext_base::cb_px_float(t_class *c,double v) { - flext_base *o = thisObject(c); - int ci = proxy_getinlet((t_object *)o->x_obj); // check if inlet allows float type - t_atom atom; - SetFloat(atom,v); - o->CbMethodHandler(ci,sym_float,1,&atom); -} -#else -void flext_base::cb_px_int(t_class *c,long v) -{ - // check if inlet allows int type - t_atom atom; - SetInt(atom,v); - cb_px_anything(c,sym_int,1,&atom); + t_atom atom; SetFloat(atom,v); + int ci = ((flext_hdr *)c)->curinlet; + thisObject(c)->CbMethodHandler(ci,sym_float,1,&atom); } -void flext_base::cb_px_float(t_class *c,double v) -{ - // check if inlet allows float type - t_atom atom; - SetFloat(atom,v); - cb_px_anything(c,sym_float,1,&atom); -} -#endif - void flext_base::cb_px_bang(t_class *c) { // check if inlet allows bang - cb_px_anything(c,sym_bang,0,NULL); + int ci = ((flext_hdr *)c)->curinlet; + thisObject(c)->CbMethodHandler(ci,sym_bang,0,NULL); } #define DEF_IN_FT(IX) \ -void flext_base::cb_px_in ## IX(t_class *c,long v) { long &ci = ((flext_hdr *)thisObject(c)->x_obj)->curinlet; ci = IX; cb_px_int(c,v); ci = 0; } \ -void flext_base::cb_px_ft ## IX(t_class *c,double v) { long &ci = ((flext_hdr *)thisObject(c)->x_obj)->curinlet; ci = IX; cb_px_float(c,v); ci = 0; } +void flext_base::cb_px_in ## IX(t_class *c,long v) { t_atom atom; SetInt(atom,v); thisObject(c)->CbMethodHandler(IX,sym_int,1,&atom); } \ +void flext_base::cb_px_ft ## IX(t_class *c,double v) { t_atom atom; SetFloat(atom,v); thisObject(c)->CbMethodHandler(IX,sym_float,1,&atom); } #define ADD_IN_FT(IX) \ add_method1(c,cb_px_in ## IX,"in" #IX,A_INT); \ @@ -139,11 +111,6 @@ void flext_base::SetProxies(t_class *c) #error Not implemented! #endif -#if 0 //FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_WIN - // could also work for OSX! - addint((method)cb_px_int); - addfloat((method)cb_px_float); -#else // setup non-leftmost ints and floats ADD_IN_FT(1); ADD_IN_FT(2); @@ -154,14 +121,12 @@ void flext_base::SetProxies(t_class *c) ADD_IN_FT(7); ADD_IN_FT(8); ADD_IN_FT(9); -#endif } #elif FLEXT_SYS == FLEXT_SYS_JMAX void flext_base::jmax_proxy(fts_object_t *c, int winlet, fts_symbol_t s, int argc, const fts_atom_t *argv) { - flext_base *o = thisObject(c); - o->CbMethodHandler(winlet,s,argc,argv); + thisObject(c)->CbMethodHandler(winlet,s,argc,argv); } void flext_base::SetProxies(t_class *c) @@ -170,5 +135,3 @@ void flext_base::SetProxies(t_class *c) } #endif - - |