aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/glsl/ralloc.h
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-09-23 09:41:49 +0200
committermarha <marha@users.sourceforge.net>2013-09-23 09:41:49 +0200
commite4d5a2996e4a03f55bc7d21c493ba1bcbef35aae (patch)
treeee54f228a08b4d042e73cf9e6247ffbc9af3b73f /mesalib/src/glsl/ralloc.h
parent55c05b8a12944349b00053253d3a49b223a9f4de (diff)
downloadvcxsrv-e4d5a2996e4a03f55bc7d21c493ba1bcbef35aae.tar.gz
vcxsrv-e4d5a2996e4a03f55bc7d21c493ba1bcbef35aae.tar.bz2
vcxsrv-e4d5a2996e4a03f55bc7d21c493ba1bcbef35aae.zip
mesa xserver git update 23 Sep 2013
xserver commit 7d3d4ae55dd6ee338439e2424ac423b1df80501b mesa commit 6d29db715b8d60718ada1ab8ad19d969cac43caf
Diffstat (limited to 'mesalib/src/glsl/ralloc.h')
-rw-r--r--mesalib/src/glsl/ralloc.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/mesalib/src/glsl/ralloc.h b/mesalib/src/glsl/ralloc.h
index 67eb93833..799d3a9b8 100644
--- a/mesalib/src/glsl/ralloc.h
+++ b/mesalib/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