Update of /cvsroot/pure-data/externals/iem/iemmatrix/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11579
Modified Files: mtx_colon.c mtx_find.c mtx_minmax.c mtx_reverse.c Log Message: added symbolic creation arguments or mode parameters "row" "col" ["mtx"] to below described externals. now the operation mode of these externs can be selected by arbitrary ordered creation argumens containing above symbols, or by a "mode col" etc. command. This makes it easier/more intuitive to patch without using help patches.
Index: mtx_reverse.c =================================================================== RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_reverse.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mtx_reverse.c 19 Sep 2005 14:47:49 -0000 1.1 --- mtx_reverse.c 26 Sep 2005 07:57:02 -0000 1.2 *************** *** 17,20 **** --- 17,23 ----
static t_class *mtx_reverse_class; + static t_symbol *row_sym; + static t_symbol *col_sym; + static t_symbol *col_sym2;
typedef struct _MTXreverse_ MTXreverse; *************** *** 23,27 **** t_object x_obj; int size; ! int reverse_dimension;
t_outlet *list_outlet; --- 26,31 ---- t_object x_obj; int size; ! //int reverse_dimension; ! t_symbol *reverse_mode;
t_outlet *list_outlet; *************** *** 36,40 **** freebytes (mtx_reverse_obj->list_out, sizeof(t_atom)*(mtx_reverse_obj->size+2)); } ! static void mTXSetreverseDimension (MTXreverse *mtx_reverse_obj, t_float c_dim) { --- 40,48 ---- freebytes (mtx_reverse_obj->list_out, sizeof(t_atom)*(mtx_reverse_obj->size+2)); } ! static void mTXSetReverseMode (MTXreverse *mtx_reverse_obj, t_symbol *c_mode) ! { ! mtx_reverse_obj->reverse_mode = c_mode; ! } ! /* static void mTXSetreverseDimension (MTXreverse *mtx_reverse_obj, t_float c_dim) { *************** *** 44,52 **** mtx_reverse_obj->reverse_dimension = dimension; }
static void *newMTXreverse (t_symbol *s, int argc, t_atom *argv) { MTXreverse *mtx_reverse_obj = (MTXreverse *) pd_new (mtx_reverse_class); ! int c_dim = 0;
mtx_reverse_obj->reverse_dimension = c_dim; --- 52,67 ---- mtx_reverse_obj->reverse_dimension = dimension; } + */ +
static void *newMTXreverse (t_symbol *s, int argc, t_atom *argv) { MTXreverse *mtx_reverse_obj = (MTXreverse *) pd_new (mtx_reverse_class); ! mTXSetReverseMode (mtx_reverse_obj, gensym(":")); ! switch ((argc>1)?1:argc) { ! case 1: ! mTXSetReverseMode (mtx_reverse_obj, atom_getsymbol (argv)); ! } ! /*int c_dim = 0;
mtx_reverse_obj->reverse_dimension = c_dim; *************** *** 56,60 **** } mTXSetreverseDimension (mtx_reverse_obj, (t_float) c_dim); ! mtx_reverse_obj->list_outlet = outlet_new (&mtx_reverse_obj->x_obj, gensym("matrix")); return ((void *) mtx_reverse_obj); --- 71,75 ---- } mTXSetreverseDimension (mtx_reverse_obj, (t_float) c_dim); ! */ mtx_reverse_obj->list_outlet = outlet_new (&mtx_reverse_obj->x_obj, gensym("matrix")); return ((void *) mtx_reverse_obj); *************** *** 135,138 **** --- 150,167 ---- list_out += 2; copyList (size, argv, list_out); + + if ((mtx_reverse_obj->reverse_mode == col_sym)|| + (mtx_reverse_obj->reverse_mode == col_sym2)) { + for (count = columns; count--; list_out++) + reverseListStep (size, columns, list_out); + } + else if (mtx_reverse_obj->reverse_mode == row_sym) { + for (count = rows; count--; list_out += columns) + reverseList (columns, list_out); + } + else + reverseList (size, list_out); + + /* switch (mtx_reverse_obj->reverse_dimension) { case 2: *************** *** 148,151 **** --- 177,181 ---- break; } + */ list_out = mtx_reverse_obj->list_out;
*************** *** 168,173 **** class_addbang (mtx_reverse_class, (t_method) mTXreverseBang); class_addmethod (mtx_reverse_class, (t_method) mTXreverseMatrix, gensym("matrix"), A_GIMME,0); ! class_addmethod (mtx_reverse_class, (t_method) mTXSetreverseDimension, gensym("dimension"), A_DEFFLOAT,0); class_sethelpsymbol (mtx_reverse_class, gensym("iemmatrix/mtx_reverse")); }
--- 198,207 ---- class_addbang (mtx_reverse_class, (t_method) mTXreverseBang); class_addmethod (mtx_reverse_class, (t_method) mTXreverseMatrix, gensym("matrix"), A_GIMME,0); ! // class_addmethod (mtx_reverse_class, (t_method) mTXSetreverseDimension, gensym("dimension"), A_DEFFLOAT,0); ! class_addmethod (mtx_reverse_class, (t_method) mTXSetReverseMode, gensym("mode"), A_DEFSYMBOL,0); class_sethelpsymbol (mtx_reverse_class, gensym("iemmatrix/mtx_reverse")); + row_sym = gensym("row"); + col_sym = gensym("col"); + col_sym2 = gensym("column"); }
Index: mtx_colon.c =================================================================== RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_colon.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mtx_colon.c 19 Sep 2005 14:47:49 -0000 1.1 --- mtx_colon.c 26 Sep 2005 07:57:02 -0000 1.2 *************** *** 17,20 **** --- 17,22 ----
static t_class *mtx_colon_class; + static t_symbol *col_sym; + static t_symbol *col_sym2;
typedef struct _MTXColon_ MTXColon; *************** *** 23,26 **** --- 25,29 ---- t_object x_obj; int size; + t_symbol *colon_mode;
t_atom *list_out; *************** *** 34,37 **** --- 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) { *************** *** 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) --- 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) *************** *** 105,111 **** --- 120,129 ---- CLASS_DEFAULT, A_GIMME, 0); class_addbang (mtx_colon_class, (t_method) mTXColonBang); + class_addmethod (mtx_colon_class, (t_method) mTXSetColonMode, gensym("mode"), A_DEFSYMBOL, 0); class_addlist (mtx_colon_class, (t_method) mTXColonList); class_addcreator ((t_newmethod) newMTXColon, gensym("mtx_:"), A_GIMME, 0); class_sethelpsymbol (mtx_colon_class, gensym("iemmatrix/mtx_colon")); + col_sym = gensym("col"); + col_sym2 = gensym("column"); }
Index: mtx_find.c =================================================================== RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_find.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** mtx_find.c 19 Sep 2005 14:47:49 -0000 1.1 --- mtx_find.c 26 Sep 2005 07:57:02 -0000 1.2 *************** *** 17,20 **** --- 17,25 ----
static t_class *mtx_find_class; + static t_symbol *row_sym; + static t_symbol *col_sym; + static t_symbol *col_sym2; + static t_symbol *mtx_sym; + static t_symbol *mtx_sym2;
typedef struct _MTXfind_ MTXfind; *************** *** 24,28 **** int size; int outsize; ! int find_dimension; int find_direction;
--- 29,34 ---- int size; int outsize; ! //int find_dimension; ! t_symbol *find_mode; int find_direction;
*************** *** 46,50 **** mtx_find_obj->find_direction = direction; } ! static void mTXSetFindDimension (MTXfind *mtx_find_obj, t_float c_dim) { --- 52,56 ---- mtx_find_obj->find_direction = direction; } ! /* static void mTXSetFindDimension (MTXfind *mtx_find_obj, t_float c_dim) { *************** *** 54,64 **** mtx_find_obj->find_dimension = dimension; }
static void *newMTXFind (t_symbol *s, int argc, t_atom *argv) { MTXfind *mtx_find_obj = (MTXfind *) pd_new (mtx_find_class); ! int c_dim = 0; ! int c_dir = 1;
switch ((argc>2)?2:argc) { case 2: --- 60,97 ---- mtx_find_obj->find_dimension = dimension; } + */ + static void mTXSetFindMode (MTXfind *mtx_find_obj, t_symbol *c_dim) + { + mtx_find_obj->find_mode = c_dim; + }
static void *newMTXFind (t_symbol *s, int argc, t_atom *argv) { MTXfind *mtx_find_obj = (MTXfind *) pd_new (mtx_find_class); ! // int c_dim = 0; ! // int c_dir = 1;
+ mTXSetFindMode (mtx_find_obj, gensym(":")); + mTXSetFindDirection (mtx_find_obj, 1); + if (argc>=1) { + if (argv[0].a_type == A_SYMBOL) { + mTXSetFindMode (mtx_find_obj, atom_getsymbol (argv)); + if (argc>=2) + if (argv[1].a_type != A_SYMBOL) + mTXSetFindDirection (mtx_find_obj, atom_getfloat (argv+1)); + else + post("mtx_find: 2nd arg ignored. supposed to be float"); + } + else { + mTXSetFindDirection (mtx_find_obj, atom_getfloat (argv)); + if (argc>=2) { + if (argv[1].a_type == A_SYMBOL) + mTXSetFindMode (mtx_find_obj, atom_getsymbol (argv+1)); + else + post("mtx_find: 2nd arg ignored. supposed to be symbolic, e.g. "row", "col", ":", "mtx""); + } + } + } + /* switch ((argc>2)?2:argc) { case 2: *************** *** 69,72 **** --- 102,106 ---- mTXSetFindDimension (mtx_find_obj, (t_float) c_dim); mTXSetFindDirection (mtx_find_obj, (t_float) c_dir); + */
mtx_find_obj->list_outlet = outlet_new (&mtx_find_obj->x_obj, gensym("matrix")); *************** *** 230,233 **** --- 264,295 ---- //copyList (size, argv, list_out); rows_out = 1; + if (mtx_find_obj->find_mode == row_sym) { + if (mtx_find_obj->find_direction == -1) + findLastNonZeroRow (rows, columns, list_in, list_out); + else + findFirstNonZeroRow (rows, columns, list_in, list_out); + rows_out = rows; + columns_out = 1; + } + else if ((mtx_find_obj->find_mode == col_sym)|| + (mtx_find_obj->find_mode == col_sym2)) { + if (mtx_find_obj->find_direction == -1) + findLastNonZeroColumn (rows, columns, list_in, list_out); + else + findFirstNonZeroColumn (rows, columns, list_in, list_out); + columns_out = columns; + rows_out = 1; + } + else if ((mtx_find_obj->find_mode == mtx_sym)|| + (mtx_find_obj->find_mode == mtx_sym2)) { + findReplaceNonZerosWithIndex (size, list_in, list_out); + rows_out = rows; + columns_out = columns; + } + else { + columns_out = findAllNonZeros (size, list_in, list_out); + rows_out = 1; + } + /* switch (mtx_find_obj->find_dimension) { case 0: *************** *** 257,260 **** --- 319,323 ---- break; } + */ mtx_find_obj->outsize = columns_out * rows_out; list_out = mtx_find_obj->list_out; *************** *** 277,283 **** class_addbang (mtx_find_class, (t_method) mTXFindBang); class_addmethod (mtx_find_class, (t_method) mTXFindMatrix, gensym("matrix"), A_GIMME,0); ! class_addmethod (mtx_find_class, (t_method) mTXSetFindDimension, gensym("dimension"), A_DEFFLOAT,0); class_addmethod (mtx_find_class, (t_method) mTXSetFindDirection, gensym("direction"), A_DEFFLOAT,0); class_sethelpsymbol (mtx_find_class, gensym("iemmatrix/mtx_find")); }
--- 340,352 ---- class_addbang (mtx_find_class, (t_method) mTXFindBang); class_addmethod (mtx_find_class, (t_method) mTXFindMatrix, gensym("matrix"), A_GIMME,0); ! // class_addmethod (mtx_find_class, (t_method) mTXSetFindDimension, gensym("dimension"), A_DEFFLOAT,0); ! class_addmethod (mtx_find_class, (t_method) mTXSetFindMode, gensym("mode"), A_DEFSYMBOL,0); class_addmethod (mtx_find_class, (t_method) mTXSetFindDirection, gensym("direction"), A_DEFFLOAT,0); class_sethelpsymbol (mtx_find_class, gensym("iemmatrix/mtx_find")); + row_sym = gensym("row"); + col_sym = gensym("col"); + col_sym2 = gensym("columns"); + mtx_sym = gensym("mtx"); + mtx_sym2 = gensym ("matrix"); }
Index: mtx_minmax.c =================================================================== RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_minmax.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** mtx_minmax.c 20 Sep 2005 13:26:48 -0000 1.2 --- mtx_minmax.c 26 Sep 2005 07:57:02 -0000 1.3 *************** *** 50,61 **** { MTXminmax *mtx_minmax_obj = (MTXminmax *) pd_new (mtx_minmax_class); ! t_symbol *c_mode = 0;
switch ((argc>1)?1:argc) { case 1: ! c_mode = atom_getsymbol (argv); } mtx_minmax_obj->operator_minimum = 1; - mTXSetMinMaxMode (mtx_minmax_obj, c_mode);
mtx_minmax_obj->list_outlet = outlet_new (&mtx_minmax_obj->x_obj, gensym("matrix")); --- 50,60 ---- { MTXminmax *mtx_minmax_obj = (MTXminmax *) pd_new (mtx_minmax_class); ! mTXSetMinMaxMode (mtx_minmax_obj, gensym(":"));
switch ((argc>1)?1:argc) { case 1: ! mTXSetMinMaxMode (mtx_minmax_obj, atom_getsymbol (argv)); } mtx_minmax_obj->operator_minimum = 1;
mtx_minmax_obj->list_outlet = outlet_new (&mtx_minmax_obj->x_obj, gensym("matrix")); *************** *** 65,76 **** { MTXminmax *mtx_minmax_obj = (MTXminmax *) pd_new (mtx_minmax_class); ! t_symbol *c_mode = 0;
switch ((argc>1)?1:argc) { case 1: ! c_mode = atom_getsymbol (argv); } mtx_minmax_obj->operator_minimum = 0; - mTXSetMinMaxMode (mtx_minmax_obj, c_mode);
mtx_minmax_obj->list_outlet = outlet_new (&mtx_minmax_obj->x_obj, gensym("matrix")); --- 64,74 ---- { MTXminmax *mtx_minmax_obj = (MTXminmax *) pd_new (mtx_minmax_class); ! mTXSetMinMaxMode (mtx_minmax_obj, gensym(":"));
switch ((argc>1)?1:argc) { case 1: ! mTXSetMinMaxMode (mtx_minmax_obj, atom_getsymbol (argv)); } mtx_minmax_obj->operator_minimum = 0;
mtx_minmax_obj->list_outlet = outlet_new (&mtx_minmax_obj->x_obj, gensym("matrix"));