[Mesa-dev] [PATCH 1/5] ralloc: Introduce new macros for defining C++ new/delete operators.
Ian Romanick
idr at freedesktop.org
Thu Sep 19 15:35:07 PDT 2013
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 <ian.d.romanick at intel.com>
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 <kenneth at whitecape.org>
> ---
> 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
>
More information about the mesa-dev
mailing list