On Mon, 23 Nov 2009, Ivica Ico Bukvic wrote:
With what C++ provides for nesting structs, you can remove most typecasts from Pd's code, including all the disguised typecasts (every use of te_gobj, g_gobj, x_obj, x_gui, as well as many uses of g_pd).
Good idea. I'll try to give it a shot next time I mess with Pd source.
Ok, I'll give you an example to be sure:
typedef struct _text { t_gobj te_g; t_binbuf *te_binbuf; t_outlet *te_outlet; t_inlet *te_inlet; short te_xpix, te_ypix, te_width; unsigned int te_type:2; } t_text;
can become:
typedef struct _text : struct t_gobj { t_binbuf *te_binbuf; t_outlet *te_outlet; t_inlet *te_inlet; short te_xpix, te_ypix, te_width; unsigned int te_type:2; } t_text;
so t_text (aka t_object) becomes a variant of t_gobj instead of just containing a t_gobj. This means you never need to cast from t_text* to t_gobj* anymore, and it means you never have to write te_g anymore, but it means you can't write te_g anymore, and that's a little downside. However it's normal that you still have to do explicit casts the other way around because even though in this case a t_text is a t_gobj, it doesn't mean a t_gobj is a t_text.
I use #ifdef to switch between the C and C++ versions of these structs, in binary-compatible ways.
I'm sorry for the repeated typo of writing te_gobj instead of te_g.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard, Montréal, Québec. téléphone: +1.514.383.3801