class adapt< boost::intrusive::avl_set< T, P1, P2, P3, P4, P5 >, Options... >
{
public:
- typedef boost::intrusive::avl_set< T > container_type; ///< underlying intrusive container type
+ typedef boost::intrusive::avl_set< T, P1, P2, P3, P4, P5 > container_type; ///< underlying intrusive container type
public:
typedef details::boost_intrusive_set_adapter<container_type> type; ///< Result of the metafunction
{
const atomics::memory_order oLoad = convert_to_load_order( order );
const atomics::memory_order oStore = convert_to_store_order( order );
+ const atomics::memory_order oExchange = convert_to_exchange_order( order );
CPPUNIT_ASSERT( a.is_lock_free() );
a.store( false, oStore );
CPPUNIT_ASSERT( a == false );
CPPUNIT_ASSERT( a.load( oLoad ) == false );
- CPPUNIT_ASSERT( a.exchange( true, order ) == false );
+ CPPUNIT_ASSERT( a.exchange( true, oExchange ) == false );
CPPUNIT_ASSERT( a.load( oLoad ) == true );
- CPPUNIT_ASSERT( a.exchange( false, order ) == true );
+ CPPUNIT_ASSERT( a.exchange( false, oExchange ) == true );
CPPUNIT_ASSERT( a.load( oLoad ) == false );
bool expected = false;
CPPUNIT_ASSERT( a.load( oLoad ) == true );
- CPPUNIT_ASSERT( a.exchange( false, order ) == true );
+ CPPUNIT_ASSERT( a.exchange( false, oExchange ) == true );
}
void test_atomic_unsigned_long() { test_atomic_integral<unsigned long>(); }
void test_atomic_long_long() { test_atomic_integral<long long>(); }
void test_atomic_unsigned_long_long() { test_atomic_integral<unsigned long long>(); }
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// void test_atomic_char16_t() { test_atomic_integral<char16_t>(); }
-// void test_atomic_char32_t() { test_atomic_integral<char32_t>(); }
-//#endif
-// void test_atomic_wchar_t()
-// {
-//#if CDS_OS_TYPE != CDS_OS_HPUX
-// test_atomic_integral<wchar_t>();
-//#endif
-// }
void test_atomic_char_volatile() { test_atomic_integral_volatile<char>(); }
void test_atomic_signed_char_volatile() { test_atomic_integral_volatile<signed char>(); }
void test_atomic_unsigned_long_volatile() { test_atomic_integral_volatile<unsigned long>(); }
void test_atomic_long_long_volatile() { test_atomic_integral_volatile<long long>(); }
void test_atomic_unsigned_long_long_volatile() { test_atomic_integral_volatile<unsigned long long>(); }
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// void test_atomic_char16_t_volatile() { test_atomic_integral_volatile<char16_t>(); }
-// void test_atomic_char32_t_volatile() { test_atomic_integral_volatile<char32_t>(); }
-//#endif
-// void test_atomic_wchar_t_volatile()
-// {
-//#if CDS_OS_TYPE != CDS_OS_HPUX
-// test_atomic_integral_volatile<wchar_t>();
-//#endif
-// }
void test_atomic_pointer_void() { do_test_atomic_pointer_void<false>() ;}
void test_atomic_pointer_void_volatile(){ do_test_atomic_pointer_void<true>() ;}
CPPUNIT_TEST( test_atomic_unsigned_long)
CPPUNIT_TEST( test_atomic_long_long)
CPPUNIT_TEST( test_atomic_unsigned_long_long)
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// CPPUNIT_TEST( test_atomic_char16_t )
-// CPPUNIT_TEST( test_atomic_char32_t )
-//#endif
-// CPPUNIT_TEST( test_atomic_wchar_t)
CPPUNIT_TEST( test_atomic_bool_volatile )
CPPUNIT_TEST( test_atomic_char_volatile )
CPPUNIT_TEST( test_atomic_unsigned_long_volatile)
CPPUNIT_TEST( test_atomic_long_long_volatile)
CPPUNIT_TEST( test_atomic_unsigned_long_long_volatile)
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// CPPUNIT_TEST( test_atomic_char16_t_volatile )
-// CPPUNIT_TEST( test_atomic_char32_t_volatile )
-//#endif
-// CPPUNIT_TEST( test_atomic_wchar_t_volatile)
CPPUNIT_TEST( test_atomic_pointer_void)
CPPUNIT_TEST( test_atomic_pointer_void_volatile)
{
const atomics::memory_order oLoad = convert_to_load_order( order );
const atomics::memory_order oStore = convert_to_store_order( order );
+ const atomics::memory_order oExchange = convert_to_exchange_order( order );
CPPUNIT_ASSERT( atomics::atomic_is_lock_free( &a ) );
atomics::atomic_store_explicit( &a, false, oStore );
CPPUNIT_ASSERT( a == false );
CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == false );
- CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, true, order ) == false );
+ CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, true, oExchange ) == false );
CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == true );
- CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, false, order ) == true );
+ CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, false, oExchange ) == true );
CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == false );
bool expected = false;
CPPUNIT_ASSERT( atomics::atomic_load_explicit( &a, oLoad ) == true );
- CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, false, order ) == true );
+ CPPUNIT_ASSERT( atomics::atomic_exchange_explicit( &a, false, oExchange ) == true );
}
template <typename Atomic, typename Integral>
void test_atomic_long_long_volatile() { test_atomic_integral_volatile<long long>(); }
void test_atomic_unsigned_long_long() { test_atomic_integral<unsigned long long>(); }
void test_atomic_unsigned_long_long_volatile() { test_atomic_integral_volatile<unsigned long long>(); }
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// void test_atomic_char16_t() { test_atomic_integral<char16_t>(); }
-// void test_atomic_char16_t_volatile() { test_atomic_integral_volatile<char16_t>(); }
-// void test_atomic_char32_t() { test_atomic_integral<char32_t>(); }
-// void test_atomic_char32_t_volatile() { test_atomic_integral_volatile<char32_t>(); }
-//#endif
-// void test_atomic_wchar_t()
-// {
-//#if CDS_OS_TYPE != CDS_OS_HPUX
-// test_atomic_integral<wchar_t>();
-//#endif
-// }
-// void test_atomic_wchar_t_volatile()
-// {
-//#if CDS_OS_TYPE != CDS_OS_HPUX
-// test_atomic_integral_volatile<wchar_t>();
-//#endif
-// }
void test_atomic_pointer_void() { do_test_atomic_pointer_void<false>() ;}
void test_atomic_pointer_void_volatile(){ do_test_atomic_pointer_void<true>() ;}
CPPUNIT_TEST( test_atomic_unsigned_long)
CPPUNIT_TEST( test_atomic_long_long)
CPPUNIT_TEST( test_atomic_unsigned_long_long)
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// CPPUNIT_TEST( test_atomic_char16_t )
-// CPPUNIT_TEST( test_atomic_char32_t )
-//#endif
-// CPPUNIT_TEST( test_atomic_wchar_t)
CPPUNIT_TEST( test_atomic_bool_volatile )
CPPUNIT_TEST( test_atomic_char_volatile )
CPPUNIT_TEST( test_atomic_unsigned_long_volatile)
CPPUNIT_TEST( test_atomic_long_long_volatile)
CPPUNIT_TEST( test_atomic_unsigned_long_long_volatile)
-//#if CDS_COMPILER == CDS_COMPILER_GCC && CDS_COMPILER_VERSION >= 40400
-// CPPUNIT_TEST( test_atomic_char16_t_volatile )
-// CPPUNIT_TEST( test_atomic_char32_t_volatile )
-//#endif
-// CPPUNIT_TEST( test_atomic_wchar_t_volatile)
CPPUNIT_TEST( test_atomic_pointer_void)
CPPUNIT_TEST( test_atomic_pointer_void_volatile)
}
}
+#if CDS_COMPILER == CDS_COMPILER_INTEL
+ static inline atomics::memory_order convert_to_exchange_order( atomics::memory_order order )
+ {
+ return order == atomics::memory_order_consume ? atomics::memory_order_relaxed : order;
+ }
+#else
+ static inline atomics::memory_order convert_to_exchange_order( atomics::memory_order order )
+ {
+ return order;
+ }
+#endif
+
template <typename T, bool Volatile>
struct add_volatile;