From 67ffeeae3ad6719b57ee265a222a4a7a716640b2 Mon Sep 17 00:00:00 2001 From: bkaradzic Date: Mon, 21 Oct 2013 20:55:38 -0700 Subject: [PATCH 1/2] Use _WIN32_WINNT as value for BX_PLATFORM_WINDOWS macro. --- include/bx/platform.h | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/include/bx/platform.h b/include/bx/platform.h index 82c1208..47920de 100644 --- a/include/bx/platform.h +++ b/include/bx/platform.h @@ -51,7 +51,13 @@ # define BX_PLATFORM_XBOX360 1 #elif defined(_WIN32) || defined(_WIN64) # undef BX_PLATFORM_WINDOWS -# define BX_PLATFORM_WINDOWS 1 +// http://msdn.microsoft.com/en-us/library/6sehtctf.aspx +# if !defined(WINVER) && !defined(_WIN32_WINNT) +// Windows Server 2003 with SP1, Windows XP with SP2 and above +# define WINVER 0x0502 +# define _WIN32_WINNT 0x0502 +# endif // !defined(WINVER) && !defined(_WIN32_WINNT) +# define BX_PLATFORM_WINDOWS _WIN32_WINNT #elif defined(__native_client__) // NaCl compiler defines __linux__ # undef BX_PLATFORM_NACL @@ -145,13 +151,4 @@ typedef struct { long double x, y; } __float128; #endif // BX_COMPILER_CLANG && BX_PLATFORM_LINUX -#if BX_PLATFORM_WINDOWS -// http://msdn.microsoft.com/en-us/library/6sehtctf.aspx -# if !defined(WINVER) && !defined(_WIN32_WINNT) - // Windows Server 2003 with SP1, Windows XP with SP2 and above -# define WINVER 0x0502 -# define _WIN32_WINNT 0x0502 -# endif // !defined(WINVER) && !defined(_WIN32_WINNT) -#endif // BX_PLATFORM_WINDOWS - #endif // __BX_PLATFORM_H__ From 2bfaf7829d69ee85059fb44847a232432f101618 Mon Sep 17 00:00:00 2001 From: bkaradzic Date: Tue, 22 Oct 2013 20:43:35 -0700 Subject: [PATCH 2/2] Added more preprocessor cleverness. --- include/bx/macros.h | 28 +++++++++++++++++++++++++--- include/bx/spscqueue.h | 15 ++++++++++++--- include/bx/thread.h | 5 ++++- 3 files changed, 41 insertions(+), 7 deletions(-) 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()