[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