Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5917
Modified Files: Tag: desiredata builtins.c Log Message: merged both [select] classes together
Index: builtins.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/builtins.c,v retrieving revision 1.1.2.41 retrieving revision 1.1.2.42 diff -C2 -d -r1.1.2.41 -r1.1.2.42 *** builtins.c 20 Jul 2007 07:28:59 -0000 1.1.2.41 --- builtins.c 20 Jul 2007 08:10:55 -0000 1.1.2.42 *************** *** 1295,1314 **** /* -------------------------- select ------------------------------ */
! static t_class *sel1_class; ! struct t_sel1 : t_object { ! t_atom atom; ! }; ! static void sel1_float(t_sel1 *x, t_float f) { ! if (x->atom.a_type==A_FLOAT && f == x->atom.a_float) outlet_bang(x->out(0)); else outlet_float(x->out(1),f); ! } ! static void sel1_symbol(t_sel1 *x, t_symbol *s) { ! if (x->atom.a_type==A_SYMBOL && s == x->atom.a_symbol) outlet_bang(x->out(0)); else outlet_symbol(x->out(1),s); ! } ! static t_class *sel2_class; struct t_selectelement { t_atom a; t_outlet *out; }; ! struct t_sel2 : t_object { t_int nelement; t_selectelement *vec; --- 1295,1304 ---- /* -------------------------- select ------------------------------ */
! static t_class *select_class; struct t_selectelement { t_atom a; t_outlet *out; }; ! struct t_select : t_object { t_int nelement; t_selectelement *vec; *************** *** 1317,1363 **** #define select_each(e,x) for (t_selectelement *e = x->vec;e;e=0) for (int nelement = x->nelement; nelement--; e++)
! static void sel2_float(t_sel2 *x, t_float f) { ! select_each(e,x) if (e->a.a_type==A_FLOAT ) if (e->a.a_float==f) {outlet_bang(e->out); return;} outlet_float(x->rejectout, f); } ! static void sel2_symbol(t_sel2 *x, t_symbol *s) { ! select_each(e,x) if (e->a.a_type==A_SYMBOL) if (e->a.a_symbol==s) {outlet_bang(e->out); return;} outlet_symbol(x->rejectout, s); } ! static void sel2_free(t_sel2 *x) {free(x->vec);} static void *select_new(t_symbol *s, int argc, t_atom *argv) { if (argc == 0) { - t_atom a; argc = 1; SETFLOAT(&a, 0); ! argv = &a; } ! if (argc == 1) { ! t_sel1 *x = (t_sel1 *)pd_new(sel1_class); ! x->atom = *argv; ! outlet_new(x, &s_bang); ! if (argv->a_type == A_FLOAT) {floatinlet_new(x, &x->atom.a_float ); outlet_new(x, &s_float);} ! else {symbolinlet_new(x, &x->atom.a_symbol); outlet_new(x, &s_symbol);} ! return x; ! } else { ! t_sel2 *x = (t_sel2 *)pd_new(sel2_class); ! x->nelement = argc; ! x->vec = (t_selectelement *)getbytes(argc * sizeof(*x->vec)); ! t_selectelement *e = x->vec; ! for (int n = 0; n < argc; n++, e++) { ! e->out = outlet_new(x, &s_bang); ! e->a = argv[n]; ! } ! x->rejectout = outlet_new(x, &s_float); ! return x; } } void select_setup() { ! sel1_class = class_new2("select",0,0,sizeof(t_sel1),0,""); ! class_addfloat(sel1_class, sel1_float); ! class_addsymbol(sel1_class, sel1_symbol); ! sel2_class = class_new2("select",0,sel2_free,sizeof(t_sel2),0,""); ! class_addfloat(sel2_class, sel2_float); ! class_addsymbol(sel2_class, sel2_symbol); class_addcreator2("select",select_new,"*"); class_addcreator2("sel", select_new,"*"); --- 1307,1341 ---- #define select_each(e,x) for (t_selectelement *e = x->vec;e;e=0) for (int nelement = x->nelement; nelement--; e++)
! static void select_float(t_select *x, t_float f) { ! select_each(e,x) if (e->a.a_type==A_FLOAT && e->a.a_float==f) {outlet_bang(e->out); return;} outlet_float(x->rejectout, f); } ! static void select_symbol(t_select *x, t_symbol *s) { ! select_each(e,x) if (e->a.a_type==A_SYMBOL && e->a.a_symbol==s) {outlet_bang(e->out); return;} outlet_symbol(x->rejectout, s); } ! static void select_free(t_select *x) {free(x->vec);} static void *select_new(t_symbol *s, int argc, t_atom *argv) { + t_atom a; if (argc == 0) { argc = 1; SETFLOAT(&a, 0); ! argv = new t_atom[1]; } ! t_select *x = (t_select *)pd_new(select_class); ! x->nelement = argc; ! x->vec = (t_selectelement *)getbytes(argc * sizeof(*x->vec)); ! t_selectelement *e = x->vec; ! for (int n = 0; n < argc; n++, e++) { ! e->out = outlet_new(x, &s_bang); ! e->a = argv[n]; } + x->rejectout = outlet_new(x, &s_float); + return x; } void select_setup() { ! select_class = class_new2("select",0,select_free,sizeof(t_select),0,""); ! class_addfloat(select_class, select_float); ! class_addsymbol(select_class, select_symbol); class_addcreator2("select",select_new,"*"); class_addcreator2("sel", select_new,"*");