cf6be7250a21f98f143cf4af5bf5cf0245b5cfac
[libcds.git] / tests / test-hdr / misc / cxx11_convert_memory_order.h
1 //$$CDS-header$$
2
3 // This header should be included AFTER <cds/cxx11_atomic.h> if needed
4
5 namespace misc {
6
7     static inline atomics::memory_order convert_to_store_order( atomics::memory_order order )
8     {
9         switch ( order ) {
10             case atomics::memory_order_acquire:
11             case atomics::memory_order_consume:
12                 return atomics::memory_order_relaxed;
13             case atomics::memory_order_acq_rel:
14                 return atomics::memory_order_release;
15             default:
16                 return order;
17         }
18     }
19
20     static inline atomics::memory_order convert_to_load_order( atomics::memory_order order )
21     {
22         switch ( order ) {
23             case atomics::memory_order_release:
24                 return atomics::memory_order_relaxed;
25             case atomics::memory_order_acq_rel:
26                 return atomics::memory_order_acquire;
27             default:
28                 return order;
29         }
30     }
31
32     template <typename T, bool Volatile>
33     struct add_volatile;
34
35     template <typename T>
36     struct add_volatile<T, false>
37     {
38         typedef T   type;
39     };
40
41     template <typename T>
42     struct add_volatile<T, true>
43     {
44         typedef T volatile   type;
45     };
46
47 } // namespace misc