[PD-cvs] externals/zexy/src fifop.c,1.6,1.7 lifop.c,1.4,1.5

IOhannes m zmölnig zmoelnig at users.sourceforge.net
Sun Dec 4 13:44:35 CET 2005


Update of /cvsroot/pure-data/externals/zexy/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7099

Modified Files:
	fifop.c lifop.c 
Log Message:
added an "info"-outlet,which bangs when the {lf}ifo is empty
by sending an [info( message, you can query the total number of elements
currently on the stack


Index: fifop.c
===================================================================
RCS file: /cvsroot/pure-data/externals/zexy/src/fifop.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** fifop.c	15 Jun 2005 15:58:14 -0000	1.6
--- fifop.c	4 Dec 2005 12:44:33 -0000	1.7
***************
*** 45,48 ****
--- 45,49 ----
    t_fifop_list               *fifo_end;
    struct _fifop_prioritylist *next;
+   unsigned long               counter;
  } t_fifop_prioritylist;
  
***************
*** 52,55 ****
--- 53,57 ----
    t_fifop_prioritylist *fifo_list;
    t_float               priority; /* current priority */
+   t_outlet             *x_out, *x_infout;
  } t_fifop;
  
***************
*** 82,85 ****
--- 84,88 ----
    result->fifo_end=0;
    result->next=0;
+   result->counter=0;
  
    /* insert it into the list of priority lists */
***************
*** 137,140 ****
--- 140,144 ----
      fifoprio->fifo_end  =entry;
    }
+   fifoprio->counter++;
    return 0;
  }
***************
*** 164,173 ****
--- 168,181 ----
  
    if(!(pfifo=getFifo(x->fifo_list))){
+     outlet_bang(x->x_infout);
      return;
    }
    if(!(fifo=pfifo->fifo_start)){
+     outlet_bang(x->x_infout);
      return;
    }
  
+   pfifo->counter--;
+ 
    pfifo->fifo_start=fifo->next;
    if(0==pfifo->fifo_start){
***************
*** 186,195 ****
  
    /* output the list */
!   outlet_list(x->x_obj.ob_outlet, &s_list, argc, argv);
  
    /* free the list */
    freebytes(argv, argc*sizeof(t_atom));
  }
  
  static void fifop_free(t_fifop *x)
  {
--- 194,216 ----
  
    /* output the list */
!   outlet_list(x->x_out, &s_list, argc, argv);
  
    /* free the list */
    freebytes(argv, argc*sizeof(t_atom));
  }
+ static void fifop_query(t_fifop*x)
+ {
+   unsigned long counter=0;
+   t_fifop_prioritylist*pfifo=x->fifo_list;
  
+   while(pfifo!=NULL){
+     counter+=pfifo->counter;
+     pfifo=pfifo->next;
+   }
+   
+   verbose(1, "%d elements in fifo", (int)counter);
+   
+   outlet_float(x->x_infout, (t_float)counter);
+ }
  static void fifop_free(t_fifop *x)
  {
***************
*** 218,221 ****
--- 239,245 ----
    }
    x->fifo_list=0;
+ 
+   outlet_free(x->x_out);
+   outlet_free(x->x_infout);
  }
  
***************
*** 224,229 ****
    t_fifop *x = (t_fifop *)pd_new(fifop_class);
  
-   outlet_new(&x->x_obj, 0);
    floatinlet_new(&x->x_obj, &x->priority);
  
    x->fifo_list = 0;
--- 248,254 ----
    t_fifop *x = (t_fifop *)pd_new(fifop_class);
  
    floatinlet_new(&x->x_obj, &x->priority);
+   x->x_out   =outlet_new(&x->x_obj, gensym("list" ));
+   x->x_infout=outlet_new(&x->x_obj, gensym("float"));
  
    x->fifo_list = 0;
***************
*** 240,243 ****
--- 265,269 ----
    class_addbang    (fifop_class, fifop_bang);
    class_addlist    (fifop_class, fifop_list);
+   class_addmethod  (fifop_class, (t_method)fifop_query, gensym("info"), A_NULL);
  
    class_sethelpsymbol(fifop_class, gensym("zexy/fifop"));

Index: lifop.c
===================================================================
RCS file: /cvsroot/pure-data/externals/zexy/src/lifop.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** lifop.c	15 Jun 2005 15:50:08 -0000	1.4
--- lifop.c	4 Dec 2005 12:44:33 -0000	1.5
***************
*** 44,47 ****
--- 44,48 ----
    t_lifop_list               *lifo_start;
    struct _lifop_prioritylist *next;
+   unsigned long               counter;
  } t_lifop_prioritylist;
  typedef struct _lifop
***************
*** 50,53 ****
--- 51,55 ----
    t_lifop_prioritylist *lifo_list;
    t_float               priority; /* current priority */
+   t_outlet             *x_out, *x_infout;
  } t_lifop;
  
***************
*** 77,80 ****
--- 79,83 ----
    result->priority=priority;
    result->lifo_start=0;
+   result->counter=0;
  
    /* insert it into the list of priority lists */
***************
*** 120,123 ****
--- 123,127 ----
    entry->next=lifoprio->lifo_start;
    lifoprio->lifo_start=entry;
+   lifoprio->counter++;
  
    return 0;
***************
*** 148,157 ****
--- 152,165 ----
  
    if(!(plifo=getLifo(x->lifo_list))){
+     outlet_bang(x->x_infout);
      return;
    }
    if(!(lifo=plifo->lifo_start)){
+     outlet_bang(x->x_infout);
      return;
    }
  
+   plifo->counter--;
+ 
    plifo->lifo_start=lifo->next;
  
***************
*** 168,177 ****
  
    /* output the list */
!   outlet_list(x->x_obj.ob_outlet, &s_list, argc, argv);
  
    /* free the list */
    freebytes(argv, argc*sizeof(t_atom));
  }
  
  static void lifop_free(t_lifop *x)
  {
--- 176,198 ----
  
    /* output the list */
!   outlet_list(x->x_out, &s_list, argc, argv);
  
    /* free the list */
    freebytes(argv, argc*sizeof(t_atom));
  }
+ static void lifop_query(t_lifop*x)
+ {
+   unsigned long counter=0;
+   t_lifop_prioritylist*plifo=x->lifo_list;
  
+   while(plifo!=NULL){
+     counter+=plifo->counter;
+     plifo=plifo->next;
+   }
+   
+   verbose(1, "%d elements in lifo", (int)counter);
+   
+   outlet_float(x->x_infout, (t_float)counter);
+ }
  static void lifop_free(t_lifop *x)
  {
***************
*** 199,202 ****
--- 220,226 ----
    }
    x->lifo_list=0;
+ 
+   outlet_free(x->x_out);
+   outlet_free(x->x_infout);
  }
  
***************
*** 205,210 ****
    t_lifop *x = (t_lifop *)pd_new(lifop_class);
  
-   outlet_new(&x->x_obj, 0);
    floatinlet_new(&x->x_obj, &x->priority);
  
    x->lifo_list = 0;
--- 229,235 ----
    t_lifop *x = (t_lifop *)pd_new(lifop_class);
  
    floatinlet_new(&x->x_obj, &x->priority);
+   x->x_out=outlet_new(&x->x_obj, gensym("list"));
+   x->x_infout=outlet_new(&x->x_obj, gensym("float"));
  
    x->lifo_list = 0;
***************
*** 221,224 ****
--- 246,250 ----
    class_addbang    (lifop_class, lifop_bang);
    class_addlist    (lifop_class, lifop_list);
+   class_addmethod  (lifop_class, (t_method)lifop_query, gensym("info"), A_NULL);
  
    class_sethelpsymbol(lifop_class, gensym("zexy/lifop"));





More information about the Pd-cvs mailing list