Re: absract_surface -> cairo_surface_t* vs void*
"Enrico Weigelt, metux IT consult" <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
On 11.12.2015 18:06, Uli Schlachter wrote: > > What deeper inheritance? Can surface inherit from each other at all? See DRM backend. Actually, it's not true inheritance like in C++, but more container structures. >> into cairo_surface_t, so we can check individual >> instances for correct class >> * add some macros for the typecasting and type check >> * make the whole thing (compile-time) optional > > Don't the existing ->type and ->backend values serve this goal? I guess we could > add some macros for this, but ->backend == my_backend is quite obvious, I think. As long as no inheritance is involved, that's correct. But w/ inheritance (like done in the DRM backend) it's getting a bit more complex. For example, the drm-i915 backend uses some generic functions of the drm-intel backend, which in turn uses some from the more generic drm backend. In that case these inherited functions are called directly, so they dont know that they're actually running for a different backend, so the check would fail. An alternative would be having all derived backends defining all backend ops functions own their own, which then explicitly call the inherited functions - leading to more core (and a little bit of runtime overhead). These functions would first cast to the parent class and then casting to their real one - having the type id of the derived class in a separate field. --mtx mit freundlichen Grüßen -- Enrico Weigelt, metux IT consulting +49-151-27565287 -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo