Mesa (master): ralloc: Introduce new macros for defining C++ new/ delete operators.

Kenneth Graunke kwg at kemper.freedesktop.org
Sat Sep 21 16:27:24 UTC 2013


Module: Mesa
Branch: master
Commit: bfbad9d1a826bb6215e3a061f7b6b2b0ee3828e8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bfbad9d1a826bb6215e3a061f7b6b2b0ee3828e8

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Wed Sep 18 13:56:26 2013 -0700

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 at whitecape.org>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Chad Versace <chad.versace at linux.intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/glsl/ralloc.h |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

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-commit mailing list