aboutsummaryrefslogtreecommitdiffstats
path: root/common/almalloc.h
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-11-18 00:38:31 -0800
committerChris Robinson <[email protected]>2018-11-18 00:38:31 -0800
commitd7cc9b912b71b17d6cd1bb9726673b79a4c0173a (patch)
tree591ba44cad8cf3d7d6ec2303c8fab49e954f5168 /common/almalloc.h
parent38d6df9c1d10ac74af3454c67147dd21bb0a7bb8 (diff)
Use new/delete for ALCcontext objects
Diffstat (limited to 'common/almalloc.h')
-rw-r--r--common/almalloc.h23
1 files changed, 12 insertions, 11 deletions
diff --git a/common/almalloc.h b/common/almalloc.h
index a4297cf5..ad48db8b 100644
--- a/common/almalloc.h
+++ b/common/almalloc.h
@@ -3,28 +3,29 @@
#include <stddef.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/* Minimum alignment required by posix_memalign. */
#define DEF_ALIGN sizeof(void*)
void *al_malloc(size_t alignment, size_t size);
void *al_calloc(size_t alignment, size_t size);
-void al_free(void *ptr);
+void al_free(void *ptr) noexcept;
-size_t al_get_page_size(void);
+size_t al_get_page_size(void) noexcept;
/**
* Returns non-0 if the allocation function has direct alignment handling.
* Otherwise, the standard malloc is used with an over-allocation and pointer
* offset strategy.
*/
-int al_is_sane_alignment_allocator(void);
-
-#ifdef __cplusplus
-}
-#endif
+int al_is_sane_alignment_allocator(void) noexcept;
+
+#define DEF_NEWDEL(T) \
+ void *operator new(size_t size) \
+ { \
+ void *ret = al_malloc(alignof(T), size); \
+ if(!ret) throw std::bad_alloc(); \
+ return ret; \
+ } \
+ void operator delete(void *block) noexcept { al_free(block); }
#endif /* AL_MALLOC_H */