This makes it possible to add new uses of the underlying types for
these declarations without the "typedef" wrappers.  The following commit
will make use of that feature.

Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 lib/ovs-atomic-gcc4+.h    | 56 +++++++++++++++++++++----------------------
 lib/ovs-atomic-pthreads.h | 60 ++++++++++++++++++++++-------------------------
 2 files changed, 56 insertions(+), 60 deletions(-)

diff --git a/lib/ovs-atomic-gcc4+.h b/lib/ovs-atomic-gcc4+.h
index b465181..8e8b8e0 100644
--- a/lib/ovs-atomic-gcc4+.h
+++ b/lib/ovs-atomic-gcc4+.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Nicira, Inc.
+ * Copyright (c) 2013, 2014 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,28 +21,28 @@
 
 #define OVS_ATOMIC_GCC4P_IMPL 1
 
-#define DEFINE_LOCKLESS_ATOMIC(TYPE, NAME) typedef struct { TYPE value; } NAME
+#define LOCKLESS_ATOMIC(TYPE) struct { TYPE value; }
 
 #define ATOMIC_BOOL_LOCK_FREE 2
-DEFINE_LOCKLESS_ATOMIC(bool, atomic_bool);
+typedef LOCKLESS_ATOMIC(bool) atomic_bool;
 
 #define ATOMIC_CHAR_LOCK_FREE 2
-DEFINE_LOCKLESS_ATOMIC(char, atomic_char);
-DEFINE_LOCKLESS_ATOMIC(signed char, atomic_schar);
-DEFINE_LOCKLESS_ATOMIC(unsigned char, atomic_uchar);
+typedef LOCKLESS_ATOMIC(char) atomic_char;
+typedef LOCKLESS_ATOMIC(signed char) atomic_schar;
+typedef LOCKLESS_ATOMIC(unsigned char) atomic_uchar;
 
 #define ATOMIC_SHORT_LOCK_FREE 2
-DEFINE_LOCKLESS_ATOMIC(short, atomic_short);
-DEFINE_LOCKLESS_ATOMIC(unsigned short, atomic_ushort);
+typedef LOCKLESS_ATOMIC(short) atomic_short;
+typedef LOCKLESS_ATOMIC(unsigned short) atomic_ushort;
 
 #define ATOMIC_INT_LOCK_FREE 2
-DEFINE_LOCKLESS_ATOMIC(int, atomic_int);
-DEFINE_LOCKLESS_ATOMIC(unsigned int, atomic_uint);
+typedef LOCKLESS_ATOMIC(int) atomic_int;
+typedef LOCKLESS_ATOMIC(unsigned int) atomic_uint;
 
 #if ULONG_MAX <= UINTPTR_MAX
     #define ATOMIC_LONG_LOCK_FREE 2
-    DEFINE_LOCKLESS_ATOMIC(long, atomic_long);
-    DEFINE_LOCKLESS_ATOMIC(unsigned long, atomic_ulong);
+    typedef LOCKLESS_ATOMIC(long) atomic_long;
+    typedef LOCKLESS_ATOMIC(unsigned long) atomic_ulong;
 #elif ULONG_MAX == UINT64_MAX
     #define ATOMIC_LONG_LOCK_FREE 0
     typedef struct locked_int64  atomic_long;
@@ -53,8 +53,8 @@ DEFINE_LOCKLESS_ATOMIC(unsigned int, atomic_uint);
 
 #if ULLONG_MAX <= UINTPTR_MAX
     #define ATOMIC_LLONG_LOCK_FREE 2
-    DEFINE_LOCKLESS_ATOMIC(long long, atomic_llong);
-    DEFINE_LOCKLESS_ATOMIC(unsigned long long, atomic_ullong);
+    typedef LOCKLESS_ATOMIC(long long) atomic_llong;
+    typedef LOCKLESS_ATOMIC(unsigned long long) atomic_ullong;
 #elif ULLONG_MAX == UINT64_MAX
     #define ATOMIC_LLONG_LOCK_FREE 0
     typedef struct locked_int64  atomic_llong;
@@ -64,8 +64,8 @@ DEFINE_LOCKLESS_ATOMIC(unsigned int, atomic_uint);
 #endif
 
 #if SIZE_MAX <= UINTPTR_MAX
-    DEFINE_LOCKLESS_ATOMIC(size_t, atomic_size_t);
-    DEFINE_LOCKLESS_ATOMIC(ptrdiff_t, atomic_ptrdiff_t);
+    typedef LOCKLESS_ATOMIC(size_t) atomic_size_t;
+    typedef LOCKLESS_ATOMIC(ptrdiff_t) atomic_ptrdiff_t;
 #elif SIZE_MAX == UINT64_MAX
     typedef struct locked_uint64 atomic_size_t;
     typedef struct locked_int64  atomic_ptrdiff_t;
@@ -74,8 +74,8 @@ DEFINE_LOCKLESS_ATOMIC(unsigned int, atomic_uint);
 #endif
 
 #if UINTMAX_MAX <= UINTPTR_MAX
-    DEFINE_LOCKLESS_ATOMIC(intmax_t, atomic_intmax_t);
-    DEFINE_LOCKLESS_ATOMIC(uintmax_t, atomic_uintmax_t);
+    typedef LOCKLESS_ATOMIC(intmax_t) atomic_intmax_t;
+    typedef LOCKLESS_ATOMIC(uintmax_t) atomic_uintmax_t;
 #elif UINTMAX_MAX == UINT64_MAX
     typedef struct locked_int64  atomic_intmax_t;
     typedef struct locked_uint64 atomic_uintmax_t;
@@ -84,19 +84,19 @@ DEFINE_LOCKLESS_ATOMIC(unsigned int, atomic_uint);
 #endif
 
 #define ATOMIC_POINTER_LOCK_FREE 2
-DEFINE_LOCKLESS_ATOMIC(intptr_t, atomic_intptr_t);
-DEFINE_LOCKLESS_ATOMIC(uintptr_t, atomic_uintptr_t);
+typedef LOCKLESS_ATOMIC(intptr_t) atomic_intptr_t;
+typedef LOCKLESS_ATOMIC(uintptr_t) atomic_uintptr_t;
 
 /* Nonstandard atomic types. */
-DEFINE_LOCKLESS_ATOMIC(uint8_t,  atomic_uint8_t);
-DEFINE_LOCKLESS_ATOMIC(uint16_t, atomic_uint16_t);
-DEFINE_LOCKLESS_ATOMIC(uint32_t, atomic_uint32_t);
-DEFINE_LOCKLESS_ATOMIC(int8_t,   atomic_int8_t);
-DEFINE_LOCKLESS_ATOMIC(int16_t,  atomic_int16_t);
-DEFINE_LOCKLESS_ATOMIC(int32_t,  atomic_int32_t);
+typedef LOCKLESS_ATOMIC(uint8_t) atomic_uint8_t;
+typedef LOCKLESS_ATOMIC(uint16_t) atomic_uint16_t;
+typedef LOCKLESS_ATOMIC(uint32_t) atomic_uint32_t;
+typedef LOCKLESS_ATOMIC(int8_t) atomic_int8_t;
+typedef LOCKLESS_ATOMIC(int16_t) atomic_int16_t;
+typedef LOCKLESS_ATOMIC(int32_t) atomic_int32_t;
 #if UINT64_MAX <= UINTPTR_MAX
-    DEFINE_LOCKLESS_ATOMIC(uint64_t, atomic_uint64_t);
-    DEFINE_LOCKLESS_ATOMIC(int64_t,  atomic_int64_t);
+    typedef LOCKLESS_ATOMIC(uint64_t) atomic_uint64_t;
+    typedef LOCKLESS_ATOMIC(int64_t) atomic_int64_t;
 #else
     typedef struct locked_uint64 atomic_uint64_t;
     typedef struct locked_int64  atomic_int64_t;
diff --git a/lib/ovs-atomic-pthreads.h b/lib/ovs-atomic-pthreads.h
index dc8f498..b0ca524 100644
--- a/lib/ovs-atomic-pthreads.h
+++ b/lib/ovs-atomic-pthreads.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Nicira, Inc.
+ * Copyright (c) 2013, 2014 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,55 +21,51 @@
 
 #define OVS_ATOMIC_PTHREADS_IMPL 1
 
-#define DEFINE_PTHREAD_ATOMIC(TYPE, NAME)       \
-    typedef struct {                            \
-        TYPE value;                             \
-        pthread_mutex_t mutex;                  \
-    } NAME;
+#define PTHREAD_ATOMIC_TYPE(TYPE) struct { TYPE value; pthread_mutex_t mutex; }
 
 #define ATOMIC_BOOL_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(bool, atomic_bool);
+typedef PTHREAD_ATOMIC_TYPE(bool) atomic_bool;
 
 #define ATOMIC_CHAR_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(char, atomic_char);
-DEFINE_PTHREAD_ATOMIC(signed char, atomic_schar);
-DEFINE_PTHREAD_ATOMIC(unsigned char, atomic_uchar);
+typedef PTHREAD_ATOMIC_TYPE(char) atomic_char;
+typedef PTHREAD_ATOMIC_TYPE(signed char) atomic_schar;
+typedef PTHREAD_ATOMIC_TYPE(unsigned char) atomic_uchar;
 
 #define ATOMIC_SHORT_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(short, atomic_short);
-DEFINE_PTHREAD_ATOMIC(unsigned short, atomic_ushort);
+typedef PTHREAD_ATOMIC_TYPE(short) atomic_short;
+typedef PTHREAD_ATOMIC_TYPE(unsigned short) atomic_ushort;
 
 #define ATOMIC_INT_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(int, atomic_int);
-DEFINE_PTHREAD_ATOMIC(unsigned int, atomic_uint);
+typedef PTHREAD_ATOMIC_TYPE(int) atomic_int;
+typedef PTHREAD_ATOMIC_TYPE(unsigned int) atomic_uint;
 
 #define ATOMIC_LONG_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(long, atomic_long);
-DEFINE_PTHREAD_ATOMIC(unsigned long, atomic_ulong);
+typedef PTHREAD_ATOMIC_TYPE(long) atomic_long;
+typedef PTHREAD_ATOMIC_TYPE(unsigned long) atomic_ulong;
 
 #define ATOMIC_LLONG_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(long long, atomic_llong);
-DEFINE_PTHREAD_ATOMIC(unsigned long long, atomic_ullong);
+typedef PTHREAD_ATOMIC_TYPE(long long) atomic_llong;
+typedef PTHREAD_ATOMIC_TYPE(unsigned long long) atomic_ullong;
 
-DEFINE_PTHREAD_ATOMIC(size_t, atomic_size_t);
-DEFINE_PTHREAD_ATOMIC(ptrdiff_t, atomic_ptrdiff_t);
+typedef PTHREAD_ATOMIC_TYPE(size_t) atomic_size_t;
+typedef PTHREAD_ATOMIC_TYPE(ptrdiff_t) atomic_ptrdiff_t;
 
-DEFINE_PTHREAD_ATOMIC(intmax_t, atomic_intmax_t);
-DEFINE_PTHREAD_ATOMIC(uintmax_t, atomic_uintmax_t);
+typedef PTHREAD_ATOMIC_TYPE(intmax_t) atomic_intmax_t;
+typedef PTHREAD_ATOMIC_TYPE(uintmax_t) atomic_uintmax_t;
 
 #define ATOMIC_POINTER_LOCK_FREE 0
-DEFINE_PTHREAD_ATOMIC(intptr_t, atomic_intptr_t);
-DEFINE_PTHREAD_ATOMIC(uintptr_t, atomic_uintptr_t);
+typedef PTHREAD_ATOMIC_TYPE(intptr_t) atomic_intptr_t;
+typedef PTHREAD_ATOMIC_TYPE(uintptr_t) atomic_uintptr_t;
 
 /* Nonstandard atomic types. */
-DEFINE_PTHREAD_ATOMIC(uint8_t,  atomic_uint8_t);
-DEFINE_PTHREAD_ATOMIC(uint16_t, atomic_uint16_t);
-DEFINE_PTHREAD_ATOMIC(uint32_t, atomic_uint32_t);
-DEFINE_PTHREAD_ATOMIC(int8_t,   atomic_int8_t);
-DEFINE_PTHREAD_ATOMIC(int16_t,  atomic_int16_t);
-DEFINE_PTHREAD_ATOMIC(int32_t,  atomic_int32_t);
-DEFINE_PTHREAD_ATOMIC(uint64_t, atomic_uint64_t);
-DEFINE_PTHREAD_ATOMIC(int64_t,  atomic_int64_t);
+typedef PTHREAD_ATOMIC_TYPE(uint8_t) atomic_uint8_t;
+typedef PTHREAD_ATOMIC_TYPE(uint16_t) atomic_uint16_t;
+typedef PTHREAD_ATOMIC_TYPE(uint32_t) atomic_uint32_t;
+typedef PTHREAD_ATOMIC_TYPE(int8_t) atomic_int8_t;
+typedef PTHREAD_ATOMIC_TYPE(int16_t) atomic_int16_t;
+typedef PTHREAD_ATOMIC_TYPE(int32_t) atomic_int32_t;
+typedef PTHREAD_ATOMIC_TYPE(uint64_t) atomic_uint64_t;
+typedef PTHREAD_ATOMIC_TYPE(int64_t) atomic_int64_t;
 
 typedef enum {
     memory_order_relaxed,
-- 
1.8.5.3

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to