I like this approach a lot... certainly a lot more than various inheritance-based approaches that we had discussed before.
Patches 1, 2, 3, and 5 are Reviewed-by: Ian Romanick <[email protected]> Patch 4 probably is too (with the comment addition that I suggested), but I'd like to hear your thoughts about the performance implication that I mentioned first. On 09/18/2013 04:55 PM, Kenneth Graunke wrote: > Most of our C++ classes define placement new and delete operators so we > can do convenient allocation via: > > thing *foo = new(mem_ctx) thing(...) > > Currently, this is done via a lot of boilerplate. By adding simple > macros to ralloc, we can condense this to a single line, making it > trivial to add this feature to a new class. > > Signed-off-by: Kenneth Graunke <[email protected]> > --- > src/glsl/ralloc.h | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > This series is an alternative to Curro's patch: > http://lists.freedesktop.org/archives/mesa-dev/2013-September/044728.html > > diff --git a/src/glsl/ralloc.h b/src/glsl/ralloc.h > index 67eb938..799d3a9 100644 > --- a/src/glsl/ralloc.h > +++ b/src/glsl/ralloc.h > @@ -404,4 +404,30 @@ bool ralloc_vasprintf_append(char **str, const char > *fmt, va_list args); > } /* end of extern "C" */ > #endif > > +#define _RALLOC_OPS(ALLOC, TYPE) \ > + static void* operator new(size_t size, void *mem_ctx) \ > + { \ > + void *p = ALLOC(mem_ctx, size); \ > + assert(p != NULL); \ > + return p; \ > + } \ > + \ > + static void operator delete(void *p) \ > + { \ > + ralloc_free(p); \ > + } > + > +/** > + * Declare C++ new and delete operators which use ralloc. > + * > + * Placing one of these macros in the body of a class makes it possible to > do: > + * > + * TYPE *var = new(mem_ctx) TYPE(...); > + * delete var; > + * > + * which is more idiomatic in C++ than calling ralloc or rzalloc. > + */ > +#define DECLARE_RALLOC_CXX_OPERATORS(TYPE) _RALLOC_OPS(ralloc_size, TYPE) > +#define DECLARE_RZALLOC_CXX_OPERATORS(TYPE) _RALLOC_OPS(rzalloc_size, TYPE) > + > #endif > _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
