From bfbad9d1a826bb6215e3a061f7b6b2b0ee3828e8 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 18 Sep 2013 13:56:26 -0700 Subject: [PATCH] ralloc: Introduce new macros for defining C++ new/delete operators. 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 Reviewed-by: Eric Anholt Reviewed-by: Chad Versace Reviewed-by: Ian Romanick --- src/glsl/ralloc.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/glsl/ralloc.h b/src/glsl/ralloc.h index 67eb93833e6..799d3a9b83f 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 -- 2.30.2