[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