[PD-cvs] externals/iem/iemmatrix/src mtx_cumsum.c, 1.1, 1.2 mtx_decay.c, 1.1, 1.2 mtx_diff.c, 1.1, 1.2 mtx_sort.c, 1.1, 1.2

Franz Zotter fzotter at users.sourceforge.net
Thu Sep 22 11:28:57 CEST 2005


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

Modified Files:
	mtx_cumsum.c mtx_decay.c mtx_diff.c mtx_sort.c 
Log Message:
re-newed column and row-wise operation selector. now [mode row(,
[mode col( / [mode column( or [mode :( work in cumsum, decay, diff, sort,
(and minmax) external. 
The order of creation arguments is in some kind arbitrary.


Index: mtx_cumsum.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_cumsum.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mtx_cumsum.c	19 Sep 2005 14:47:49 -0000	1.1
--- mtx_cumsum.c	22 Sep 2005 09:28:55 -0000	1.2
***************
*** 17,20 ****
--- 17,23 ----
  
  static t_class *mtx_cumsum_class;
+ static t_symbol *row_sym;
+ static t_symbol *col_sym;
+ static t_symbol *col_sym2;
  
  typedef struct _MTXCumsum_ MTXCumsum;
***************
*** 25,30 ****
     int columns;
     int size;
-    int cumsum_dimension;
     int cumsum_direction;
  
     t_outlet *list_outlet;
--- 28,33 ----
     int columns;
     int size;
     int cumsum_direction;
+    t_symbol *cumsum_mode;
  
     t_outlet *list_outlet;
***************
*** 51,58 ****
     mtx_cumsum_obj->cumsum_direction = (direction==-1)?direction:1;
  }
! static void mTXSetCumsumDimension (MTXCumsum *mtx_cumsum_obj, t_float c_dim)
  {
!    int dimension = (int) c_dim;
!    mtx_cumsum_obj->cumsum_dimension = (dimension==2)?dimension:1;
  }
  
--- 54,61 ----
     mtx_cumsum_obj->cumsum_direction = (direction==-1)?direction:1;
  }
! 
! static void mTXSetCumsumMode (MTXCumsum *mtx_cumsum_obj, t_symbol *m_sym)
  {
!    mtx_cumsum_obj->cumsum_mode = m_sym;
  }
  
***************
*** 60,75 ****
  {
     MTXCumsum *mtx_cumsum_obj = (MTXCumsum *) pd_new (mtx_cumsum_class);
!    int c_dir = 1;
!    int c_dim = 1;
! 
!    mtx_cumsum_obj->cumsum_dimension = c_dim;
!    switch ((argc>2)?2:argc) {
!       case 2:
! 	 c_dir = atom_getint(argv+1);
!       case 1:
! 	 c_dim = atom_getint(argv);
     }
-    mTXSetCumsumDirection (mtx_cumsum_obj, (t_float) c_dir);
-    mTXSetCumsumDimension (mtx_cumsum_obj, (t_float) c_dim);
  
     mtx_cumsum_obj->list_outlet = outlet_new (&mtx_cumsum_obj->x_obj, gensym("matrix"));
--- 63,87 ----
  {
     MTXCumsum *mtx_cumsum_obj = (MTXCumsum *) pd_new (mtx_cumsum_class);
!    mTXSetCumsumMode (mtx_cumsum_obj, gensym(":"));
!    mTXSetCumsumDirection (mtx_cumsum_obj, 1.0f);
!    if (argc>=1) {
!       if (argv[0].a_type == A_SYMBOL) {
! 	 mTXSetCumsumMode (mtx_cumsum_obj, atom_getsymbol (argv));
! 	 if (argc>=2) 
! 	    if (argv[1].a_type != A_SYMBOL)
! 	       mTXSetCumsumDirection (mtx_cumsum_obj, atom_getfloat (argv+1));
! 	    else
! 	       post("mtx_cumsum: 2nd arg ignored. supposed to be float");
!       }
!       else {
! 	 mTXSetCumsumDirection (mtx_cumsum_obj, atom_getfloat (argv));
! 	 if (argc>=2) {
! 	    if (argv[1].a_type == A_SYMBOL)
! 	       mTXSetCumsumMode (mtx_cumsum_obj, atom_getsymbol (argv+1));
! 	    else
! 	       post("mtx_cumsum: 2nd arg ignored. supposed to be symbolic, e.g. \"row\", \"col\", \":\"");
! 	 }
!       }
     }
  
     mtx_cumsum_obj->list_outlet = outlet_new (&mtx_cumsum_obj->x_obj, gensym("matrix"));
***************
*** 182,186 ****
     // main part
     // reading matrix from inlet
!    if (mtx_cumsum_obj->cumsum_dimension == 2) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_cumsum_obj->rows;
--- 194,199 ----
     // main part
     // reading matrix from inlet
!    if ((mtx_cumsum_obj->cumsum_mode == col_sym) ||
! 	(mtx_cumsum_obj->cumsum_mode == col_sym2)) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_cumsum_obj->rows;
***************
*** 192,208 ****
     // calculating cumsum
     if (mtx_cumsum_obj->cumsum_direction == -1) {
!       x += columns-1;
!       y += columns-1;
!       for (count = rows; count--; x += columns, y += columns)
! 	 cumSumReverse (columns,x,y);
     }
!    else
        for (count = rows; count--; x += columns, y += columns)
  	 cumSum (columns,x,y);
     x = mtx_cumsum_obj->x;
     y = mtx_cumsum_obj->y;
  
     // writing matrix to outlet
!    if (mtx_cumsum_obj->cumsum_dimension == 2) {
        columns = mtx_cumsum_obj->columns;
        rows = mtx_cumsum_obj->rows;
--- 205,237 ----
     // calculating cumsum
     if (mtx_cumsum_obj->cumsum_direction == -1) {
!       if ((mtx_cumsum_obj->cumsum_mode == row_sym) ||
! 	    (mtx_cumsum_obj->cumsum_mode == col_sym) ||
! 	    (mtx_cumsum_obj->cumsum_mode == col_sym2)) {
! 	 x += columns-1;
! 	 y += columns-1;
! 
! 	 for (count = rows; count--; x += columns, y += columns)
! 	    cumSumReverse (columns,x,y);
!       }
!       else {
! 	 x += size-1;
! 	 y += size-1;
! 	 cumSumReverse (size, x, y);
!       }
     }
!    else if ((mtx_cumsum_obj->cumsum_mode == row_sym) ||
! 	 (mtx_cumsum_obj->cumsum_mode == col_sym) ||
! 	 (mtx_cumsum_obj->cumsum_mode == col_sym2))
        for (count = rows; count--; x += columns, y += columns)
  	 cumSum (columns,x,y);
+    else
+       cumSum (size, x, y);
+ 
     x = mtx_cumsum_obj->x;
     y = mtx_cumsum_obj->y;
  
     // writing matrix to outlet
!    if ((mtx_cumsum_obj->cumsum_mode == col_sym) ||
! 	(mtx_cumsum_obj->cumsum_mode == col_sym2)) {
        columns = mtx_cumsum_obj->columns;
        rows = mtx_cumsum_obj->rows;
***************
*** 229,235 ****
     class_addbang (mtx_cumsum_class, (t_method) mTXCumsumBang);
     class_addmethod (mtx_cumsum_class, (t_method) mTXCumsumMatrix, gensym("matrix"), A_GIMME,0);
!    class_addmethod (mtx_cumsum_class, (t_method) mTXSetCumsumDimension, gensym("dimension"), A_DEFFLOAT,0);
     class_addmethod (mtx_cumsum_class, (t_method) mTXSetCumsumDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_cumsum_class, gensym("iemmatrix/mtx_cumsum"));
  }
  
--- 258,267 ----
     class_addbang (mtx_cumsum_class, (t_method) mTXCumsumBang);
     class_addmethod (mtx_cumsum_class, (t_method) mTXCumsumMatrix, gensym("matrix"), A_GIMME,0);
!    class_addmethod (mtx_cumsum_class, (t_method) mTXSetCumsumMode, gensym("mode"), A_DEFSYMBOL,0);
     class_addmethod (mtx_cumsum_class, (t_method) mTXSetCumsumDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_cumsum_class, gensym("iemmatrix/mtx_cumsum"));
+    row_sym = gensym("row");
+    col_sym = gensym("col");
+    col_sym2 = gensym("column");
  }
  

Index: mtx_sort.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_sort.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mtx_sort.c	19 Sep 2005 14:47:50 -0000	1.1
--- mtx_sort.c	22 Sep 2005 09:28:55 -0000	1.2
***************
*** 16,19 ****
--- 16,22 ----
  
  static t_class *mtx_sort_class;
+ static t_symbol *row_sym;
+ static t_symbol *col_sym;
+ static t_symbol *col_sym2;
  
  typedef struct _MTXSort_ MTXSort;
***************
*** 24,28 ****
     int columns;
     int size;
!    int sort_dimension;
     int sort_direction;
  
--- 27,31 ----
     int columns;
     int size;
!    t_symbol *sort_mode;
     int sort_direction;
  
***************
*** 57,66 ****
     mtx_sort_obj->sort_direction = (direction==-1)?direction:1;
  }
! static void mTXSetSortDimension (MTXSort *mtx_sort_obj, t_float s_dim)
  {
!    int dimension = (int) s_dim;
!    dimension = (dimension<2)?dimension:2;
!    dimension = (dimension>0)?dimension:0;
!    mtx_sort_obj->sort_dimension = dimension;
  }
  
--- 60,67 ----
     mtx_sort_obj->sort_direction = (direction==-1)?direction:1;
  }
! 
! static void mTXSetSortMode (MTXSort *mtx_sort_obj, t_symbol *m_sym)
  {
!    mtx_sort_obj->sort_mode = m_sym;
  }
  
***************
*** 68,83 ****
  {
     MTXSort *mtx_sort_obj = (MTXSort *) pd_new (mtx_sort_class);
!    int c_dir = 1;
!    int c_dim = 1;
! 
!    mtx_sort_obj->sort_dimension = c_dim;
!    switch ((argc>2)?2:argc) {
!       case 2:
! 	 c_dir = atom_getint(argv+1);
!       case 1:
! 	 c_dim = atom_getint(argv);
     }
-    mTXSetSortDirection (mtx_sort_obj, (t_float) c_dir);
-    mTXSetSortDimension (mtx_sort_obj, (t_float) c_dim);
  
     mtx_sort_obj->list_outlet1 = outlet_new (&mtx_sort_obj->x_obj, gensym("matrix"));
--- 69,95 ----
  {
     MTXSort *mtx_sort_obj = (MTXSort *) pd_new (mtx_sort_class);
!    
!    // defaults:
!    mTXSetSortMode (mtx_sort_obj, gensym(":"));
!    mTXSetSortDirection (mtx_sort_obj, 1.0f);
!    if (argc>=1) {
!       if (argv[0].a_type == A_SYMBOL) {
! 	 mTXSetSortMode (mtx_sort_obj, atom_getsymbol (argv));
! 	 if (argc>=2) 
! 	    if (argv[1].a_type != A_SYMBOL)
! 	       mTXSetSortDirection (mtx_sort_obj, atom_getfloat (argv+1));
! 	    else
! 	       post("mtx_sort: 2nd arg ignored. supposed to be float");
!       }
!       else {
! 	 mTXSetSortDirection (mtx_sort_obj, atom_getfloat (argv));
! 	 if (argc>=2) {
! 	    if (argv[1].a_type == A_SYMBOL)
! 	       mTXSetSortMode (mtx_sort_obj, atom_getsymbol (argv+1));
! 	    else
! 	       post("mtx_sort: 2nd arg ignored. supposed to be symbolic, e.g. \"row\", \"col\", \":\"");
! 	 }
!       }
     }
  
     mtx_sort_obj->list_outlet1 = outlet_new (&mtx_sort_obj->x_obj, gensym("matrix"));
***************
*** 174,177 ****
--- 186,190 ----
  }
  
+ /*
  static void indexingVector (int n, int m, int dimension, t_float *i)
  {
***************
*** 196,199 ****
--- 209,234 ----
     }
  }
+ */
+ static void indexingVector (int n, int m, t_symbol *sort_mode, t_float *i)
+ {
+    int count;
+    int count2;
+    int idx = n;
+    t_float *ptr;
+    i += n;
+    if ((sort_mode == col_sym)||(sort_mode == col_sym2)) {
+ 	 n /= m;
+ 	 for (count = m; count--;) {
+ 	    ptr = --i;
+ 	    for (count2 = n; count2--; ptr -= m) 
+ 	       *ptr = idx--;
+ 	 }
+    }
+    else {
+ 	 for (; idx;)
+ 	    *--i = idx--;
+    }
+ }
+ 
  
  static void mTXSortMatrix (MTXSort *mtx_sort_obj, t_symbol *s, 
***************
*** 261,269 ****
  
     // generating indexing vector
!    indexingVector (size, columns, mtx_sort_obj->sort_dimension, i);
  
     // main part
     // reading matrix from inlet
!    if (mtx_sort_obj->sort_dimension == 2) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_sort_obj->rows;
--- 296,305 ----
  
     // generating indexing vector
!    indexingVector (size, columns, mtx_sort_obj->sort_mode, i);
  
     // main part
     // reading matrix from inlet
!    if ((mtx_sort_obj->sort_mode == col_sym)||
! 	(mtx_sort_obj->sort_mode == col_sym2)) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_sort_obj->rows;
***************
*** 274,278 ****
     
     // calculating sort
!    if (mtx_sort_obj->sort_dimension == 0)
        sortVector (size,x,i,mtx_sort_obj->sort_direction);
     else
--- 310,316 ----
     
     // calculating sort
!    if ((mtx_sort_obj->sort_mode != col_sym) &&
! 	 (mtx_sort_obj->sort_mode != col_sym2) &&
! 	 (mtx_sort_obj->sort_mode != row_sym))
        sortVector (size,x,i,mtx_sort_obj->sort_direction);
     else
***************
*** 283,287 ****
  
     // writing matrix to outlet
!    if (mtx_sort_obj->sort_dimension == 2) {
        columns = mtx_sort_obj->columns;
        rows = mtx_sort_obj->rows;
--- 321,326 ----
  
     // writing matrix to outlet
!    if ((mtx_sort_obj->sort_mode == col_sym)||
! 	 (mtx_sort_obj->sort_mode == col_sym2)) {
        columns = mtx_sort_obj->columns;
        rows = mtx_sort_obj->rows;
***************
*** 316,322 ****
     class_addbang (mtx_sort_class, (t_method) mTXSortBang);
     class_addmethod (mtx_sort_class, (t_method) mTXSortMatrix, gensym("matrix"), A_GIMME,0);
!    class_addmethod (mtx_sort_class, (t_method) mTXSetSortDimension, gensym("dimension"), A_DEFFLOAT,0);
     class_addmethod (mtx_sort_class, (t_method) mTXSetSortDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_sort_class, gensym("iemmatrix/mtx_sort"));
  }
  
--- 355,365 ----
     class_addbang (mtx_sort_class, (t_method) mTXSortBang);
     class_addmethod (mtx_sort_class, (t_method) mTXSortMatrix, gensym("matrix"), A_GIMME,0);
!    class_addmethod (mtx_sort_class, (t_method) mTXSetSortMode, gensym("mode"), A_DEFSYMBOL,0);
! //   class_addmethod (mtx_sort_class, (t_method) mTXSetSortDimension, gensym("dimension"), A_DEFFLOAT,0);
     class_addmethod (mtx_sort_class, (t_method) mTXSetSortDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_sort_class, gensym("iemmatrix/mtx_sort"));
+    row_sym = gensym("row");
+    col_sym = gensym("col");
+    col_sym2 = gensym("column");
  }
  

Index: mtx_decay.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_decay.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mtx_decay.c	20 Sep 2005 08:12:38 -0000	1.1
--- mtx_decay.c	22 Sep 2005 09:28:55 -0000	1.2
***************
*** 16,19 ****
--- 16,23 ----
  
  static t_class *mtx_decay_class;
+ static t_symbol *row_sym;
+ static t_symbol *col_sym;
+ static t_symbol *col_sym2;
+ 
  
  typedef struct _MTXDecay_ MTXDecay;
***************
*** 24,29 ****
     int columns;
     int size;
-    int decay_dimension;
     int decay_direction;
     t_float decay_parameter;
  
--- 28,33 ----
     int columns;
     int size;
     int decay_direction;
+    t_symbol *decay_mode;
     t_float decay_parameter;
  
***************
*** 57,64 ****
     mtx_decay_obj->decay_direction = (direction==-1)?direction:1;
  }
! static void mTXSetDecayDimension (MTXDecay *mtx_decay_obj, t_float c_dim)
  {
!    int dimension = (int) c_dim;
!    mtx_decay_obj->decay_dimension = (dimension==2)?dimension:1;
  }
  
--- 61,67 ----
     mtx_decay_obj->decay_direction = (direction==-1)?direction:1;
  }
! static void mTXSetDecayMode (MTXDecay *mtx_decay_obj, t_symbol *c_mode)
  {
!    mtx_decay_obj->decay_mode = c_mode;
  }
  
***************
*** 66,85 ****
  {
     MTXDecay *mtx_decay_obj = (MTXDecay *) pd_new (mtx_decay_class);
!    int c_dir = 1;
!    int c_dim = 1;
!    t_float c_par = 0.9f;
  
!    mtx_decay_obj->decay_dimension = c_dim;
!    switch ((argc>3)?3:argc) {
        case 3:
! 	 c_dir = atom_getint(argv+2);
        case 2:
! 	 c_dim = atom_getint(argv+1);
        case 1:
! 	 c_par = atom_getfloat(argv);
     }
-    mTXSetDecayParameter (mtx_decay_obj, c_par);
-    mTXSetDecayDirection (mtx_decay_obj, (t_float) c_dir);
-    mTXSetDecayDimension (mtx_decay_obj, (t_float) c_dim);
  
     mtx_decay_obj->list_outlet = outlet_new (&mtx_decay_obj->x_obj, gensym("matrix"));
--- 69,109 ----
  {
     MTXDecay *mtx_decay_obj = (MTXDecay *) pd_new (mtx_decay_class);
!    int sym_count=0;
!    int first_sym=argc;
!    int n=0;
  
!    mTXSetDecayMode (mtx_decay_obj, gensym(":"));
!    mTXSetDecayDirection (mtx_decay_obj, 1);
!    mTXSetDecayParameter (mtx_decay_obj, .9f);
! 
!    argc = ((argc<3)?argc:3);
!    while (n < argc) {
!      if (argv[n].a_type == A_SYMBOL) {
! 	post("postition %d",n);
! 	sym_count++;
! 	first_sym = (first_sym<n)?first_sym:n;
!      }
!      n++;
!    }
!    if (sym_count >= 1) 
!       mTXSetDecayMode (mtx_decay_obj, atom_getsymbol(argv+first_sym));
!    if (sym_count > 1) {
!       post("mtx_decay: args after pos %d ignored. supposed to be non-symbolic",first_sym);
!       argc = first_sym+1;
!    }
!       
!    switch (argc) {
        case 3:
! 	 if (first_sym < 2)
! 	    mTXSetDecayDirection (mtx_decay_obj, atom_getfloat (argv+2));
        case 2:
! 	 if (first_sym < 1) 
! 	    mTXSetDecayParameter (mtx_decay_obj, atom_getfloat (argv+1));
! 	 else if (first_sym > 1)
! 	    mTXSetDecayDirection (mtx_decay_obj, atom_getfloat(argv+1));
        case 1:
! 	 if (first_sym != 0)
! 	    mTXSetDecayParameter (mtx_decay_obj, atom_getfloat (argv));
     }
  
     mtx_decay_obj->list_outlet = outlet_new (&mtx_decay_obj->x_obj, gensym("matrix"));
***************
*** 194,198 ****
     // main part
     // reading matrix from inlet
!    if (mtx_decay_obj->decay_dimension == 2) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_decay_obj->rows;
--- 218,224 ----
     // main part
     // reading matrix from inlet
! 
!    if ((mtx_decay_obj->decay_mode == col_sym) ||
! 	 (mtx_decay_obj->decay_mode == col_sym2)) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_decay_obj->rows;
***************
*** 204,220 ****
     // calculating decay
     if (mtx_decay_obj->decay_direction == -1) {
!       x += columns-1;
!       y += columns-1;
!       for (count = rows; count--; x += columns, y += columns)
! 	 deCayReverse (columns,x,y,mtx_decay_obj->decay_parameter);
     }
-    else
-       for (count = rows; count--; x += columns, y += columns)
- 	 deCay (columns,x,y,mtx_decay_obj->decay_parameter);
     x = mtx_decay_obj->x;
     y = mtx_decay_obj->y;
  
     // writing matrix to outlet
!    if (mtx_decay_obj->decay_dimension == 2) {
        columns = mtx_decay_obj->columns;
        rows = mtx_decay_obj->rows;
--- 230,262 ----
     // calculating decay
     if (mtx_decay_obj->decay_direction == -1) {
!       if ((mtx_decay_obj->decay_mode == col_sym) ||
! 	    (mtx_decay_obj->decay_mode == col_sym2) ||
! 	    (mtx_decay_obj->decay_mode == row_sym)) {
! 	 x += columns-1;
! 	 y += columns-1;
! 	 for (count = rows; count--; x += columns, y += columns)
! 	    deCayReverse (columns,x,y,mtx_decay_obj->decay_parameter);
!       }
!       else {
! 	 x += size-1;
! 	 y += size-1;
! 	 deCayReverse (size,x,y,mtx_decay_obj->decay_parameter);
!       }
!    }
!    else {
!       if ((mtx_decay_obj->decay_mode == col_sym) ||
! 	    (mtx_decay_obj->decay_mode == col_sym2) ||
! 	    (mtx_decay_obj->decay_mode == row_sym)) 
! 	 for (count = rows; count--; x += columns, y += columns)
! 	    deCay (columns,x,y,mtx_decay_obj->decay_parameter);
!       else
! 	 deCay (size,x,y,mtx_decay_obj->decay_parameter);
     }
     x = mtx_decay_obj->x;
     y = mtx_decay_obj->y;
  
     // writing matrix to outlet
!   if ((mtx_decay_obj->decay_mode == col_sym) ||
! 	 (mtx_decay_obj->decay_mode == col_sym2)) {
        columns = mtx_decay_obj->columns;
        rows = mtx_decay_obj->rows;
***************
*** 242,248 ****
     class_addmethod (mtx_decay_class, (t_method) mTXDecayMatrix, gensym("matrix"), A_GIMME,0);
     class_addmethod (mtx_decay_class, (t_method) mTXSetDecayParameter, gensym("alpha"), A_DEFFLOAT,0);
!    class_addmethod (mtx_decay_class, (t_method) mTXSetDecayDimension, gensym("dimension"), A_DEFFLOAT,0);
     class_addmethod (mtx_decay_class, (t_method) mTXSetDecayDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_decay_class, gensym("iemmatrix/mtx_decay"));
  }
  
--- 284,293 ----
     class_addmethod (mtx_decay_class, (t_method) mTXDecayMatrix, gensym("matrix"), A_GIMME,0);
     class_addmethod (mtx_decay_class, (t_method) mTXSetDecayParameter, gensym("alpha"), A_DEFFLOAT,0);
!    class_addmethod (mtx_decay_class, (t_method) mTXSetDecayMode, gensym("mode"), A_DEFSYMBOL,0);
     class_addmethod (mtx_decay_class, (t_method) mTXSetDecayDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_decay_class, gensym("iemmatrix/mtx_decay"));
+    row_sym = gensym("row");
+    col_sym = gensym("col");
+    col_sym2 = gensym("column");
  }
  

Index: mtx_diff.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_diff.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mtx_diff.c	19 Sep 2005 14:47:49 -0000	1.1
--- mtx_diff.c	22 Sep 2005 09:28:55 -0000	1.2
***************
*** 15,18 ****
--- 15,21 ----
  
  static t_class *mtx_diff_class;
+ static t_symbol *row_sym;
+ static t_symbol *col_sym;
+ static t_symbol *col_sym2;
  
  typedef struct _MTXdiff_ MTXdiff;
***************
*** 23,28 ****
     int columns;
     int size;
-    int diff_dimension;
     int diff_direction;
  
     t_outlet *list_outlet;
--- 26,31 ----
     int columns;
     int size;
     int diff_direction;
+    t_symbol *diff_mode;
  
     t_outlet *list_outlet;
***************
*** 49,56 ****
     mtx_diff_obj->diff_direction = (direction==-1)?direction:1;
  }
! static void mTXSetdiffDimension (MTXdiff *mtx_diff_obj, t_float c_dim)
  {
!    int dimension = (int) c_dim;
!    mtx_diff_obj->diff_dimension = (dimension==2)?dimension:1;
  }
  
--- 52,58 ----
     mtx_diff_obj->diff_direction = (direction==-1)?direction:1;
  }
! static void mTXSetdiffMode (MTXdiff *mtx_diff_obj, t_symbol *c_mode)
  {
!    mtx_diff_obj->diff_mode = c_mode;
  }
  
***************
*** 58,73 ****
  {
     MTXdiff *mtx_diff_obj = (MTXdiff *) pd_new (mtx_diff_class);
!    int c_dir = 1;
!    int c_dim = 1;
! 
!    mtx_diff_obj->diff_dimension = c_dim;
!    switch ((argc>2)?2:argc) {
!       case 2:
! 	 c_dir = atom_getint(argv+1);
!       case 1:
! 	 c_dim = atom_getint(argv);
     }
-    mTXSetdiffDirection (mtx_diff_obj, (t_float) c_dir);
-    mTXSetdiffDimension (mtx_diff_obj, (t_float) c_dim);
  
     mtx_diff_obj->list_outlet = outlet_new (&mtx_diff_obj->x_obj, gensym("matrix"));
--- 60,84 ----
  {
     MTXdiff *mtx_diff_obj = (MTXdiff *) pd_new (mtx_diff_class);
!    mTXSetdiffMode (mtx_diff_obj, gensym(":"));
!    mTXSetdiffDirection (mtx_diff_obj, 1.0f);
!    if (argc>=1) {
!       if (argv[0].a_type == A_SYMBOL) {
! 	 mTXSetdiffMode (mtx_diff_obj, atom_getsymbol (argv));
! 	 if (argc>=2) 
! 	    if (argv[1].a_type != A_SYMBOL)
! 	       mTXSetdiffDirection (mtx_diff_obj, atom_getfloat (argv+1));
! 	    else
! 	       post("mtx_diff: 2nd arg ignored. supposed to be float");
!       }
!       else {
! 	 mTXSetdiffDirection (mtx_diff_obj, atom_getfloat (argv));
! 	 if (argc>=2) {
! 	    if (argv[1].a_type == A_SYMBOL)
! 	       mTXSetdiffMode (mtx_diff_obj, atom_getsymbol (argv+1));
! 	    else
! 	       post("mtx_diff: 2nd arg ignored. supposed to be symbolic, e.g. \"row\", \"col\", \":\"");
! 	 }
!       }
     }
  
     mtx_diff_obj->list_outlet = outlet_new (&mtx_diff_obj->x_obj, gensym("matrix"));
***************
*** 176,180 ****
     // main part
     // reading matrix from inlet
!    if (mtx_diff_obj->diff_dimension == 2) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_diff_obj->rows;
--- 187,192 ----
     // main part
     // reading matrix from inlet
!    if ((mtx_diff_obj->diff_mode == col_sym) || 
! 	 (mtx_diff_obj->diff_mode == col_sym2)) {
        readFloatFromListModulo (size, columns, list_ptr, x);
        columns = mtx_diff_obj->rows;
***************
*** 186,202 ****
     // calculating diff
     if (mtx_diff_obj->diff_direction == -1) {
!       x += columns-1;
!       y += columns-1;
!       for (count = rows; count--; x += columns, y += columns)
! 	 diffReverse (columns,x,y);
     }
!    else
        for (count = rows; count--; x += columns, y += columns)
  	 diff (columns,x,y);
     x = mtx_diff_obj->x;
     y = mtx_diff_obj->y;
  
     // writing matrix to outlet
!    if (mtx_diff_obj->diff_dimension == 2) {
        columns = mtx_diff_obj->columns;
        rows = mtx_diff_obj->rows;
--- 198,229 ----
     // calculating diff
     if (mtx_diff_obj->diff_direction == -1) {
!       if ((mtx_diff_obj->diff_mode == row_sym) ||
! 	    (mtx_diff_obj->diff_mode == col_sym) ||
! 	    (mtx_diff_obj->diff_mode == col_sym2)) {      
! 	 x += columns-1;
! 	 y += columns-1;
! 	 for (count = rows; count--; x += columns, y += columns)
! 	    diffReverse (columns,x,y);
!       }
!       else {
! 	 x += size-1;
! 	 y += size-1;
! 	 diffReverse (size, x, y);
!       }
     }
!    else if ((mtx_diff_obj->diff_mode == row_sym) ||
! 	 (mtx_diff_obj->diff_mode == col_sym) ||
! 	 (mtx_diff_obj->diff_mode == col_sym2)) {
        for (count = rows; count--; x += columns, y += columns)
  	 diff (columns,x,y);
+    }
+    else
+       diff (size,x,y);
     x = mtx_diff_obj->x;
     y = mtx_diff_obj->y;
  
     // writing matrix to outlet
!    if ((mtx_diff_obj->diff_mode == col_sym) || 
! 	 (mtx_diff_obj->diff_mode == col_sym2)) {
        columns = mtx_diff_obj->columns;
        rows = mtx_diff_obj->rows;
***************
*** 223,229 ****
     class_addbang (mtx_diff_class, (t_method) mTXdiffBang);
     class_addmethod (mtx_diff_class, (t_method) mTXdiffMatrix, gensym("matrix"), A_GIMME,0);
!    class_addmethod (mtx_diff_class, (t_method) mTXSetdiffDimension, gensym("dimension"), A_DEFFLOAT,0);
     class_addmethod (mtx_diff_class, (t_method) mTXSetdiffDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_diff_class, gensym("iemmatrix/mtx_diff"));
  }
  
--- 250,259 ----
     class_addbang (mtx_diff_class, (t_method) mTXdiffBang);
     class_addmethod (mtx_diff_class, (t_method) mTXdiffMatrix, gensym("matrix"), A_GIMME,0);
!    class_addmethod (mtx_diff_class, (t_method) mTXSetdiffMode, gensym("mode"), A_DEFSYMBOL,0);
     class_addmethod (mtx_diff_class, (t_method) mTXSetdiffDirection, gensym("direction"), A_DEFFLOAT,0);
     class_sethelpsymbol (mtx_diff_class, gensym("iemmatrix/mtx_diff"));
+    row_sym = gensym("row");
+    col_sym = gensym("col");
+    col_sym2 = gensym("column");
  }
  





More information about the Pd-cvs mailing list