[PD-cvs] externals/iem/iemmatrix/src mtx_add.c, 1.1, 1.2 mtx_binop_generic.h, 1.1, 1.2

IOhannes m zmölnig zmoelnig at users.sourceforge.net
Mon Oct 17 20:55:32 CEST 2005


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

Modified Files:
	mtx_add.c mtx_binop_generic.h 
Log Message:
fixed bugs in mtx_binop_generic;
use generism for mtx_add


Index: mtx_binop_generic.h
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_binop_generic.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mtx_binop_generic.h	19 Sep 2005 12:51:08 -0000	1.1
--- mtx_binop_generic.h	17 Oct 2005 18:55:30 -0000	1.2
***************
*** 39,43 ****
    int row=atom_getint(argv), col=atom_getint(argv+1);
  #ifdef MTXBIN_GENERIC__INTEGEROP
!   t_int offset=x->f;
  #else
    t_float offset=x->f;
--- 39,43 ----
    int row=atom_getint(argv), col=atom_getint(argv+1);
  #ifdef MTXBIN_GENERIC__INTEGEROP
!   t_int offset=(t_int)x->f;
  #else
    t_float offset=x->f;
***************
*** 46,61 ****
    t_atom *ap=argv+2;
  
!   if(argc<2){post("mtx_&&: crippled matrix");return; }
    adjustsize(&x->m, row, col);
  
    buf=x->m.atombuffer+2;
- 
    while(n--){
-     buf->a_type = A_FLOAT;
  #ifdef MTXBIN_GENERIC__INTEGEROP
!     buf++->a_w.w_float = atom_getint(ap++) MTXBIN_GENERIC__OPERATOR offset;
  #else
!     buf++->a_w.w_float = atom_getfloat(ap++) MTXBIN_GENERIC__OPERATOR offset;
  #endif
    }
    outlet_anything(x->x_obj.ob_outlet, gensym("matrix"), argc, x->m.atombuffer);
--- 46,61 ----
    t_atom *ap=argv+2;
  
!   if(argc<2){post( MTXBIN_SHORTNAME ": crippled matrix");return; }
    adjustsize(&x->m, row, col);
  
    buf=x->m.atombuffer+2;
    while(n--){
  #ifdef MTXBIN_GENERIC__INTEGEROP
!     buf->a_w.w_float = atom_getint(ap) MTXBIN_GENERIC__OPERATOR offset;
  #else
!     buf->a_w.w_float = atom_getfloat(ap) MTXBIN_GENERIC__OPERATOR offset;
  #endif
+     buf->a_type = A_FLOAT;
+     buf++; ap++;
    }
    outlet_anything(x->x_obj.ob_outlet, gensym("matrix"), argc, x->m.atombuffer);
***************
*** 93,99 ****
    int n = argc-2;
  
!   if (argc<2){    post("mtx_&&: crippled matrix");    return;  }
!   if ((col<1)||(row<1)) {    post("mtx_&&: invalid dimensions");    return;  }
!   if (col*row>argc-2){    post("sparse matrix not yet suppandted : use \"mtx_check\"");    return;  }
  
    if (!(x->m2.col*x->m2.row)) {
--- 93,99 ----
    int n = argc-2;
  
!   if (argc<2){    post( MTXBIN_SHORTNAME ": crippled matrix");    return;  }
!   if ((col<1)||(row<1)) {    post( MTXBIN_SHORTNAME ": invalid dimensions");    return;  }
!   if (col*row>argc-2){    post( MTXBIN_SHORTNAME ":sparse matrix not yet suppandted : use \"mtx_check\"");    return;  }
  
    if (!(x->m2.col*x->m2.row)) {
***************
*** 103,107 ****
  
    if ((col!=x->m2.col)||(row!=x->m2.row)){ 
!     post("mtx_&&: matrix dimensions do not match");
      /* LATER SOLVE THIS */    
      return;
--- 103,107 ----
  
    if ((col!=x->m2.col)||(row!=x->m2.row)){ 
!     post( MTXBIN_SHORTNAME ": matrix dimensions do not match");
      /* LATER SOLVE THIS */    
      return;
***************
*** 112,119 ****
    while(n--){
  #ifdef MTXBIN_GENERIC__INTEGEROP
!     t_float f = (t_float)(atom_getint(m1++) MTXBIN_GENERIC__OPERATOR atom_getint(m2++));
  #else
!     t_float f = atom_getfloat(m1++) MTXBIN_GENERIC__OPERATOR atom_getfloat(m2++);
  #endif
      SETFLOAT(m, f);
      m++;
--- 112,120 ----
    while(n--){
  #ifdef MTXBIN_GENERIC__INTEGEROP
!     t_float f = (t_float)(atom_getint(m1) MTXBIN_GENERIC__OPERATOR atom_getint(m2));
  #else
!     t_float f = atom_getfloat(m1) MTXBIN_GENERIC__OPERATOR atom_getfloat(m2);
  #endif
+     m1++; m2++;
      SETFLOAT(m, f);
      m++;
***************
*** 127,133 ****
    t_atom *ap, *ap2=m2->atombuffer+2;
    int row2, col2, n;
-   t_int i=(t_int)f;
  
!   if (!m2->atombuffer){ post("AND with what ?");            return; }
  
    row2=atom_getint(m2->atombuffer);
--- 128,140 ----
    t_atom *ap, *ap2=m2->atombuffer+2;
    int row2, col2, n;
  
! #ifdef MTXBIN_GENERIC__INTEGEROP
!   t_int offset=(t_int)f;
! #else
!   t_float offset=f;
! #endif
! 
! 
!   if (!m2->atombuffer){ post( MTXBIN_SHORTNAME ": operate on what ?");            return; }
  
    row2=atom_getint(m2->atombuffer);
***************
*** 140,148 ****
    while(n--){
  #ifdef MTXBIN_GENERIC__INTEGEROP
!     SETFLOAT(ap, i MTXBIN_GENERIC__OPERATOR atom_getint(ap2++));
  #else
!     SETFLOAT(ap, i MTXBIN_GENERIC__OPERATOR atom_getfloat(ap2++));
  #endif
!     ap++;
    }
    
--- 147,155 ----
    while(n--){
  #ifdef MTXBIN_GENERIC__INTEGEROP
!     ap->a_w.w_float = offset MTXBIN_GENERIC__OPERATOR atom_getint(ap2);
  #else
!     ap->a_w.w_float = offset MTXBIN_GENERIC__OPERATOR atom_getfloat(ap2);
  #endif
!     ap++; ap2++;
    }
    

Index: mtx_add.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_add.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** mtx_add.c	11 May 2005 13:05:28 -0000	1.1
--- mtx_add.c	17 Oct 2005 18:55:30 -0000	1.2
***************
*** 2,6 ****
   *  iemmatrix
   *
!  *  objects for manipulating simple matrices
   *  mostly refering to matlab/octave matrix functions
   *
--- 2,6 ----
   *  iemmatrix
   *
!  *  objects fand manipulating simple matrices
   *  mostly refering to matlab/octave matrix functions
   *
***************
*** 8,158 ****
   * IEM, Graz, Austria
   *
!  * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
   *
   */
- #include "iemmatrix.h"
- 
- /*
-   mtx_add
-   mtx_+
- */
  
! /* mtx_add */
! static t_class *mtx_add_class, *mtx_addscalar_class;
! 
! static void mtx_addscalar_matrix(t_mtx_binscalar *x, t_symbol *s, int argc, t_atom *argv)
! {
!   int n=argc-2;
!   int row=atom_getfloat(argv), col=atom_getfloat(argv+1);
!   
!   t_float offset=x->f;
!   t_atom *buf;
!   t_atom *ap=argv+2;
! 
!   if(argc<2){post("mtx_add: crippled matrix");return; }
!   adjustsize(&x->m, row, col);
! 
!   buf=x->m.atombuffer+2;
! 
!   while(n--){
!     buf->a_type = A_FLOAT;
!     buf++->a_w.w_float = atom_getfloat(ap++) + offset;
!   }
!   outlet_anything(x->x_obj.ob_outlet, gensym("matrix"), argc, x->m.atombuffer);
! }
! static void mtx_addscalar_list(t_mtx_binscalar *x, t_symbol *s, int argc, t_atom *argv)
! {
!   int n=argc;
!   t_atom *m;
!   t_float offset = x->f;
!   adjustsize(&x->m, 1, argc);
!   m = x->m.atombuffer;
! 
!   while(n--){
!     m->a_type = A_FLOAT;
!     (m++)->a_w.w_float = atom_getfloat(argv++) + offset;
!   }
!   outlet_list(x->x_obj.ob_outlet, gensym("list"), argc, x->m.atombuffer);
! }
! 
! static void mtx_add_matrix(t_mtx_binmtx *x, t_symbol *s, int argc, t_atom *argv)
! {
!   int row=atom_getfloat(argv);
!   int col=atom_getfloat(argv+1);
!   t_atom *m;
!   t_atom *m1 = argv+2;
!   t_atom *m2 = x->m2.atombuffer+2;
!   int n = argc-2;
! 
!   if (argc<2){    post("mtx_add: crippled matrix");    return;  }
!   if ((col<1)||(row<1)) {    post("mtx_add: invalid dimensions");    return;  }
!   if (col*row>argc-2){    post("sparse matrix not yet supported : use \"mtx_check\"");    return;  }
! 
!   if (!(x->m2.col*x->m2.row)) {
!     outlet_anything(x->x_obj.ob_outlet, gensym("matrix"), argc, argv);
!     return;
!   }
! 
!   if ((col!=x->m2.col)||(row!=x->m2.row)){ 
!     post("mtx_add: matrix dimensions do not match");
!     /* LATER SOLVE THIS */    
!     return;
!   }
!   adjustsize(&x->m, row, col);
!   m = x->m.atombuffer+2;
! 
!   while(n--){
!     t_float f = atom_getfloat(m1++)+atom_getfloat(m2++);
!     SETFLOAT(m, f);
!     m++;
!   }
!   
!   outlet_anything(x->x_obj.ob_outlet, gensym("matrix"), argc, x->m.atombuffer);
! }
! static void mtx_add_float(t_mtx_binmtx *x, t_float f)
! {
!   t_matrix *m=&x->m, *m2=&x->m2;
!   t_atom *ap, *ap2=m2->atombuffer+2;
!   int row2, col2, n;
! 
!   if (!m2->atombuffer){ post("mulitply with what ?");            return; }
! 
!   row2=atom_getfloat(m2->atombuffer);
!   col2=atom_getfloat(m2->atombuffer+1);
!   adjustsize(m, row2, col2);
!   ap=m->atombuffer+2;
! 
!   n=row2*col2;
! 
!   while(n--){
!     SETFLOAT(ap, f+atom_getfloat(ap2++));
!     ap++;
!   }
!   
!   outlet_anything(x->x_obj.ob_outlet, gensym("matrix"), m->row*m->col+2, m->atombuffer);
! }
! static void *mtx_add_new(t_symbol *s, int argc, t_atom *argv)
! {
!   if (argc>1) post("mtx_add : extra arguments ignored");
!   if (argc) {
!     t_mtx_binscalar *x = (t_mtx_binscalar *)pd_new(mtx_addscalar_class);
!     floatinlet_new(&x->x_obj, &x->f);
!     x->f = atom_getfloatarg(0, argc, argv);
!     outlet_new(&x->x_obj, 0);
!     return(x);
!   } else {
!     t_mtx_binmtx *x = (t_mtx_binmtx *)pd_new(mtx_add_class);
!     inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("matrix"), gensym(""));
!     outlet_new(&x->x_obj, 0);
!     x->m.col = x->m.row =  x->m2.col = x->m2.row = 0;
!     x->m.atombuffer = x->m2.atombuffer = 0;
!     return(x);
!   }
! }
! 
! void mtx_add_setup(void)
! {
!   mtx_add_class = class_new(gensym("mtx_add"), (t_newmethod)mtx_add_new, (t_method)mtx_binmtx_free,
!                             sizeof(t_mtx_binmtx), 0, A_GIMME, 0);
!   class_addcreator((t_newmethod)mtx_add_new, gensym("mtx_+"), A_GIMME,0);
!   class_addmethod(mtx_add_class, (t_method)mtx_add_matrix, gensym("matrix"), A_GIMME, 0);
!   class_addmethod(mtx_add_class, (t_method)mtx_bin_matrix2, gensym(""), A_GIMME, 0);
!   class_addfloat (mtx_add_class, mtx_add_float);
!   class_addbang  (mtx_add_class, mtx_binmtx_bang);
! 
!   mtx_addscalar_class = class_new(gensym("mtx_add"), 0, (t_method)mtx_binscalar_free,
!                                   sizeof(t_mtx_binscalar), 0, 0);
!   class_addcreator(0, gensym("mtx_+"), 0, 0);
!   class_addmethod(mtx_addscalar_class, (t_method)mtx_addscalar_matrix, gensym("matrix"), A_GIMME, 0);
!   class_addlist  (mtx_addscalar_class, mtx_addscalar_list);
!   class_addbang  (mtx_addscalar_class, mtx_binscalar_bang);
  
!   class_sethelpsymbol(mtx_add_class, gensym("iemmatrix/mtx_binops"));
!   class_sethelpsymbol(mtx_addscalar_class, gensym("iemmatrix/mtx_binops"));
! }
  
! void iemtx_add_setup(void)
! {
!   mtx_add_setup();
! }
--- 8,23 ----
   * IEM, Graz, Austria
   *
!  * Fand infandmation on usage and redistribution, and fand a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
   *
   */
  
! /* name of the object and the classes */
! #define MTXBIN_GENERIC__NAME mtx_add
! /* operator; also used for abbreviation of object */
! #define MTXBIN_GENERIC__OPERATOR +
  
! /* the operator operates on integers instead of floats */
! /* #define MTXBIN_GENERIC__INTEGEROP */
  
! #include "mtx_binop_generic.h"





More information about the Pd-cvs mailing list