[PD-cvs] externals/iem/iemmatrix/src mtx_colon.c,1.4,1.5

Franz Zotter fzotter at users.sourceforge.net
Wed Jul 26 11:57:09 CEST 2006


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

Modified Files:
	mtx_colon.c 
Log Message:
added help for mtx_: 
and abstractions for lin/logspace. 

mtx_colon.c: added simple octave functionality (see help).



Index: mtx_colon.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_colon.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** mtx_colon.c	6 Jun 2006 09:55:22 -0000	1.4
--- mtx_colon.c	26 Jul 2006 09:57:07 -0000	1.5
***************
*** 17,22 ****
  
  static t_class *mtx_colon_class;
- static t_symbol *col_sym;
- static t_symbol *col_sym2;
  
  typedef struct _MTXColon_ MTXColon;
--- 17,20 ----
***************
*** 25,29 ****
     t_object x_obj;
     int size;
-    t_symbol *colon_mode;
  
     t_atom *list_out;
--- 23,26 ----
***************
*** 37,45 ****
  }
  
- static void mTXSetColonMode (MTXColon *mtx_colon_obj, t_symbol *c_mode) 
- {
-    mtx_colon_obj->colon_mode = c_mode;
- }
- 
  static void *newMTXColon (t_symbol *s, int argc, t_atom *argv)
  {
--- 34,37 ----
***************
*** 94,106 ****
        mtx_colon_obj->list_out = list_out;
  
!       if ((mtx_colon_obj->colon_mode == col_sym)||
! 	    (mtx_colon_obj->colon_mode == col_sym2)) {
! 	 SETFLOAT (&list_out[1],1.0f);
! 	 SETFLOAT (&list_out[0],(t_float)size);
!       }
!       else {
! 	 SETFLOAT (&list_out[0],1.0f);
! 	 SETFLOAT (&list_out[1],(t_float)size);
!       }
        list_out += 2;
        for (;size--;list_out++,startval+=step)
--- 86,91 ----
        mtx_colon_obj->list_out = list_out;
  
!       SETFLOAT (&list_out[0],1.0f);
!       SETFLOAT (&list_out[1],(t_float)size);
        list_out += 2;
        for (;size--;list_out++,startval+=step)
***************
*** 111,114 ****
--- 96,142 ----
  }
  
+ static void mTXColonMtx (MTXColon *mtx_colon_obj, t_symbol *s,
+       int argc, t_atom *argv)
+ {
+    int rows = atom_getint (argv++);
+    int columns = atom_getint (argv++);
+    int size = rows * columns;
+    int list_size = argc - 2;
+    t_atom *list_ptr = argv;
+    t_atom *list_out = mtx_colon_obj->list_out;
+  
+    if (!size) {
+       post("mtx_colon: invalid matrix dimensions");
+       return;
+    }
+    else if (list_size<size) {
+       post("mtx_colon: sparse matrix not yet supported: use \"mtx_check\"");
+       return;
+    }
+    else if (!list_out) {
+       list_out = (t_atom*) getbytes (sizeof (t_atom) * (size+2));
+    }
+    else if (size != mtx_colon_obj->size)
+    {
+       list_out = (t_atom*) resizebytes (list_out, 
+ 	    sizeof (t_atom) * (mtx_colon_obj->size+2),
+ 	    sizeof (t_atom) * (size+2));
+    }
+    mtx_colon_obj->list_out = list_out;
+    mtx_colon_obj->size = size;
+ 
+    list_out+=2;
+    while (size--)
+       *list_out++ = *list_ptr++;
+ 
+    list_out = mtx_colon_obj->list_out;
+    size = mtx_colon_obj->size;
+ 
+    SETSYMBOL(list_out, gensym("matrix"));
+    SETFLOAT(list_out, 1);
+    SETFLOAT(&list_out[1], size);
+    mTXColonBang (mtx_colon_obj);
+ }
+ 
  void mtx_colon_setup (void)
  {
***************
*** 120,124 ****
         CLASS_DEFAULT, A_GIMME, 0);
     class_addbang (mtx_colon_class, (t_method) mTXColonBang);
!    class_addmethod (mtx_colon_class, (t_method) mTXSetColonMode, gensym("mode"), A_SYMBOL, 0);
     class_addlist (mtx_colon_class, (t_method) mTXColonList);
     class_addcreator ((t_newmethod) newMTXColon, gensym("mtx_:"), A_GIMME, 0);
--- 148,152 ----
         CLASS_DEFAULT, A_GIMME, 0);
     class_addbang (mtx_colon_class, (t_method) mTXColonBang);
!    class_addmethod (mtx_colon_class, (t_method) mTXColonMtx, gensym("matrix"), A_GIMME, 0);
     class_addlist (mtx_colon_class, (t_method) mTXColonList);
     class_addcreator ((t_newmethod) newMTXColon, gensym("mtx_:"), A_GIMME, 0);





More information about the Pd-cvs mailing list