Added more preprocessor cleverness.

This commit is contained in:
bkaradzic
2013-10-22 20:43:35 -07:00
parent 67ffeeae3a
commit 2bfaf7829d
3 changed files with 41 additions and 7 deletions

View File

@@ -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)

View File

@@ -19,7 +19,10 @@ namespace bx
template <typename Ty>
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<typename Ty>
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 <typename Ty>
class SpScBlockingUnboundedQueue
{
BX_CLASS_NO_COPY_NO_ASSIGNMENT(SpScBlockingUnboundedQueue);
BX_CLASS(SpScBlockingUnboundedQueue
, NO_COPY
, NO_ASSIGNMENT
);
public:
SpScBlockingUnboundedQueue()

View File

@@ -18,7 +18,10 @@ namespace bx
class Thread
{
BX_CLASS_NO_COPY_NO_ASSIGNMENT(Thread);
BX_CLASS(Thread
, NO_COPY
, NO_ASSIGNMENT
);
public:
Thread()