[PD-cvs] pd/src m_class.c, 1.3.4.7.2.22.2.12, 1.3.4.7.2.22.2.13 m_pd.h, 1.4.4.11.2.33.2.14, 1.4.4.11.2.33.2.15

Mathieu Bouchard matju at users.sourceforge.net
Wed Dec 20 07:05:25 CET 2006


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

Modified Files:
      Tag: desiredata
	m_class.c m_pd.h 
Log Message:
gensym2 (support for NUL in symbols)


Index: m_pd.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v
retrieving revision 1.4.4.11.2.33.2.14
retrieving revision 1.4.4.11.2.33.2.15
diff -C2 -d -r1.4.4.11.2.33.2.14 -r1.4.4.11.2.33.2.15
*** m_pd.h	20 Dec 2006 04:01:33 -0000	1.4.4.11.2.33.2.14
--- m_pd.h	20 Dec 2006 06:05:23 -0000	1.4.4.11.2.33.2.15
***************
*** 78,82 ****
  EXTERN_STRUCT _glist;
  #define t_glist struct _glist
! #define t_canvas struct _glist  /* LATER lose this */
  
  #ifdef PD_PLUSPLUS_FACE
--- 78,82 ----
  EXTERN_STRUCT _glist;
  #define t_glist struct _glist
! #define t_canvas struct _glist
  
  #ifdef PD_PLUSPLUS_FACE
***************
*** 295,298 ****
--- 295,299 ----
  EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv);
  EXTERN t_symbol *gensym(char *s);
+ EXTERN t_symbol *gensym2(char *s, size_t n);
  EXTERN t_gotfn getfn(t_pd *x, t_symbol *s);
  EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s);

Index: m_class.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_class.c,v
retrieving revision 1.3.4.7.2.22.2.12
retrieving revision 1.3.4.7.2.22.2.13
diff -C2 -d -r1.3.4.7.2.22.2.12 -r1.3.4.7.2.22.2.13
*** m_class.c	20 Dec 2006 04:01:33 -0000	1.3.4.7.2.22.2.12
--- m_class.c	20 Dec 2006 06:05:23 -0000	1.3.4.7.2.22.2.13
***************
*** 371,377 ****
  #endif
  
  /* tb: made dogensym() threadsafe
   * supported by vibrez.net */
! t_symbol *dogensym(char *s, t_symbol *oldsym)
  {
  	static t_symbol *symhash[HASHSIZE];
--- 371,394 ----
  #endif
  
+ #ifdef NEWHASH
+ static short hash(char *s, size_t n) {
+     unsigned short hash1 = 0, hash2 = 0;
+ #else
+ static int hash(char *s, size_t n) {
+     unsigned int hash1 = 0, hash2 = 0;
+ #endif
+     char *s2 = s;
+     while (n) {
+         hash1 += *s2;
+         hash2 += hash1;
+         s2++;
+ 	n--;
+     }
+     return hash2;
+ }
+ 
  /* tb: made dogensym() threadsafe
   * supported by vibrez.net */
! t_symbol *dogensym(char *s, size_t n, t_symbol *oldsym)
  {
  	static t_symbol *symhash[HASHSIZE];
***************
*** 382,398 ****
  	t_symbol **sym1, *sym2;
  #ifdef NEWHASH
!     unsigned short hash1 = 0, hash2 = 0;
  #else
!     unsigned int hash1 = 0, hash2 = 0;
  #endif
-     int length = 0;
-     char *s2 = s;
-     while (*s2)
-     {
-         hash1 += *s2;
-         hash2 += hash1;
-         length++;
-         s2++;
-     }
  #ifdef NEWHASH 
  	hash2 = hash2 * HASHFACTOR;
--- 399,406 ----
  	t_symbol **sym1, *sym2;
  #ifdef NEWHASH
!     unsigned short hash2 = hash(s,n);
  #else
!     unsigned int   hash2 = hash(s,n);
  #endif
  #ifdef NEWHASH 
  	hash2 = hash2 * HASHFACTOR;
***************
*** 423,433 ****
  
      if (oldsym) sym2 = oldsym;
!     else
!     {
          sym2 = (t_symbol *)t_getbytes(sizeof(*sym2));
!         sym2->s_name = (char *)t_getbytes(length+1);
          sym2->s_next = 0;
          sym2->s_thing = 0;
!         strcpy(sym2->s_name, s);
      }
      *sym1 = sym2;
--- 431,441 ----
  
      if (oldsym) sym2 = oldsym;
!     else {
          sym2 = (t_symbol *)t_getbytes(sizeof(*sym2));
!         sym2->s_name = (char *)t_getbytes(n+1);
          sym2->s_next = 0;
          sym2->s_thing = 0;
!         memcpy(sym2->s_name, s, n);
! 	sym2->s_name[n]=0;
      }
      *sym1 = sym2;
***************
*** 438,443 ****
  }
  
! 
! t_symbol *gensym(char *s) {return dogensym(s, 0);}
  
  static int tryingalready;
--- 446,451 ----
  }
  
! t_symbol *gensym(char *s) {return dogensym(s,strlen(s),0);}
! t_symbol *gensym2(char *s, size_t n) {return dogensym(s,n,0);}
  
  static int tryingalready;
***************
*** 535,550 ****
      &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_};
  
! void mess_init(void)
! {
      t_symbol **sp;
      int i;
! 
!     if (pd_objectmaker) return;    
      for (i = sizeof(symlist)/sizeof(*symlist), sp = symlist; i--; sp++)
!         (void) dogensym((*sp)->s_name, *sp);
!     pd_objectmaker = class_new(gensym("objectmaker"), 0, 0, sizeof(t_pd),
!         CLASS_DEFAULT, A_NULL);
!     pd_canvasmaker = class_new(gensym("canvasmaker"), 0, 0, sizeof(t_pd),
!         CLASS_DEFAULT, A_NULL);
      pd_bind(&pd_canvasmaker, &s__N);
      class_addanything(pd_objectmaker, (t_method)new_anything);
--- 543,554 ----
      &s_list, &s_anything, &s_signal, &s__N, &s__X, &s_x, &s_y, &s_};
  
! void mess_init(void) {
      t_symbol **sp;
      int i;
!     if (pd_objectmaker) return;
      for (i = sizeof(symlist)/sizeof(*symlist), sp = symlist; i--; sp++)
!         (void) dogensym((*sp)->s_name, strlen((*sp)->s_name), *sp);
!     pd_objectmaker = class_new(gensym("objectmaker"), 0, 0, sizeof(t_pd), CLASS_DEFAULT, A_NULL);
!     pd_canvasmaker = class_new(gensym("canvasmaker"), 0, 0, sizeof(t_pd), CLASS_DEFAULT, A_NULL);
      pd_bind(&pd_canvasmaker, &s__N);
      class_addanything(pd_objectmaker, (t_method)new_anything);





More information about the Pd-cvs mailing list