Skip to content
Snippets Groups Projects
Commit 0c4ff109 authored by pokergaming's avatar pokergaming
Browse files

* add "set" method to get, set, getsize, setsize, element, and append

parent 3a02243e
No related branches found
No related tags found
No related merge requests found
...@@ -414,14 +414,19 @@ static void *get_new(t_symbol *why, int argc, t_atom *argv) ...@@ -414,14 +414,19 @@ static void *get_new(t_symbol *why, int argc, t_atom *argv)
t_get *x = (t_get *)pd_new(get_class); t_get *x = (t_get *)pd_new(get_class);
int i; int i;
t_getvariable *sp; t_getvariable *sp;
int varcount;
x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv)); x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv));
if (argc) argc--, argv++; if (argc) argc--, argv++;
varcount = argc ? argc : 1; /* have at least one outlet */
x->x_variables x->x_variables
= (t_getvariable *)getbytes(argc * sizeof (*x->x_variables)); = (t_getvariable *)getbytes(varcount * sizeof (*x->x_variables));
x->x_nout = argc; x->x_nout = varcount;
for (i = 0, sp = x->x_variables; i < argc; i++, sp++) for (i = 0, sp = x->x_variables; i < varcount; i++, sp++)
{ {
sp->gv_sym = atom_getsymbolarg(i, argc, argv); if (argc)
sp->gv_sym = atom_getsymbolarg(i, argc, argv);
else
sp->gv_sym = &s_; /* just set field to empty symbol if no args */
sp->gv_outlet = outlet_new(&x->x_obj, 0); sp->gv_outlet = outlet_new(&x->x_obj, 0);
/* LATER connect with the template and set the outlet's type /* LATER connect with the template and set the outlet's type
correctly. We can't yet guarantee that the template is there correctly. We can't yet guarantee that the template is there
...@@ -430,6 +435,20 @@ static void *get_new(t_symbol *why, int argc, t_atom *argv) ...@@ -430,6 +435,20 @@ static void *get_new(t_symbol *why, int argc, t_atom *argv)
return (x); return (x);
} }
static void get_set(t_get *x, t_symbol *templatesym, t_symbol *field)
{
if (x->x_nout != 1)
{
pd_error(x, "get: cannot set multiple fields.");
return;
}
else
{
x->x_templatesym = canvas_makebindsym(templatesym);
x->x_variables->gv_sym = field;
}
}
static void get_pointer(t_get *x, t_gpointer *gp) static void get_pointer(t_get *x, t_gpointer *gp)
{ {
int nitems = x->x_nout, i; int nitems = x->x_nout, i;
...@@ -480,6 +499,8 @@ static void get_setup(void) ...@@ -480,6 +499,8 @@ static void get_setup(void)
get_class = class_new(gensym("get"), (t_newmethod)get_new, get_class = class_new(gensym("get"), (t_newmethod)get_new,
(t_method)get_free, sizeof(t_get), 0, A_GIMME, 0); (t_method)get_free, sizeof(t_get), 0, A_GIMME, 0);
class_addpointer(get_class, get_pointer); class_addpointer(get_class, get_pointer);
class_addmethod(get_class, (t_method)get_set, gensym("set"),
A_SYMBOL, A_SYMBOL, 0);
} }
/* ---------------------- set ----------------------------- */ /* ---------------------- set ----------------------------- */
...@@ -507,6 +528,7 @@ static void *set_new(t_symbol *why, int argc, t_atom *argv) ...@@ -507,6 +528,7 @@ static void *set_new(t_symbol *why, int argc, t_atom *argv)
t_set *x = (t_set *)pd_new(set_class); t_set *x = (t_set *)pd_new(set_class);
int i; int i;
t_setvariable *sp; t_setvariable *sp;
int varcount;
if (argc && (argv[0].a_type == A_SYMBOL) && if (argc && (argv[0].a_type == A_SYMBOL) &&
!strcmp(argv[0].a_w.w_symbol->s_name, "-symbol")) !strcmp(argv[0].a_w.w_symbol->s_name, "-symbol"))
{ {
...@@ -517,23 +539,24 @@ static void *set_new(t_symbol *why, int argc, t_atom *argv) ...@@ -517,23 +539,24 @@ static void *set_new(t_symbol *why, int argc, t_atom *argv)
else x->x_issymbol = 0; else x->x_issymbol = 0;
x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv)); x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv));
if (argc) argc--, argv++; if (argc) argc--, argv++;
varcount = argc ? argc : 1; /* have at least one variable */
x->x_variables x->x_variables
= (t_setvariable *)getbytes(argc * sizeof (*x->x_variables)); = (t_setvariable *)getbytes(varcount * sizeof (*x->x_variables));
x->x_nin = argc; x->x_nin = varcount;
if (argc) for (i = 0, sp = x->x_variables; i < varcount; i++, sp++)
{ {
for (i = 0, sp = x->x_variables; i < argc; i++, sp++) if (argc)
{
sp->gv_sym = atom_getsymbolarg(i, argc, argv); sp->gv_sym = atom_getsymbolarg(i, argc, argv);
else
sp->gv_sym = &s_;
if (x->x_issymbol)
sp->gv_w.w_symbol = &s_;
else sp->gv_w.w_float = 0;
if (i)
{
if (x->x_issymbol) if (x->x_issymbol)
sp->gv_w.w_symbol = &s_; symbolinlet_new(&x->x_obj, &sp->gv_w.w_symbol);
else sp->gv_w.w_float = 0; else floatinlet_new(&x->x_obj, &sp->gv_w.w_float);
if (i)
{
if (x->x_issymbol)
symbolinlet_new(&x->x_obj, &sp->gv_w.w_symbol);
else floatinlet_new(&x->x_obj, &sp->gv_w.w_float);
}
} }
} }
pointerinlet_new(&x->x_obj, &x->x_gp); pointerinlet_new(&x->x_obj, &x->x_gp);
...@@ -541,6 +564,24 @@ static void *set_new(t_symbol *why, int argc, t_atom *argv) ...@@ -541,6 +564,24 @@ static void *set_new(t_symbol *why, int argc, t_atom *argv)
return (x); return (x);
} }
static void set_set(t_set *x, t_symbol *templatesym, t_symbol *field)
{
if (x->x_nin != 1)
{
pd_error(x, "set: cannot set multiple fields.");
return;
}
else
{
x->x_templatesym = canvas_makebindsym(templatesym);
x->x_variables->gv_sym = field;
if (x->x_issymbol)
x->x_variables->gv_w.w_symbol = &s_;
else
x->x_variables->gv_w.w_float = 0;
}
}
static void set_bang(t_set *x) static void set_bang(t_set *x)
{ {
int nitems = x->x_nin, i; int nitems = x->x_nin, i;
...@@ -621,6 +662,8 @@ static void set_setup(void) ...@@ -621,6 +662,8 @@ static void set_setup(void)
class_addfloat(set_class, set_float); class_addfloat(set_class, set_float);
class_addsymbol(set_class, set_symbol); class_addsymbol(set_class, set_symbol);
class_addbang(set_class, set_bang); class_addbang(set_class, set_bang);
class_addmethod(set_class, (t_method)set_set, gensym("set"),
A_SYMBOL, A_SYMBOL, 0);
} }
/* ---------------------- elem ----------------------------- */ /* ---------------------- elem ----------------------------- */
...@@ -648,6 +691,12 @@ static void *elem_new(t_symbol *templatesym, t_symbol *fieldsym) ...@@ -648,6 +691,12 @@ static void *elem_new(t_symbol *templatesym, t_symbol *fieldsym)
return (x); return (x);
} }
static void elem_set(t_elem *x, t_symbol *templatesym, t_symbol *fieldsym)
{
x->x_templatesym = canvas_makebindsym(templatesym);
x->x_fieldsym = fieldsym;
}
static void elem_float(t_elem *x, t_float f) static void elem_float(t_elem *x, t_float f)
{ {
int indx = f, nitems, onset; int indx = f, nitems, onset;
...@@ -720,6 +769,8 @@ static void elem_setup(void) ...@@ -720,6 +769,8 @@ static void elem_setup(void)
elem_class = class_new(gensym("element"), (t_newmethod)elem_new, elem_class = class_new(gensym("element"), (t_newmethod)elem_new,
(t_method)elem_free, sizeof(t_elem), 0, A_DEFSYM, A_DEFSYM, 0); (t_method)elem_free, sizeof(t_elem), 0, A_DEFSYM, A_DEFSYM, 0);
class_addfloat(elem_class, elem_float); class_addfloat(elem_class, elem_float);
class_addmethod(elem_class, (t_method)elem_set, gensym("set"),
A_SYMBOL, A_SYMBOL, 0);
} }
/* ---------------------- getsize ----------------------------- */ /* ---------------------- getsize ----------------------------- */
...@@ -742,6 +793,12 @@ static void *getsize_new(t_symbol *templatesym, t_symbol *fieldsym) ...@@ -742,6 +793,12 @@ static void *getsize_new(t_symbol *templatesym, t_symbol *fieldsym)
return (x); return (x);
} }
static void getsize_set(t_getsize *x, t_symbol *templatesym, t_symbol *fieldsym)
{
x->x_templatesym = canvas_makebindsym(templatesym);
x->x_fieldsym = fieldsym;
}
static void getsize_pointer(t_getsize *x, t_gpointer *gp) static void getsize_pointer(t_getsize *x, t_gpointer *gp)
{ {
int onset, type; int onset, type;
...@@ -790,6 +847,8 @@ static void getsize_setup(void) ...@@ -790,6 +847,8 @@ static void getsize_setup(void)
getsize_class = class_new(gensym("getsize"), (t_newmethod)getsize_new, 0, getsize_class = class_new(gensym("getsize"), (t_newmethod)getsize_new, 0,
sizeof(t_getsize), 0, A_DEFSYM, A_DEFSYM, 0); sizeof(t_getsize), 0, A_DEFSYM, A_DEFSYM, 0);
class_addpointer(getsize_class, getsize_pointer); class_addpointer(getsize_class, getsize_pointer);
class_addmethod(getsize_class, (t_method)getsize_set, gensym("set"),
A_SYMBOL, A_SYMBOL, 0);
} }
/* ---------------------- setsize ----------------------------- */ /* ---------------------- setsize ----------------------------- */
...@@ -816,6 +875,12 @@ static void *setsize_new(t_symbol *templatesym, t_symbol *fieldsym, ...@@ -816,6 +875,12 @@ static void *setsize_new(t_symbol *templatesym, t_symbol *fieldsym,
return (x); return (x);
} }
static void setsize_set(t_setsize *x, t_symbol *templatesym, t_symbol *fieldsym)
{
x->x_templatesym = canvas_makebindsym(templatesym);
x->x_fieldsym = fieldsym;
}
static void setsize_float(t_setsize *x, t_float f) static void setsize_float(t_setsize *x, t_float f)
{ {
int nitems, onset, type; int nitems, onset, type;
...@@ -944,6 +1009,9 @@ static void setsize_setup(void) ...@@ -944,6 +1009,9 @@ static void setsize_setup(void)
(t_method)setsize_free, sizeof(t_setsize), 0, (t_method)setsize_free, sizeof(t_setsize), 0,
A_DEFSYM, A_DEFSYM, A_DEFFLOAT, 0); A_DEFSYM, A_DEFSYM, A_DEFFLOAT, 0);
class_addfloat(setsize_class, setsize_float); class_addfloat(setsize_class, setsize_float);
class_addmethod(setsize_class, (t_method)setsize_set, gensym("set"),
A_SYMBOL, A_SYMBOL, 0);
} }
/* ---------------------- append ----------------------------- */ /* ---------------------- append ----------------------------- */
...@@ -970,19 +1038,21 @@ static void *append_new(t_symbol *why, int argc, t_atom *argv) ...@@ -970,19 +1038,21 @@ static void *append_new(t_symbol *why, int argc, t_atom *argv)
t_append *x = (t_append *)pd_new(append_class); t_append *x = (t_append *)pd_new(append_class);
int i; int i;
t_appendvariable *sp; t_appendvariable *sp;
int varcount;
x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv)); x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv));
if (argc) argc--, argv++; if (argc) argc--, argv++;
varcount = argc ? argc : 1; /* have at least one variable */
x->x_variables x->x_variables
= (t_appendvariable *)getbytes(argc * sizeof (*x->x_variables)); = (t_appendvariable *)getbytes(varcount * sizeof (*x->x_variables));
x->x_nin = argc; x->x_nin = varcount;
if (argc) for (i = 0, sp = x->x_variables; i < argc; i++, sp++)
{ {
for (i = 0, sp = x->x_variables; i < argc; i++, sp++) if (argc)
{
sp->gv_sym = atom_getsymbolarg(i, argc, argv); sp->gv_sym = atom_getsymbolarg(i, argc, argv);
sp->gv_f = 0; else
if (i) floatinlet_new(&x->x_obj, &sp->gv_f); sp->gv_sym = &s_;
} sp->gv_f = 0;
if (i) floatinlet_new(&x->x_obj, &sp->gv_f);
} }
pointerinlet_new(&x->x_obj, &x->x_gp); pointerinlet_new(&x->x_obj, &x->x_gp);
outlet_new(&x->x_obj, &s_pointer); outlet_new(&x->x_obj, &s_pointer);
...@@ -990,6 +1060,21 @@ static void *append_new(t_symbol *why, int argc, t_atom *argv) ...@@ -990,6 +1060,21 @@ static void *append_new(t_symbol *why, int argc, t_atom *argv)
return (x); return (x);
} }
static void append_set(t_append *x, t_symbol *templatesym, t_symbol *field)
{
if (x->x_nin != 1)
{
pd_error(x, "set: cannot set multiple fields.");
return;
}
else
{
x->x_templatesym = canvas_makebindsym(templatesym);
x->x_variables->gv_sym = field;
x->x_variables->gv_f = 0;
}
}
static void append_float(t_append *x, t_float f) static void append_float(t_append *x, t_float f)
{ {
int nitems = x->x_nin, i; int nitems = x->x_nin, i;
...@@ -1070,6 +1155,8 @@ static void append_setup(void) ...@@ -1070,6 +1155,8 @@ static void append_setup(void)
append_class = class_new(gensym("append"), (t_newmethod)append_new, append_class = class_new(gensym("append"), (t_newmethod)append_new,
(t_method)append_free, sizeof(t_append), 0, A_GIMME, 0); (t_method)append_free, sizeof(t_append), 0, A_GIMME, 0);
class_addfloat(append_class, append_float); class_addfloat(append_class, append_float);
class_addmethod(append_class, (t_method)append_set, gensym("set"),
A_SYMBOL, A_SYMBOL, 0);
} }
/* ---------------------- sublist ----------------------------- */ /* ---------------------- sublist ----------------------------- */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment