diff --git a/include/bx/macros.h b/include/bx/macros.h index ad15fb6..03a1320 100644 --- a/include/bx/macros.h +++ b/include/bx/macros.h @@ -100,9 +100,31 @@ # define BX_UNUSED(...) BX_MACRO_DISPATCHER(BX_UNUSED_, __VA_ARGS__)(__VA_ARGS__) #endif // BX_COMPILER_MSVC -#define BX_CLASS_NO_COPY_NO_ASSIGNMENT(_class) \ - _class(const _class&); \ - _class& operator=(const _class&) +#define BX_CLASS_NO_DEFAULT_CTOR(_class) \ + private: _class() + +#define BX_CLASS_NO_COPY(_class) \ + private: _class(const _class& _rhs) + +#define BX_CLASS_NO_ASSIGNMENT(_class) \ + private: _class& operator=(const _class& _rhs) + +#define BX_CLASS_ALLOCATOR(_class) \ + public: void* operator new(size_t _size); \ + public: void operator delete(void* _ptr); \ + public: void* operator new[](size_t _size); \ + public: void operator delete[](void* _ptr) + +#define BX_CLASS_1(_class, _a1) BX_CONCATENATE(BX_CLASS_, _a1)(_class) +#define BX_CLASS_2(_class, _a1, _a2) BX_CLASS_1(_class, _a1); BX_CLASS_1(_class, _a2) +#define BX_CLASS_3(_class, _a1, _a2, _a3) BX_CLASS_2(_class, _a1, _a2); BX_CLASS_1(_class, _a3) +#define BX_CLASS_4(_class, _a1, _a2, _a3, _a4) BX_CLASS_3(_class, _a1, _a2, _a3); BX_CLASS_1(_class, _a4) + +#if BX_COMPILER_MSVC +# define BX_CLASS(_class, ...) BX_MACRO_DISPATCHER(BX_CLASS_, __VA_ARGS__) BX_VA_ARGS_PASS(_class, __VA_ARGS__) +#else +# define BX_CLASS(_class, ...) BX_MACRO_DISPATCHER(BX_CLASS_, __VA_ARGS__)(_class, __VA_ARGS__) +#endif // BX_COMPILER_MSVC #ifndef BX_CHECK # define BX_CHECK(_condition, ...) do {} while(0) diff --git a/include/bx/spscqueue.h b/include/bx/spscqueue.h index 85d2a60..729924e 100644 --- a/include/bx/spscqueue.h +++ b/include/bx/spscqueue.h @@ -19,7 +19,10 @@ namespace bx template class SpScUnboundedQueueLf { - BX_CLASS_NO_COPY_NO_ASSIGNMENT(SpScUnboundedQueueLf); + BX_CLASS(SpScUnboundedQueueLf + , NO_COPY + , NO_ASSIGNMENT + ); public: SpScUnboundedQueueLf() @@ -95,7 +98,10 @@ namespace bx template class SpScUnboundedQueueMutex { - BX_CLASS_NO_COPY_NO_ASSIGNMENT(SpScUnboundedQueueMutex); + BX_CLASS(SpScUnboundedQueueMutex + , NO_COPY + , NO_ASSIGNMENT + ); public: SpScUnboundedQueueMutex() @@ -151,7 +157,10 @@ namespace bx template class SpScBlockingUnboundedQueue { - BX_CLASS_NO_COPY_NO_ASSIGNMENT(SpScBlockingUnboundedQueue); + BX_CLASS(SpScBlockingUnboundedQueue + , NO_COPY + , NO_ASSIGNMENT + ); public: SpScBlockingUnboundedQueue() diff --git a/include/bx/thread.h b/include/bx/thread.h index b70c3ad..b2f813c 100644 --- a/include/bx/thread.h +++ b/include/bx/thread.h @@ -18,7 +18,10 @@ namespace bx class Thread { - BX_CLASS_NO_COPY_NO_ASSIGNMENT(Thread); + BX_CLASS(Thread + , NO_COPY + , NO_ASSIGNMENT + ); public: Thread()