[PD-cvs] pd/src m_class.c,1.3.4.7.2.22.2.4,1.3.4.7.2.22.2.5

Mathieu Bouchard matju at users.sourceforge.net
Fri Dec 8 06:28:40 CET 2006


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26444

Modified Files:
      Tag: desiredata
	m_class.c 
Log Message:
shorter code again²


Index: m_class.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_class.c,v
retrieving revision 1.3.4.7.2.22.2.4
retrieving revision 1.3.4.7.2.22.2.5
diff -C2 -d -r1.3.4.7.2.22.2.4 -r1.3.4.7.2.22.2.5
*** m_class.c	8 Dec 2006 05:13:02 -0000	1.3.4.7.2.22.2.4
--- m_class.c	8 Dec 2006 05:28:38 -0000	1.3.4.7.2.22.2.5
***************
*** 42,75 ****
  
  static void pd_defaultbang(t_pd *x) {
!     if ((*x)->c_listmethod != pd_defaultlist)
!         (*x)->c_listmethod(x, 0, 0, 0);
!     else (*x)->c_anymethod(x, &s_bang, 0, 0);
  }
  
  static void pd_defaultpointer(t_pd *x, t_gpointer *gp) {
!     t_atom at; SETPOINTER(&at, gp);
!     if ((*x)->c_listmethod != pd_defaultlist) {
!         (*x)->c_listmethod(x, 0, 1, &at);
!     } else {
!         (*x)->c_anymethod(x, &s_pointer, 1, &at);
!     }
  }
  
  static void pd_defaultfloat(t_pd *x, t_float f) {
!     t_atom at; SETFLOAT(&at, f);
!     if (*(*x)->c_listmethod != pd_defaultlist) {
!         (*x)->c_listmethod(x, 0, 1, &at);
!     } else {
!         (*x)->c_anymethod(x, &s_float, 1, &at);
!     }
  }
  
  static void pd_defaultsymbol(t_pd *x, t_symbol *s) {
!     t_atom at; SETSYMBOL(&at, s);
!     if ((*x)->c_listmethod != pd_defaultlist) {
!         (*x)->c_listmethod(x, 0, 1, &at);
!     } else {
!         (*x)->c_anymethod(x, &s_symbol, 1, &at);
!     }
  }
  
--- 42,66 ----
  
  static void pd_defaultbang(t_pd *x) {
!     t_class *c = pd_class(x);
!     if (c->c_listmethod != pd_defaultlist) c->c_listmethod(x,0,0,0);
!     else c->c_anymethod(x,&s_bang,0,0);
  }
  
  static void pd_defaultpointer(t_pd *x, t_gpointer *gp) {
!     t_class *c = pd_class(x); t_atom at; SETPOINTER(&at, gp);
!     if (c->c_listmethod != pd_defaultlist) c->c_listmethod(x,0,1,&at);
!     else c->c_anymethod(x,&s_pointer,1,&at);
  }
  
  static void pd_defaultfloat(t_pd *x, t_float f) {
!     t_class *c = pd_class(x); t_atom at; SETFLOAT(&at, f);
!     if (c->c_listmethod != pd_defaultlist) c->c_listmethod(x,0,1,&at);
!     else c->c_anymethod(x,&s_float,1,&at);
  }
  
  static void pd_defaultsymbol(t_pd *x, t_symbol *s) {
!     t_class *c = pd_class(x); t_atom at; SETSYMBOL(&at, s);
!     if (c->c_listmethod != pd_defaultlist) c->c_listmethod(x,0,1,&at);
!     else c->c_anymethod(x,&s_symbol,1,&at);
  }
  
***************
*** 79,112 ****
  /* handle "list" messages to Pds without explicit list methods defined. */
  static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv) {
      /* a list with no elements is handled by the 'bang' method if one exists. */
!     if (argc == 0 && *(*x)->c_bangmethod != pd_defaultbang) {
!         (*x)->c_bangmethod(x);
!         return;
!     }
      /* a list with one element which is a number can be handled by a
         "float" method if any is defined; same for "symbol", "pointer". */
      if (argc == 1) {
!         if (argv->a_type == A_FLOAT && *(*x)->c_floatmethod != pd_defaultfloat) {
!             (*x)->c_floatmethod(x, argv->a_w.w_float);
!             return;
!         }
! 	if (argv->a_type == A_SYMBOL && *(*x)->c_symbolmethod != pd_defaultsymbol) {
!             (*x)->c_symbolmethod(x, argv->a_w.w_symbol);
!             return;
!         }
!         if (argv->a_type == A_POINTER && *(*x)->c_pointermethod != pd_defaultpointer) {
!             (*x)->c_pointermethod(x, argv->a_w.w_gpointer);
!             return;
!         }
      }
!         /* Next try for an "anything" method */
!     if ((*x)->c_anymethod != pd_defaultanything)
!         (*x)->c_anymethod(x, &s_list, argc, argv);
! 
!         /* if the object is patchable (i.e., can have proper inlets)
!             send it on to obj_list which will unpack the list into the inlets */
!     else if ((*x)->c_patchable)
!         obj_list((t_object *)x, s, argc, argv);
!             /* otherwise gove up and complain. */
      else pd_defaultanything(x, &s_list, argc, argv);
  }
--- 70,89 ----
  /* handle "list" messages to Pds without explicit list methods defined. */
  static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv) {
+     t_class *c = pd_class(x);
      /* a list with no elements is handled by the 'bang' method if one exists. */
!     if (argc == 0 && c->c_bangmethod != pd_defaultbang) {c->c_bangmethod(x); return;}
      /* a list with one element which is a number can be handled by a
         "float" method if any is defined; same for "symbol", "pointer". */
      if (argc == 1) {
! #define HANDLE(A,M,D,F) if (argv->a_type==A && c->M != D) {c->M(x, argv->a_w.F); return;}
! 	HANDLE(A_FLOAT  ,c_floatmethod  ,pd_defaultfloat  ,w_float)
! 	HANDLE(A_SYMBOL ,c_symbolmethod ,pd_defaultsymbol ,w_symbol)
! 	HANDLE(A_POINTER,c_pointermethod,pd_defaultpointer,w_gpointer)
      }
!     /* Next try for an "anything" method; if the object is patchable (i.e.,
!        can have proper inlets) send it on to obj_list which will unpack the
!        list into the inlets. otherwise gove up and complain. */
!     if (c->c_anymethod != pd_defaultanything) c->c_anymethod(x,&s_list,argc,argv);
!     else if (c->c_patchable) obj_list((t_object *)x, s, argc, argv);
      else pd_defaultanything(x, &s_list, argc, argv);
  }





More information about the Pd-cvs mailing list