mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
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 <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
edbbfac6cf
commit
bfbad9d1a8
1 changed files with 26 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue