[PD-dev] getting the classname in an class
Hans-Christoph Steiner
hans at eds.org
Wed Oct 31 06:50:33 CET 2007
On Oct 30, 2007, at 11:31 AM, Mathieu Bouchard wrote:
> On Mon, 29 Oct 2007, Hans-Christoph Steiner wrote:
>
>> static void entry_save(t_gobj *z, t_binbuf *b)
>> {
>> t_entry *x = (t_entry *)z;
>> binbuf_addv(b, "ssiisiiss", gensym("#X"),gensym("obj"),
>> x->x_obj.te_xpix, x->x_obj.te_ypix,
>> atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
>> x->x_width, x->x_height, x->x_bgcolour, x-
>> >x_fgcolour);
>> binbuf_addv(b, ";");
>> }
>
> calls to binbuf_addv can be merged in the same way as fprintf calls
> can: keep the same first arg, concatenate the two second args, and
> then append the rest of the latter rest of arguments to the first.
> So, you never need a separate call for ";".
>
> they can also be split in any way. For example you can do "ssiis"
> first and then do "iiss;", as long as the rest of arguments are
> also split in the same way. You could make a function like:
>
> void obj_saveheader(t_binbuf *b, t_object *x) {
> binbuf_addv(b,"ssiis", gensym("#X"), gensym("obj"),
> x->te_xpix, x->te_ypix, atom_getsymbol(binbuf_getvec(x-
> >te_binbuf)));
> }
This looks good. How about storing the symbols somewhere to save
some symbol table lookups?
t_symbol *poundx_symbol = gemsym("#X");
t_symbol *obj_symbol = gemsym("obj");
void obj_saveheader(t_binbuf *b, t_object *x) {
binbuf_addv(b,"ssiis", poundx_symbol, obj_symbol,
x->te_xpix, x->te_ypix, atom_getsymbol(binbuf_getvec(x-
>te_binbuf)));
}
.hc
>
> and then use it at the beginning of every save function that fits
> with that pattern (which is every one of them, so far).
>
>> Perhaps atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)) could be
>> defined in m_pd.h as something like "class_getclassname"
>
> its naming does not work. as it doesn't give you the class _name_,
> don't make it end in "_getclassname", and as it doesn't start from
> (nor use) a t_class *, don't make it start in "class_".
>
> i think that it should be a obj_...() name, but then, if you do
> that, make sure to handle the special case in which one puts a
> float and only a float in an object box, because that would crash
> the above code. you never hit this case with savefn, but you are
> making a generic-sounding obj_...() call so it should accept any
> obj_... and imho it should also accept top-level canvases as
> arguments... as well as incomplete objects (objects that don't have
> a binbuf yet, while they are created).
>
> _ _ __ ___ _____ ________ _____________ _____________________ ...
> | Mathieu Bouchard - tél:+1.514.383.3801, Montréal QC Canada
------------------------------------------------------------------------
----
'You people have such restrictive dress for women,’ she said,
hobbling away in three inch heels and panty hose to finish out
another pink-collar temp pool day. - “Hijab Scene #2", by Mohja Kahf
More information about the Pd-dev
mailing list