Update of /cvsroot/pure-data/externals/iem/iemmatrix/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6228
Modified Files: mtx_fill.c Log Message: corrections to mtx_fill: passive inlet matrix can pass through if invalid indices/ empty indexing vectors are defined. this is useful when combining with mtx_find and the result of mtx_find is empty or undefined (=0 indices).
Index: mtx_fill.c =================================================================== RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_fill.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** mtx_fill.c 9 Aug 2006 19:26:19 -0000 1.8 --- mtx_fill.c 14 Aug 2006 12:43:53 -0000 1.9 *************** *** 18,22 **** typedef enum { FILL_SUBMATRIX, ! FILL_INDEXED_ELEMENTS } FillStyle;
--- 18,23 ---- typedef enum { FILL_SUBMATRIX, ! FILL_INDEXED_ELEMENTS, ! DONT_FILL_JUST_PASS } FillStyle;
*************** *** 36,39 **** --- 37,41 ---- int *index; int index_size; + int num_idcs_used; int max_index;
*************** *** 42,46 **** t_outlet *list_outlet;
- t_atom *list_in; t_atom *list_out; }; --- 44,47 ---- *************** *** 48,53 **** static void deleteMTXFill (MTXfill *mtx_fill_obj) { - if (mtx_fill_obj->list_in) - freebytes (mtx_fill_obj->list_in, sizeof(t_atom)*(mtx_fill_obj->size+2)); if (mtx_fill_obj->list_out) freebytes (mtx_fill_obj->list_out, sizeof(t_atom)*(mtx_fill_obj->size+2)); --- 49,52 ---- *************** *** 107,111 **** // size check if (!size) { ! post("mtx_fill: invalid dimensions/invalid start index"); return; } --- 106,110 ---- // size check if (!size) { ! mtx_fill_obj->fill_type = DONT_FILL_JUST_PASS; return; } *************** *** 114,117 **** --- 113,117 ---- if ((rows<1) || (columns<1)){ post("mtx_fill: row and column indices must be >0"); + mtx_fill_obj->fill_type = DONT_FILL_JUST_PASS; return; } *************** *** 121,125 **** } else if (list_size<size) { ! post("mtx_fill: sparse matrix not yet supported: use "mtx_check""); return; } --- 121,125 ---- } else if (list_size<size) { ! mtx_fill_obj->fill_type = DONT_FILL_JUST_PASS; return; } *************** *** 133,151 **** sizeof (t_atom) * (size + 2)); mtx_fill_obj->index_size = size; } mtx_fill_obj->max_index = copyNonZeroAtomsToIntegerArrayMax (&size, argv++, index); ! if (!size) { ! post("mtx_fill: indexing matrix contains zero-values only!!!"); ! return; ! } ! if (size != mtx_fill_obj->index_size) { ! index = (int *) resizebytes (index, ! sizeof (int) * (mtx_fill_obj->index_size+2), ! sizeof (t_atom) * (size + 2)); ! mtx_fill_obj->index_size = size; ! } ! mtx_fill_obj->fill_type = FILL_INDEXED_ELEMENTS; ! mtx_fill_obj->index = index; } } --- 133,145 ---- sizeof (t_atom) * (size + 2)); mtx_fill_obj->index_size = size; + mtx_fill_obj->index = index; } mtx_fill_obj->max_index = copyNonZeroAtomsToIntegerArrayMax (&size, argv++, index); ! mtx_fill_obj->num_idcs_used = size; ! if (!size) ! mtx_fill_obj->fill_type = DONT_FILL_JUST_PASS; ! else ! mtx_fill_obj->fill_type = FILL_INDEXED_ELEMENTS; } } *************** *** 155,161 **** MTXfill *mtx_fill_obj = (MTXfill *) pd_new (mtx_fill_class);
mtx_fill_obj->fill_startrow = 1; mtx_fill_obj->fill_startcol = 1; ! mtx_fill_obj->fill_type = FILL_SUBMATRIX; error("[mtx_fill]: this object _might_ change in the future!"); if (argc) { --- 149,156 ---- MTXfill *mtx_fill_obj = (MTXfill *) pd_new (mtx_fill_class);
+ mtx_fill_obj->size = 0; mtx_fill_obj->fill_startrow = 1; mtx_fill_obj->fill_startcol = 1; ! mtx_fill_obj->fill_type = DONT_FILL_JUST_PASS; error("[mtx_fill]: this object _might_ change in the future!"); if (argc) { *************** *** 175,183 **** 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_in = mtx_fill_obj->list_in; t_atom *list_out = mtx_fill_obj->list_out;
--- 170,177 ---- int argc, t_atom *argv) { ! int rows = atom_getint (argv); ! int columns = atom_getint (argv+1); int size = rows * columns; int list_size = argc - 2; t_atom *list_out = mtx_fill_obj->list_out;
*************** *** 199,208 **** sizeof (t_atom) * (mtx_fill_obj->size+2), sizeof (t_atom) * (size + 2)); - if (!list_in) - list_in = (t_atom *) getbytes (sizeof (t_atom) * (size + 2)); - else - list_in = (t_atom *) resizebytes (list_in, - sizeof (t_atom) * (mtx_fill_obj->size+2), - sizeof (t_atom) * (size + 2)); }
--- 193,196 ---- *************** *** 211,217 **** mtx_fill_obj->rows = rows; mtx_fill_obj->list_out = list_out; - mtx_fill_obj->list_in = list_in;
! copyList (size, argv, list_in); }
--- 199,204 ---- mtx_fill_obj->rows = rows; mtx_fill_obj->list_out = list_out;
! memcpy(list_out,argv,argc*sizeof(t_atom)); }
*************** *** 233,264 **** { t_atom *list_out = mtx_fill_obj->list_out; - t_atom *list_in = mtx_fill_obj->list_in; int rows = mtx_fill_obj->rows; int columns = mtx_fill_obj->columns; - if (mtx_fill_obj->fill_type == FILL_INDEXED_ELEMENTS) { - if (mtx_fill_obj->max_index > mtx_fill_obj->size) { - post("mtx_fill: index matrix index exceeds matrix borders"); - return; - } - else if (mtx_fill_obj->size == 0) { - post("mtx_fill: no matrix defined for filling"); - return; - }
! // main part ! list_out += 2; ! copyList (mtx_fill_obj->size, list_in, list_out); ! ! writeFloatIndexedIntoMatrix (mtx_fill_obj->index_size, ! mtx_fill_obj->index, f,list_out); ! list_out = mtx_fill_obj->list_out; ! SETSYMBOL(list_out, gensym("matrix")); ! SETFLOAT(list_out, rows); ! SETFLOAT(&list_out[1], columns); ! outlet_anything(mtx_fill_obj->list_outlet, gensym("matrix"), ! mtx_fill_obj->size+2, list_out); } - else - post("mtx_fill: scalar fill for submatrices not supported yet"); }
--- 220,246 ---- { t_atom *list_out = mtx_fill_obj->list_out; int rows = mtx_fill_obj->rows; int columns = mtx_fill_obj->columns;
! switch (mtx_fill_obj->fill_type) { ! case FILL_SUBMATRIX: ! post("mtx_fill: scalar fill for submatrices not supported yet"); ! return; ! break; ! case FILL_INDEXED_ELEMENTS: ! if (mtx_fill_obj->max_index > mtx_fill_obj->size) { ! post("mtx_fill: index matrix index exceeds matrix borders"); ! return; ! } ! if (mtx_fill_obj->size == 0) { ! post("mtx_fill: no matrix defined for filling"); ! return; ! } ! // main part ! writeFloatIndexedIntoMatrix (mtx_fill_obj->num_idcs_used, ! mtx_fill_obj->index, f,list_out+2); ! default: ! mTXFillBang(mtx_fill_obj); } }
*************** *** 274,282 **** int columns = mtx_fill_obj->columns; t_atom *fill_mtx = argv; - t_atom *list_in = mtx_fill_obj->list_in; t_atom *list_out = mtx_fill_obj->list_out; int stopcol = mtx_fill_obj->fill_startcol+fill_columns-1; int stoprow = mtx_fill_obj->fill_startrow+fill_rows-1;
// size check if (!list_size) { --- 256,268 ---- int columns = mtx_fill_obj->columns; t_atom *fill_mtx = argv; t_atom *list_out = mtx_fill_obj->list_out; int stopcol = mtx_fill_obj->fill_startcol+fill_columns-1; int stoprow = mtx_fill_obj->fill_startrow+fill_rows-1;
+ if (mtx_fill_obj->fill_type == DONT_FILL_JUST_PASS) { + mTXFillBang(mtx_fill_obj); + return; + } + // size check if (!list_size) { *************** *** 297,301 **** break; case FILL_INDEXED_ELEMENTS: ! if (list_size < mtx_fill_obj->index_size) { post("mtx_fill: fill matrix smaller than indexing vector"); return; --- 283,287 ---- break; case FILL_INDEXED_ELEMENTS: ! if (list_size < mtx_fill_obj->num_idcs_used) { post("mtx_fill: fill matrix smaller than indexing vector"); return; *************** *** 312,320 **** }
- // main part - list_out += 2; - copyList (mtx_fill_obj->size, list_in, list_out); - switch (mtx_fill_obj->fill_type) { case FILL_SUBMATRIX: --- 298,302 ---- *************** *** 322,338 **** mtx_fill_obj->fill_startcol-1; writeFillMatrixIntoList (fill_rows, fill_columns, ! columns, fill_mtx, list_out); break; case FILL_INDEXED_ELEMENTS: ! writeIndexedValuesIntoMatrix (mtx_fill_obj->index_size, ! mtx_fill_obj->index, fill_mtx,list_out); break; } ! list_out = mtx_fill_obj->list_out; ! SETSYMBOL(list_out, gensym("matrix")); ! SETFLOAT(list_out, rows); ! SETFLOAT(&list_out[1], columns); ! outlet_anything(mtx_fill_obj->list_outlet, gensym("matrix"), ! mtx_fill_obj->size+2, list_out); }
--- 304,315 ---- mtx_fill_obj->fill_startcol-1; writeFillMatrixIntoList (fill_rows, fill_columns, ! columns, fill_mtx, list_out+2); break; case FILL_INDEXED_ELEMENTS: ! writeIndexedValuesIntoMatrix (mtx_fill_obj->num_idcs_used, ! mtx_fill_obj->index, fill_mtx,list_out+2); break; } ! mTXFillBang(mtx_fill_obj); }