19
19
20
20
// Platform detection
21
21
#if defined(__INTEL_COMPILER)
22
- #define AE_ICC
22
+ # define AE_ICC
23
23
#elif defined(_MSC_VER)
24
- #define AE_VCPP
24
+ # define AE_VCPP
25
25
#elif defined(__GNUC__)
26
- #define AE_GCC
26
+ # define AE_GCC
27
27
#endif
28
28
29
29
#if defined(_M_IA64) || defined(__ia64__)
30
- #define AE_ARCH_IA64
30
+ # define AE_ARCH_IA64
31
31
#elif defined(_WIN64) || defined(__amd64__) || defined(_M_X64) || defined(__x86_64__)
32
- #define AE_ARCH_X64
32
+ # define AE_ARCH_X64
33
33
#elif defined(_M_IX86) || defined(__i386__)
34
- #define AE_ARCH_X86
34
+ # define AE_ARCH_X86
35
35
#elif defined(_M_PPC) || defined(__powerpc__)
36
- #define AE_ARCH_PPC
36
+ # define AE_ARCH_PPC
37
37
#else
38
- #define AE_ARCH_UNKNOWN
38
+ # define AE_ARCH_UNKNOWN
39
39
#endif
40
40
41
41
// AE_UNUSED
42
42
#define AE_UNUSED (x ) ((void )x)
43
43
44
44
// AE_FORCEINLINE
45
45
#if defined(AE_VCPP) || defined(AE_ICC)
46
- #define AE_FORCEINLINE __forceinline
46
+ # define AE_FORCEINLINE __forceinline
47
47
#elif defined(AE_GCC)
48
48
// #define AE_FORCEINLINE __attribute__((always_inline))
49
- #define AE_FORCEINLINE inline
49
+ # define AE_FORCEINLINE inline
50
50
#else
51
- #define AE_FORCEINLINE inline
51
+ # define AE_FORCEINLINE inline
52
52
#endif
53
53
54
54
// AE_ALIGN
55
55
#if defined(AE_VCPP) || defined(AE_ICC)
56
- #define AE_ALIGN (x ) __declspec(align(x))
56
+ # define AE_ALIGN (x ) __declspec(align(x))
57
57
#elif defined(AE_GCC)
58
- #define AE_ALIGN (x ) __attribute__((aligned(x)))
58
+ # define AE_ALIGN (x ) __attribute__((aligned(x)))
59
59
#else
60
60
// Assume GCC compliant syntax...
61
- #define AE_ALIGN (x ) __attribute__((aligned(x)))
61
+ # define AE_ALIGN (x ) __attribute__((aligned(x)))
62
62
#endif
63
63
64
64
// Portable atomic fences implemented below:
@@ -83,28 +83,28 @@ enum memory_order
83
83
#if (defined(AE_VCPP) && (_MSC_VER < 1700 || defined(__cplusplus_cli))) || defined(AE_ICC)
84
84
// VS2010 and ICC13 don't support std::atomic_*_fence, implement our own fences
85
85
86
- #include < intrin.h>
87
-
88
- #if defined(AE_ARCH_X64) || defined(AE_ARCH_X86)
89
- #define AeFullSync _mm_mfence
90
- #define AeLiteSync _mm_mfence
91
- #elif defined(AE_ARCH_IA64)
92
- #define AeFullSync __mf
93
- #define AeLiteSync __mf
94
- #elif defined(AE_ARCH_PPC)
95
- #include < ppcintrinsics.h>
96
- #define AeFullSync __sync
97
- #define AeLiteSync __lwsync
98
- #endif
99
-
100
- #ifdef AE_VCPP
101
- #pragma warning(push)
102
- #pragma warning(disable : 4365) // Disable erroneous 'conversion from long to unsigned int, signed/unsigned mismatch'
103
- // error when using `assert`
104
- #ifdef __cplusplus_cli
105
- #pragma managed(push, off)
106
- #endif
107
- #endif
86
+ # include < intrin.h>
87
+
88
+ # if defined(AE_ARCH_X64) || defined(AE_ARCH_X86)
89
+ # define AeFullSync _mm_mfence
90
+ # define AeLiteSync _mm_mfence
91
+ # elif defined(AE_ARCH_IA64)
92
+ # define AeFullSync __mf
93
+ # define AeLiteSync __mf
94
+ # elif defined(AE_ARCH_PPC)
95
+ # include < ppcintrinsics.h>
96
+ # define AeFullSync __sync
97
+ # define AeLiteSync __lwsync
98
+ # endif
99
+
100
+ # ifdef AE_VCPP
101
+ # pragma warning(push)
102
+ # pragma warning(disable : 4365) // Disable erroneous 'conversion from long to unsigned int, signed/unsigned
103
+ // mismatch' error when using `assert`
104
+ # ifdef __cplusplus_cli
105
+ # pragma managed(push, off)
106
+ # endif
107
+ # endif
108
108
109
109
namespace moodycamel
110
110
{
@@ -134,7 +134,7 @@ AE_FORCEINLINE void compilerFence(memory_order order)
134
134
// x86/x64 have a strong memory model -- all loads and stores have
135
135
// acquire and release semantics automatically (so only need compiler
136
136
// barriers for those).
137
- #if defined(AE_ARCH_X86) || defined(AE_ARCH_X64)
137
+ # if defined(AE_ARCH_X86) || defined(AE_ARCH_X64)
138
138
AE_FORCEINLINE void fence (memory_order order)
139
139
{
140
140
switch (order)
@@ -159,7 +159,7 @@ AE_FORCEINLINE void fence(memory_order order)
159
159
assert (false );
160
160
}
161
161
}
162
- #else
162
+ # else
163
163
AE_FORCEINLINE void fence (memory_order order)
164
164
{
165
165
// Non-specialized arch, use heavier memory barriers everywhere just in case :-(
@@ -191,11 +191,11 @@ AE_FORCEINLINE void fence(memory_order order)
191
191
assert (false );
192
192
}
193
193
}
194
- #endif
194
+ # endif
195
195
} // end namespace moodycamel
196
196
#else
197
197
// Use standard library of atomics
198
- #include < atomic>
198
+ # include < atomic>
199
199
200
200
namespace moodycamel
201
201
{
@@ -250,11 +250,11 @@ AE_FORCEINLINE void fence(memory_order order)
250
250
#endif
251
251
252
252
#if !defined(AE_VCPP) || (_MSC_VER >= 1700 && !defined(__cplusplus_cli))
253
- #define AE_USE_STD_ATOMIC_FOR_WEAK_ATOMIC
253
+ # define AE_USE_STD_ATOMIC_FOR_WEAK_ATOMIC
254
254
#endif
255
255
256
256
#ifdef AE_USE_STD_ATOMIC_FOR_WEAK_ATOMIC
257
- #include < atomic>
257
+ # include < atomic>
258
258
#endif
259
259
#include < utility>
260
260
@@ -272,7 +272,7 @@ class WeakAtomic
272
272
{
273
273
}
274
274
#ifdef AE_VCPP
275
- #pragma warning(disable : 4100) // Get rid of (erroneous) 'unreferenced formal parameter' warning
275
+ # pragma warning(disable : 4100) // Get rid of (erroneous) 'unreferenced formal parameter' warning
276
276
#endif
277
277
template <typename U>
278
278
WeakAtomic (U&& x) : value_(std::forward<U>(x))
@@ -291,7 +291,7 @@ class WeakAtomic
291
291
{
292
292
}
293
293
#ifdef AE_VCPP
294
- #pragma warning(default : 4100)
294
+ # pragma warning(default : 4100)
295
295
#endif
296
296
297
297
AE_FORCEINLINE operator T () const
@@ -319,32 +319,32 @@ class WeakAtomic
319
319
320
320
AE_FORCEINLINE T fetchAddAcquire (T increment)
321
321
{
322
- #if defined(AE_ARCH_X64) || defined(AE_ARCH_X86)
322
+ # if defined(AE_ARCH_X64) || defined(AE_ARCH_X86)
323
323
if (sizeof (T) == 4 )
324
324
return _InterlockedExchangeAdd ((long volatile *)&value_, (long )increment);
325
- #if defined(_M_AMD64)
325
+ # if defined(_M_AMD64)
326
326
else if (sizeof (T) == 8 )
327
327
return _InterlockedExchangeAdd64 ((long long volatile *)&value_, (long long )increment);
328
- #endif
329
- #else
330
- #error Unsupported platform
331
- #endif
328
+ # endif
329
+ # else
330
+ # error Unsupported platform
331
+ # endif
332
332
assert (false && " T must be either a 32 or 64 bit type" );
333
333
return value_;
334
334
}
335
335
336
336
AE_FORCEINLINE T fetchAddRelease (T increment)
337
337
{
338
- #if defined(AE_ARCH_X64) || defined(AE_ARCH_X86)
338
+ # if defined(AE_ARCH_X64) || defined(AE_ARCH_X86)
339
339
if (sizeof (T) == 4 )
340
340
return _InterlockedExchangeAdd ((long volatile *)&value_, (long )increment);
341
- #if defined(_M_AMD64)
341
+ # if defined(_M_AMD64)
342
342
else if (sizeof (T) == 8 )
343
343
return _InterlockedExchangeAdd64 ((long long volatile *)&value_, (long long )increment);
344
- #endif
345
- #else
346
- #error Unsupported platform
347
- #endif
344
+ # endif
345
+ # else
346
+ # error Unsupported platform
347
+ # endif
348
348
assert (false && " T must be either a 32 or 64 bit type" );
349
349
return value_;
350
350
}
@@ -407,9 +407,9 @@ __declspec(dllimport) unsigned long __stdcall WaitForSingleObject(void* hHandle,
407
407
__declspec (dllimport) int __stdcall ReleaseSemaphore(void * hSemaphore, long lReleaseCount, long * lpPreviousCount);
408
408
}
409
409
#elif defined(__MACH__)
410
- #include < mach/mach.h>
410
+ # include < mach/mach.h>
411
411
#elif defined(__unix__)
412
- #include < semaphore.h>
412
+ # include < semaphore.h>
413
413
#endif
414
414
415
415
namespace moodycamel
@@ -625,7 +625,7 @@ class Semaphore
625
625
}
626
626
};
627
627
#else
628
- #error Unsupported platform! (No semaphore wrapper available)
628
+ # error Unsupported platform! (No semaphore wrapper available)
629
629
#endif
630
630
631
631
// ---------------------------------------------------------
@@ -731,8 +731,8 @@ class LightweightSemaphore
731
731
} // end namespace moodycamel
732
732
733
733
#if defined(AE_VCPP) && (_MSC_VER < 1700 || defined(__cplusplus_cli))
734
- #pragma warning(pop)
735
- #ifdef __cplusplus_cli
736
- #pragma managed(pop)
737
- #endif
734
+ # pragma warning(pop)
735
+ # ifdef __cplusplus_cli
736
+ # pragma managed(pop)
737
+ # endif
738
738
#endif
0 commit comments