Add back-off strategy to EllenBinTree
authorkhizmax <khizmax@gmail.com>
Wed, 12 Nov 2014 09:22:18 +0000 (12:22 +0300)
committerkhizmax <khizmax@gmail.com>
Wed, 12 Nov 2014 09:22:18 +0000 (12:22 +0300)
43 files changed:
cds/container/details/ellen_bintree_base.h
cds/container/ellen_bintree_map_rcu.h
cds/container/ellen_bintree_set_rcu.h
cds/container/impl/ellen_bintree_map.h
cds/container/impl/ellen_bintree_set.h
cds/intrusive/details/ellen_bintree_base.h
cds/intrusive/ellen_bintree_rcu.h
cds/intrusive/impl/ellen_bintree.h
tests/test-hdr/tree/hdr_ellenbintree_map.h
tests/test-hdr/tree/hdr_ellenbintree_map_dhp.cpp
tests/test-hdr/tree/hdr_ellenbintree_map_hp.cpp
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpb.cpp
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpi.cpp
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_gpt.cpp
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_shb.cpp
tests/test-hdr/tree/hdr_ellenbintree_map_rcu_sht.cpp
tests/test-hdr/tree/hdr_ellenbintree_set.h
tests/test-hdr/tree/hdr_ellenbintree_set_dhp.cpp
tests/test-hdr/tree/hdr_ellenbintree_set_hp.cpp
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpb.cpp
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpi.cpp
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_gpt.cpp
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_shb.cpp
tests/test-hdr/tree/hdr_ellenbintree_set_rcu_sht.cpp
tests/test-hdr/tree/hdr_intrusive_bintree.h
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp_member.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpb_member.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpi_member.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_gpt_member.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_shb_member.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht.cpp
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp
tests/unit/map2/map_defs.h
tests/unit/map2/map_types.h
tests/unit/set2/set_defs.h
tests/unit/set2/set_types.h

index f8e11fd..1439b82 100644 (file)
@@ -180,6 +180,9 @@ namespace cds { namespace container {
             */
             typedef empty_stat                      stat;
 
+            /// Back-off strategy
+            typedef cds::backoff::empty             back_off;
+
             /// RCU deadlock checking policy (only for RCU-based EllenBinTree<i>XXX</i> classes)
             /**
                 List of available options see \p opt::rcu_check_deadlock
@@ -234,6 +237,7 @@ namespace cds { namespace container {
                 stored in the tree so single free-list object can be used for several EllenBinTree-based object.
             - \p opt::stat - internal statistics, by default disabled (\p ellen_bintree::empty_stat). To enable
                 it use \p ellen_bintree::stat.
+            - \p opt::backoff - back-off strategy, by default no strategy is used (\p cds::backoff::empty)
             - \p opt::rcu_check_deadlock - a deadlock checking policy, only for RCU-based tree. 
                 Default is \p opt::v::rcu_throw_deadlock.
         */
@@ -274,6 +278,7 @@ namespace cds { namespace container {
                 stored in the tree so single free-list object can be used for several EllenBinTree-based object.
             - \p opt::stat - internal statistics, by default disabled (\p ellen_bintree::empty_stat). To enable
                 it use \p ellen_bintree::stat.
+            - \p opt::backoff - back-off strategy, by default no strategy is used (\p cds::backoff::empty)
             - \p opt::rcu_check_deadlock - a deadlock checking policy, only for RCU-based tree. Default is \p opt::v::rcu_throw_deadlock
             - opt::copy_policy - key copying policy defines a functor to copy leaf node's key to internal node.
                 By default, assignment operator is used.
index e3ad613..d5852f6 100644 (file)
@@ -86,6 +86,8 @@ namespace cds { namespace container {
         typedef typename base_class::stat                   stat;               ///< internal statistics
         typedef typename base_class::rcu_check_deadlock     rcu_check_deadlock; ///< Deadlock checking policy
         typedef typename traits::copy_policy                copy_policy;        ///< key copy policy
+        typedef typename traits::back_off                   back_off;           ///< Back-off strategy
+
 
         typedef typename traits::allocator                  allocator_type;        ///< Allocator for leaf nodes
         typedef typename base_class::node_allocator         node_allocator;        ///< Internal node allocator
index f0a0049..4c802c9 100644 (file)
@@ -124,6 +124,8 @@ namespace cds { namespace container {
         typedef typename base_class::stat                   stat;               ///< internal statistics type
         typedef typename base_class::rcu_check_deadlock     rcu_check_deadlock; ///< Deadlock checking policy
         typedef typename traits::key_extractor              key_extractor;      ///< key extracting functor
+        typedef typename traits::back_off                   back_off;           ///< Back-off strategy
+
 
         typedef typename traits::allocator                  allocator_type;     ///< Allocator for leaf nodes
         typedef typename base_class::node_allocator         node_allocator;     ///< Internal node allocator
index c8dab92..3ca0dbf 100644 (file)
@@ -92,6 +92,7 @@ namespace cds { namespace container {
         typedef typename base_class::node_allocator         node_allocator_type; ///< allocator for maintaining internal node
         typedef typename base_class::stat                   stat;         ///< internal statistics type
         typedef typename traits::copy_policy                copy_policy;  ///< key copy policy
+        typedef typename traits::back_off                   back_off;      ///< Back-off strategy
 
         typedef typename traits::allocator                  allocator_type;   ///< Allocator for leaf nodes
         typedef typename base_class::node_allocator         node_allocator;   ///< Internal node allocator
index 13f75fb..432947e 100644 (file)
@@ -129,6 +129,7 @@ namespace cds { namespace container {
         typedef typename base_class::memory_model           memory_model;  ///< Memory ordering. See cds::opt::memory_model option
         typedef typename base_class::stat                   stat;          ///< internal statistics type
         typedef typename traits::key_extractor              key_extractor; ///< key extracting functor
+        typedef typename traits::back_off                   back_off;      ///< Back-off strategy
 
         typedef typename traits::allocator                  allocator_type;   ///< Allocator for leaf nodes
         typedef typename base_class::node_allocator         node_allocator;   ///< Internal node allocator
index f0d9ffc..2049781 100644 (file)
@@ -9,6 +9,7 @@
 #include <cds/urcu/options.h>
 #include <cds/details/marked_ptr.h>
 #include <cds/details/allocator.h>
+#include <cds/algo/backoff_strategy.h>
 
 namespace cds { namespace intrusive {
 
@@ -518,6 +519,9 @@ namespace cds { namespace intrusive {
             */
             typedef empty_stat                      stat;
 
+            /// Back-off strategy
+            typedef cds::backoff::empty             back_off;
+
             /// RCU deadlock checking policy (only for \ref cds_intrusive_EllenBinTree_rcu "RCU-based EllenBinTree")
             /**
                 List of available options see \p opt::rcu_check_deadlock
@@ -558,6 +562,7 @@ namespace cds { namespace intrusive {
             - \p opt::node_allocator - the allocator for internal nodes. Default is \ref CDS_DEFAULT_ALLOCATOR.
             - \p opt::stat - internal statistics, by default it is disabled (\p ellen_bintree::empty_stat)
                 To enable statistics use \p \p ellen_bintree::stat
+            - \p opt::backoff - back-off strategy, by default no strategy is used (\p cds::backoff::empty)
             - \p opt::rcu_check_deadlock - a deadlock checking policy for RCU-based tree, default is \p opt::v::rcu_throw_deadlock
         */
         template <typename... Options>
index 79b9e75..55e8051 100644 (file)
@@ -436,6 +436,7 @@ namespace cds { namespace intrusive {
         typedef typename hook::node_type node_type; ///< node type
 
         typedef typename traits::disposer disposer;   ///< leaf node disposer
+        typedef typename traits::back_off back_off;   ///< back-off strategy
 
     protected:
         //@cond
@@ -734,6 +735,7 @@ namespace cds { namespace intrusive {
 
             unique_internal_node_ptr pNewInternal;
             retired_list updRetire;
+            back_off bkoff;
 
             {
                 rcu_lock l;
@@ -760,6 +762,7 @@ namespace cds { namespace intrusive {
                         }
                     }
 
+                    bkoff();
                     m_Stat.onInsertRetry();
                 }
             }
@@ -805,6 +808,7 @@ namespace cds { namespace intrusive {
 
             unique_internal_node_ptr pNewInternal;
             retired_list updRetire;
+            back_off bkoff;
 
             {
                 rcu_lock l;
@@ -831,6 +835,8 @@ namespace cds { namespace intrusive {
                             break;
                         }
                     }
+
+                    bkoff();
                     m_Stat.onEnsureRetry();
                 }
             }
@@ -1577,6 +1583,7 @@ namespace cds { namespace intrusive {
             retired_list updRetire;
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             {
                 rcu_lock l;
@@ -1622,6 +1629,7 @@ namespace cds { namespace intrusive {
                         }
                     }
 
+                    bkoff();
                     m_Stat.onEraseRetry();
                 }
             }
@@ -1652,6 +1660,7 @@ namespace cds { namespace intrusive {
             retired_list updRetire;
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             {
                 rcu_lock l;
@@ -1696,6 +1705,7 @@ namespace cds { namespace intrusive {
                         }
                     }
 
+                    bkoff();
                     m_Stat.onEraseRetry();
                 }
             }
@@ -1714,6 +1724,7 @@ namespace cds { namespace intrusive {
             retired_list updRetire;
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             {
                 rcu_lock l;
@@ -1758,6 +1769,8 @@ namespace cds { namespace intrusive {
                             }
                         }
                     }
+
+                    bkoff();
                     m_Stat.onExtractMaxRetry();
                 }
             }
@@ -1775,6 +1788,7 @@ namespace cds { namespace intrusive {
             retired_list updRetire;
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             {
                 rcu_lock l;
@@ -1820,6 +1834,7 @@ namespace cds { namespace intrusive {
                         }
                     }
 
+                    bkoff();
                     m_Stat.onExtractMinRetry();
                 }
             }
index 06baed3..ca9fa2d 100644 (file)
@@ -117,6 +117,7 @@ namespace cds { namespace intrusive {
         typedef typename traits::hook      hook;        ///< hook type
         typedef typename hook::node_type   node_type;   ///< node type
         typedef typename traits::disposer  disposer;    ///< leaf node disposer
+        typedef typename traits::back_off  back_off;    ///< back-off strategy
 
         typedef cds::gc::guarded_ptr< gc, value_type > guarded_ptr; ///< Guarded pointer
 
@@ -339,8 +340,9 @@ namespace cds { namespace intrusive {
             guardInsert.assign( &val );
 
             unique_internal_node_ptr pNewInternal;
-
             search_result res;
+            back_off bkoff;
+
             for ( ;; ) {
                 if ( search( res, val, node_compare() )) {
                     if ( pNewInternal.get() )
@@ -361,6 +363,7 @@ namespace cds { namespace intrusive {
                     }
                 }
 
+                bkoff();
                 m_Stat.onInsertRetry();
             }
 
@@ -402,8 +405,9 @@ namespace cds { namespace intrusive {
             guardInsert.assign( &val );
 
             unique_internal_node_ptr pNewInternal;
-
             search_result res;
+            back_off bkoff;
+
             for ( ;; ) {
                 if ( search( res, val, node_compare() )) {
                     func( false, *node_traits::to_value_ptr( res.pLeaf ), val );
@@ -424,6 +428,8 @@ namespace cds { namespace intrusive {
                         break;
                     }
                 }
+
+                bkoff();
                 m_Stat.onEnsureRetry();
             }
 
@@ -1058,6 +1064,7 @@ namespace cds { namespace intrusive {
             return true;
         }
 
+        /*
         void help( update_ptr pUpdate )
         {
             // pUpdate must be guarded!
@@ -1076,6 +1083,7 @@ namespace cds { namespace intrusive {
                     break;
             }
         }
+        */
 
         void help_insert( update_desc * pOp )
         {
@@ -1198,18 +1206,17 @@ namespace cds { namespace intrusive {
             assert( res.pLeaf->is_leaf() );
 
             // check search result
-            if ( ( res.bRightLeaf
+            if ( (res.bRightLeaf
                 ? res.pParent->m_pRight.load( memory_model::memory_order_acquire )
-                : res.pParent->m_pLeft.load( memory_model::memory_order_acquire ) ) == res.pLeaf )
-            {
+                : res.pParent->m_pLeft.load( memory_model::memory_order_acquire )) == res.pLeaf ) {
                 leaf_node * pNewLeaf = node_traits::to_node_ptr( val );
 
-                int nCmp = node_compare()( val, *res.pLeaf );
+                int nCmp = node_compare()(val, *res.pLeaf);
                 if ( nCmp < 0 ) {
                     if ( res.pGrandParent ) {
                         assert( !res.pLeaf->infinite_key() );
                         pNewInternal->infinite_key( 0 );
-                        key_extractor()( pNewInternal->m_Key, *node_traits::to_value_ptr( res.pLeaf ) );
+                        key_extractor()(pNewInternal->m_Key, *node_traits::to_value_ptr( res.pLeaf ));
                     }
                     else {
                         assert( res.pLeaf->infinite_key() == tree_node::key_infinite1 );
@@ -1222,10 +1229,10 @@ namespace cds { namespace intrusive {
                     assert( !res.pLeaf->is_internal() );
                     pNewInternal->infinite_key( 0 );
 
-                    key_extractor()( pNewInternal->m_Key, val );
+                    key_extractor()(pNewInternal->m_Key, val);
                     pNewInternal->m_pLeft.store( static_cast<tree_node *>(res.pLeaf), memory_model::memory_order_relaxed );
                     pNewInternal->m_pRight.store( static_cast<tree_node *>(pNewLeaf), memory_model::memory_order_release );
-                    assert( !res.pLeaf->infinite_key());
+                    assert( !res.pLeaf->infinite_key() );
                 }
 
                 typename gc::Guard guard;
@@ -1239,8 +1246,7 @@ namespace cds { namespace intrusive {
 
                 update_ptr updCur( res.updParent.ptr() );
                 if ( res.pParent->m_pUpdate.compare_exchange_strong( updCur, update_ptr( pOp, update_desc::IFlag ),
-                    memory_model::memory_order_acquire, atomics::memory_order_relaxed ))
-                {
+                    memory_model::memory_order_acquire, atomics::memory_order_relaxed ) ) {
                     // do insert
                     help_insert( pOp );
                     retire_update_desc( pOp );
@@ -1251,6 +1257,7 @@ namespace cds { namespace intrusive {
                     free_update_desc( pOp );
                 }
             }
+
             return false;
         }
 
@@ -1259,6 +1266,7 @@ namespace cds { namespace intrusive {
         {
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             for ( ;; ) {
                 if ( !search( res, val, cmp ) || !eq( val, *res.pLeaf ) ) {
@@ -1284,11 +1292,10 @@ namespace cds { namespace intrusive {
 
                         update_ptr updGP( res.updGrandParent.ptr() );
                         if ( res.pGrandParent->m_pUpdate.compare_exchange_strong( updGP, update_ptr( pOp, update_desc::DFlag ),
-                            memory_model::memory_order_acquire, atomics::memory_order_relaxed ))
-                        {
-                            if ( help_delete( pOp )) {
+                            memory_model::memory_order_acquire, atomics::memory_order_relaxed ) ) {
+                            if ( help_delete( pOp ) ) {
                                 // res.pLeaf is not deleted yet since it is guarded
-                                f( *node_traits::to_value_ptr( res.pLeaf ));
+                                f( *node_traits::to_value_ptr( res.pLeaf ) );
                                 break;
                             }
                             pOp = nullptr;
@@ -1296,6 +1303,7 @@ namespace cds { namespace intrusive {
                     }
                 }
 
+                bkoff();
                 m_Stat.onEraseRetry();
             }
 
@@ -1331,6 +1339,7 @@ namespace cds { namespace intrusive {
         {
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             for ( ;; ) {
                 if ( !search_max( res )) {
@@ -1341,7 +1350,7 @@ namespace cds { namespace intrusive {
                     return false;
                 }
 
-                if ( res.updGrandParent.bits() == update_desc::Clean && res.updParent.bits() == update_desc::Clean )  {
+                if ( res.updGrandParent.bits() == update_desc::Clean && res.updParent.bits() == update_desc::Clean ) {
                     if ( !pOp )
                         pOp = alloc_update_desc();
                     if ( check_delete_precondition( res ) ) {
@@ -1357,15 +1366,16 @@ namespace cds { namespace intrusive {
 
                         update_ptr updGP( res.updGrandParent.ptr() );
                         if ( res.pGrandParent->m_pUpdate.compare_exchange_strong( updGP, update_ptr( pOp, update_desc::DFlag ),
-                            memory_model::memory_order_acquire, atomics::memory_order_relaxed ))
+                                memory_model::memory_order_acquire, atomics::memory_order_relaxed ) ) 
                         {
-                            if ( help_delete( pOp ))
+                            if ( help_delete( pOp ) )
                                 break;
                             pOp = nullptr;
                         }
                     }
                 }
 
+                bkoff();
                 m_Stat.onExtractMaxRetry();
             }
 
@@ -1379,6 +1389,7 @@ namespace cds { namespace intrusive {
         {
             update_desc * pOp = nullptr;
             search_result res;
+            back_off bkoff;
 
             for ( ;; ) {
                 if ( !search_min( res )) {
@@ -1414,6 +1425,7 @@ namespace cds { namespace intrusive {
                     }
                 }
 
+                bkoff();
                 m_Stat.onExtractMinRetry();
             }
 
index d917bc8..033db4e 100644 (file)
@@ -553,16 +553,6 @@ namespace tree {
             PrintStat()( m );
         }
 
-        void EllenBinTree_rcu_gpi_less();
-        void EllenBinTree_rcu_gpi_cmp();
-        void EllenBinTree_rcu_gpi_cmpless();
-        void EllenBinTree_rcu_gpi_less_ic();
-        void EllenBinTree_rcu_gpi_cmp_ic();
-        void EllenBinTree_rcu_gpi_less_stat();
-        void EllenBinTree_rcu_gpi_cmp_ic_stat();
-        void EllenBinTree_rcu_gpi_less_pool();
-        void EllenBinTree_rcu_gpi_less_pool_ic_stat();
-
         void EllenBinTree_hp_less();
         void EllenBinTree_hp_cmp();
         void EllenBinTree_hp_cmpless();
@@ -570,6 +560,7 @@ namespace tree {
         void EllenBinTree_hp_cmp_ic();
         void EllenBinTree_hp_less_stat();
         void EllenBinTree_hp_cmp_ic_stat();
+        void EllenBinTree_hp_cmp_ic_stat_yield();
         void EllenBinTree_hp_less_pool();
         void EllenBinTree_hp_less_pool_ic_stat();
 
@@ -580,9 +571,21 @@ namespace tree {
         void EllenBinTree_dhp_cmp_ic();
         void EllenBinTree_dhp_less_stat();
         void EllenBinTree_dhp_cmp_ic_stat();
+        void EllenBinTree_dhp_cmp_ic_stat_yield();
         void EllenBinTree_dhp_less_pool();
         void EllenBinTree_dhp_less_pool_ic_stat();
 
+        void EllenBinTree_rcu_gpi_less();
+        void EllenBinTree_rcu_gpi_cmp();
+        void EllenBinTree_rcu_gpi_cmpless();
+        void EllenBinTree_rcu_gpi_less_ic();
+        void EllenBinTree_rcu_gpi_cmp_ic();
+        void EllenBinTree_rcu_gpi_less_stat();
+        void EllenBinTree_rcu_gpi_cmp_ic_stat();
+        void EllenBinTree_rcu_gpi_cmp_ic_stat_yield();
+        void EllenBinTree_rcu_gpi_less_pool();
+        void EllenBinTree_rcu_gpi_less_pool_ic_stat();
+
         void EllenBinTree_rcu_gpb_less();
         void EllenBinTree_rcu_gpb_cmp();
         void EllenBinTree_rcu_gpb_cmpless();
@@ -590,6 +593,7 @@ namespace tree {
         void EllenBinTree_rcu_gpb_cmp_ic();
         void EllenBinTree_rcu_gpb_less_stat();
         void EllenBinTree_rcu_gpb_cmp_ic_stat();
+        void EllenBinTree_rcu_gpb_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpb_less_pool();
         void EllenBinTree_rcu_gpb_less_pool_ic_stat();
 
@@ -600,6 +604,7 @@ namespace tree {
         void EllenBinTree_rcu_gpt_cmp_ic();
         void EllenBinTree_rcu_gpt_less_stat();
         void EllenBinTree_rcu_gpt_cmp_ic_stat();
+        void EllenBinTree_rcu_gpt_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpt_less_pool();
         void EllenBinTree_rcu_gpt_less_pool_ic_stat();
 
@@ -610,6 +615,7 @@ namespace tree {
         void EllenBinTree_rcu_shb_cmp_ic();
         void EllenBinTree_rcu_shb_less_stat();
         void EllenBinTree_rcu_shb_cmp_ic_stat();
+        void EllenBinTree_rcu_shb_cmp_ic_stat_yield();
         void EllenBinTree_rcu_shb_less_pool();
         void EllenBinTree_rcu_shb_less_pool_ic_stat();
 
@@ -620,6 +626,7 @@ namespace tree {
         void EllenBinTree_rcu_sht_cmp_ic();
         void EllenBinTree_rcu_sht_less_stat();
         void EllenBinTree_rcu_sht_cmp_ic_stat();
+        void EllenBinTree_rcu_sht_cmp_ic_stat_yield();
         void EllenBinTree_rcu_sht_less_pool();
         void EllenBinTree_rcu_sht_less_pool_ic_stat();
 
@@ -631,7 +638,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_hp_less_ic)
             CPPUNIT_TEST(EllenBinTree_hp_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_hp_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_less_pool)
+            CPPUNIT_TEST( EllenBinTree_hp_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_hp_less_pool )
             CPPUNIT_TEST(EllenBinTree_hp_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_dhp_less)
@@ -641,7 +649,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_dhp_less_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_less_pool)
+            CPPUNIT_TEST( EllenBinTree_dhp_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_dhp_less_pool )
             CPPUNIT_TEST(EllenBinTree_dhp_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_less)
@@ -651,7 +660,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_less)
@@ -661,7 +671,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_less)
@@ -671,7 +682,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_shb_less)
@@ -681,7 +693,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_shb_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_sht_less)
@@ -691,7 +704,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_sht_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool_ic_stat)
 
             CPPUNIT_TEST_SUITE_END()
index 3145e08..31e58db 100644 (file)
@@ -109,6 +109,20 @@ namespace tree {
         test<set_type, print_stat>();
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_dhp_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test<set_type, print_stat>();
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_dhp_less_pool()
     {
         typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
index 8120112..bd6d57f 100644 (file)
@@ -109,6 +109,20 @@ namespace tree {
         test<set_type, print_stat>();
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_hp_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test<set_type, print_stat>();
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_hp_less_pool()
     {
         typedef cc::EllenBinTreeMap< gc_type, key_type, value_type,
index 6a7bdc5..babea28 100644 (file)
@@ -109,6 +109,20 @@ namespace tree {
         test_rcu<map_type, print_stat>();
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > map_type;
+
+        test_rcu<map_type, print_stat>();
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpb_less_pool()
     {
         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
index 2f308aa..2354449 100644 (file)
@@ -110,6 +110,20 @@ namespace tree {
         test_rcu<set_type, print_stat>();
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_pool()
     {
         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
index 5b9b1f4..e7d9083 100644 (file)
@@ -110,6 +110,20 @@ namespace tree {
         test_rcu<set_type, print_stat>();
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpt_less_pool()
     {
         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
index b10a47e..0354c22 100644 (file)
@@ -125,6 +125,22 @@ namespace tree {
 #endif
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+#endif
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_shb_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index fb3f21c..c18fbef 100644 (file)
@@ -125,6 +125,22 @@ namespace tree {
 #endif
     }
 
+    void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_map_traits<
+                co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+#endif
+    }
+
     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_sht_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index 8d80b66..91065a0 100644 (file)
@@ -659,6 +659,7 @@ namespace tree {
         void EllenBinTree_hp_cmp_ic();
         void EllenBinTree_hp_less_stat();
         void EllenBinTree_hp_cmp_ic_stat();
+        void EllenBinTree_hp_cmp_ic_stat_yield();
         void EllenBinTree_hp_less_pool();
         void EllenBinTree_hp_less_pool_ic_stat();
 
@@ -669,6 +670,7 @@ namespace tree {
         void EllenBinTree_dhp_cmp_ic();
         void EllenBinTree_dhp_less_stat();
         void EllenBinTree_dhp_cmp_ic_stat();
+        void EllenBinTree_dhp_cmp_ic_stat_yield();
         void EllenBinTree_dhp_less_pool();
         void EllenBinTree_dhp_less_pool_ic_stat();
 
@@ -679,6 +681,7 @@ namespace tree {
         void EllenBinTree_rcu_gpi_cmp_ic();
         void EllenBinTree_rcu_gpi_less_stat();
         void EllenBinTree_rcu_gpi_cmp_ic_stat();
+        void EllenBinTree_rcu_gpi_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpi_less_pool();
         void EllenBinTree_rcu_gpi_less_pool_ic_stat();
 
@@ -689,6 +692,7 @@ namespace tree {
         void EllenBinTree_rcu_gpb_cmp_ic();
         void EllenBinTree_rcu_gpb_less_stat();
         void EllenBinTree_rcu_gpb_cmp_ic_stat();
+        void EllenBinTree_rcu_gpb_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpb_less_pool();
         void EllenBinTree_rcu_gpb_less_pool_ic_stat();
 
@@ -699,6 +703,7 @@ namespace tree {
         void EllenBinTree_rcu_gpt_cmp_ic();
         void EllenBinTree_rcu_gpt_less_stat();
         void EllenBinTree_rcu_gpt_cmp_ic_stat();
+        void EllenBinTree_rcu_gpt_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpt_less_pool();
         void EllenBinTree_rcu_gpt_less_pool_ic_stat();
 
@@ -709,6 +714,7 @@ namespace tree {
         void EllenBinTree_rcu_shb_cmp_ic();
         void EllenBinTree_rcu_shb_less_stat();
         void EllenBinTree_rcu_shb_cmp_ic_stat();
+        void EllenBinTree_rcu_shb_cmp_ic_stat_yield();
         void EllenBinTree_rcu_shb_less_pool();
         void EllenBinTree_rcu_shb_less_pool_ic_stat();
 
@@ -719,6 +725,7 @@ namespace tree {
         void EllenBinTree_rcu_sht_cmp_ic();
         void EllenBinTree_rcu_sht_less_stat();
         void EllenBinTree_rcu_sht_cmp_ic_stat();
+        void EllenBinTree_rcu_sht_cmp_ic_stat_yield();
         void EllenBinTree_rcu_sht_less_pool();
         void EllenBinTree_rcu_sht_less_pool_ic_stat();
 
@@ -730,7 +737,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_hp_less_ic)
             CPPUNIT_TEST(EllenBinTree_hp_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_hp_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_less_pool)
+            CPPUNIT_TEST( EllenBinTree_hp_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_hp_less_pool )
             CPPUNIT_TEST(EllenBinTree_hp_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_dhp_less)
@@ -740,7 +748,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_dhp_less_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_less_pool)
+            CPPUNIT_TEST( EllenBinTree_dhp_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_dhp_less_pool )
             CPPUNIT_TEST(EllenBinTree_dhp_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_less)
@@ -750,7 +759,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_less)
@@ -760,7 +770,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_less)
@@ -770,7 +781,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_shb_less)
@@ -780,7 +792,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_shb_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_shb_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_sht_less)
@@ -790,7 +803,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_sht_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_sht_less_pool_ic_stat)
 
         CPPUNIT_TEST_SUITE_END()
index cdabe21..1d65ff9 100644 (file)
@@ -115,6 +115,21 @@ namespace tree {
         test<set_type, print_stat>();
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_dhp_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test<set_type, print_stat>();
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_dhp_less_pool()
     {
         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
index 582ef7e..814b6f0 100644 (file)
@@ -114,6 +114,21 @@ namespace tree {
         test<set_type, print_stat>();
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test<set_type, print_stat>();
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_pool()
     {
         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
index 063dfb6..3d8443c 100644 (file)
@@ -115,6 +115,21 @@ namespace tree {
         test_rcu<set_type, print_stat>();
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+                ,co::compare< compare >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_pool()
     {
         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
index 1794d9e..8ce0a67 100644 (file)
@@ -117,6 +117,21 @@ namespace tree {
         test_rcu<set_type, print_stat>();
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_pool()
     {
         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
index 49f3514..d3a2647 100644 (file)
@@ -117,6 +117,21 @@ namespace tree {
         test_rcu<set_type, print_stat>();
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_cmp_ic_stat_yield()
+    {
+        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                ,co::compare< compare >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpt_less_pool()
     {
         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
index f153f89..57f56d4 100644 (file)
@@ -132,6 +132,23 @@ namespace tree {
 #endif
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+                ,co::compare< compare >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+#endif
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_shb_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index 1e4982a..3073a5b 100644 (file)
@@ -132,6 +132,23 @@ namespace tree {
 #endif
     }
 
+    void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
+            cc::ellen_bintree::make_set_traits<
+                cc::ellen_bintree::key_extractor< key_extractor >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< cc::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+                ,co::compare< compare >
+            >::type
+        > set_type;
+
+        test_rcu<set_type, print_stat>();
+#endif
+    }
+
     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_sht_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index 3091d5c..af3424b 100644 (file)
@@ -923,6 +923,7 @@ namespace tree {
         void EllenBinTree_hp_base_cmp_ic();
         void EllenBinTree_hp_base_less_stat();
         void EllenBinTree_hp_base_cmp_ic_stat();
+        void EllenBinTree_hp_base_cmp_ic_stat_yield();
         void EllenBinTree_hp_base_less_pool();
         void EllenBinTree_hp_base_less_pool_ic_stat();
 
@@ -933,6 +934,7 @@ namespace tree {
         void EllenBinTree_hp_member_cmp_ic();
         void EllenBinTree_hp_member_less_stat();
         void EllenBinTree_hp_member_cmp_ic_stat();
+        void EllenBinTree_hp_member_cmp_ic_stat_yield();
         void EllenBinTree_hp_member_less_pool();
         void EllenBinTree_hp_member_less_pool_ic_stat();
 
@@ -943,6 +945,7 @@ namespace tree {
         void EllenBinTree_dhp_base_cmp_ic();
         void EllenBinTree_dhp_base_less_stat();
         void EllenBinTree_dhp_base_cmp_ic_stat();
+        void EllenBinTree_dhp_base_cmp_ic_stat_yield();
         void EllenBinTree_dhp_base_less_pool();
         void EllenBinTree_dhp_base_less_pool_ic_stat();
 
@@ -953,6 +956,7 @@ namespace tree {
         void EllenBinTree_dhp_member_cmp_ic();
         void EllenBinTree_dhp_member_less_stat();
         void EllenBinTree_dhp_member_cmp_ic_stat();
+        void EllenBinTree_dhp_member_cmp_ic_stat_yield();
         void EllenBinTree_dhp_member_less_pool();
         void EllenBinTree_dhp_member_less_pool_ic_stat();
 
@@ -963,6 +967,7 @@ namespace tree {
         void EllenBinTree_rcu_gpi_base_cmp_ic();
         void EllenBinTree_rcu_gpi_base_less_stat();
         void EllenBinTree_rcu_gpi_base_cmp_ic_stat();
+        void EllenBinTree_rcu_gpi_base_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpi_base_less_pool();
         void EllenBinTree_rcu_gpi_base_less_pool_ic_stat();
 
@@ -973,6 +978,7 @@ namespace tree {
         void EllenBinTree_rcu_gpi_member_cmp_ic();
         void EllenBinTree_rcu_gpi_member_less_stat();
         void EllenBinTree_rcu_gpi_member_cmp_ic_stat();
+        void EllenBinTree_rcu_gpi_member_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpi_member_less_pool();
         void EllenBinTree_rcu_gpi_member_less_pool_ic_stat();
 
@@ -983,6 +989,7 @@ namespace tree {
         void EllenBinTree_rcu_gpb_base_cmp_ic();
         void EllenBinTree_rcu_gpb_base_less_stat();
         void EllenBinTree_rcu_gpb_base_cmp_ic_stat();
+        void EllenBinTree_rcu_gpb_base_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpb_base_less_pool();
         void EllenBinTree_rcu_gpb_base_less_pool_ic_stat();
 
@@ -993,6 +1000,7 @@ namespace tree {
         void EllenBinTree_rcu_gpb_member_cmp_ic();
         void EllenBinTree_rcu_gpb_member_less_stat();
         void EllenBinTree_rcu_gpb_member_cmp_ic_stat();
+        void EllenBinTree_rcu_gpb_member_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpb_member_less_pool();
         void EllenBinTree_rcu_gpb_member_less_pool_ic_stat();
 
@@ -1003,6 +1011,7 @@ namespace tree {
         void EllenBinTree_rcu_gpt_base_cmp_ic();
         void EllenBinTree_rcu_gpt_base_less_stat();
         void EllenBinTree_rcu_gpt_base_cmp_ic_stat();
+        void EllenBinTree_rcu_gpt_base_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpt_base_less_pool();
         void EllenBinTree_rcu_gpt_base_less_pool_ic_stat();
 
@@ -1013,6 +1022,7 @@ namespace tree {
         void EllenBinTree_rcu_gpt_member_cmp_ic();
         void EllenBinTree_rcu_gpt_member_less_stat();
         void EllenBinTree_rcu_gpt_member_cmp_ic_stat();
+        void EllenBinTree_rcu_gpt_member_cmp_ic_stat_yield();
         void EllenBinTree_rcu_gpt_member_less_pool();
         void EllenBinTree_rcu_gpt_member_less_pool_ic_stat();
 
@@ -1023,6 +1033,7 @@ namespace tree {
         void EllenBinTree_rcu_shb_base_cmp_ic();
         void EllenBinTree_rcu_shb_base_less_stat();
         void EllenBinTree_rcu_shb_base_cmp_ic_stat();
+        void EllenBinTree_rcu_shb_base_cmp_ic_stat_yield();
         void EllenBinTree_rcu_shb_base_less_pool();
         void EllenBinTree_rcu_shb_base_less_pool_ic_stat();
 
@@ -1033,6 +1044,7 @@ namespace tree {
         void EllenBinTree_rcu_shb_member_cmp_ic();
         void EllenBinTree_rcu_shb_member_less_stat();
         void EllenBinTree_rcu_shb_member_cmp_ic_stat();
+        void EllenBinTree_rcu_shb_member_cmp_ic_stat_yield();
         void EllenBinTree_rcu_shb_member_less_pool();
         void EllenBinTree_rcu_shb_member_less_pool_ic_stat();
 
@@ -1043,6 +1055,7 @@ namespace tree {
         void EllenBinTree_rcu_sht_base_cmp_ic();
         void EllenBinTree_rcu_sht_base_less_stat();
         void EllenBinTree_rcu_sht_base_cmp_ic_stat();
+        void EllenBinTree_rcu_sht_base_cmp_ic_stat_yield();
         void EllenBinTree_rcu_sht_base_less_pool();
         void EllenBinTree_rcu_sht_base_less_pool_ic_stat();
 
@@ -1053,6 +1066,7 @@ namespace tree {
         void EllenBinTree_rcu_sht_member_cmp_ic();
         void EllenBinTree_rcu_sht_member_less_stat();
         void EllenBinTree_rcu_sht_member_cmp_ic_stat();
+        void EllenBinTree_rcu_sht_member_cmp_ic_stat_yield();
         void EllenBinTree_rcu_sht_member_less_pool();
         void EllenBinTree_rcu_sht_member_less_pool_ic_stat();
 
@@ -1064,7 +1078,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_hp_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_hp_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_hp_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_hp_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_hp_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_hp_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_hp_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_hp_member_less)
@@ -1073,7 +1088,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_hp_member_cmpless)
             CPPUNIT_TEST(EllenBinTree_hp_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_hp_member_cmp_ic)
-            CPPUNIT_TEST(EllenBinTree_hp_member_cmp_ic_stat)
+            CPPUNIT_TEST( EllenBinTree_hp_member_cmp_ic_stat )
+            CPPUNIT_TEST( EllenBinTree_hp_member_cmp_ic_stat_yield )
             CPPUNIT_TEST(EllenBinTree_hp_member_less_pool)
             CPPUNIT_TEST(EllenBinTree_hp_member_less_pool_ic_stat)
 
@@ -1084,7 +1100,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_dhp_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_dhp_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_dhp_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_dhp_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_dhp_member_less)
@@ -1094,7 +1111,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_dhp_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_member_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_dhp_member_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_dhp_member_less_pool)
+            CPPUNIT_TEST( EllenBinTree_dhp_member_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_dhp_member_less_pool )
             CPPUNIT_TEST(EllenBinTree_dhp_member_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less)
@@ -1104,7 +1122,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less)
@@ -1114,7 +1133,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_member_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpi_member_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpi_member_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less)
@@ -1124,7 +1144,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less)
@@ -1134,7 +1155,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_member_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpb_member_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpb_member_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less)
@@ -1144,7 +1166,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less)
@@ -1154,7 +1177,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_member_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_gpt_member_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_gpt_member_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less)
@@ -1164,7 +1188,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_shb_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less)
@@ -1174,7 +1199,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_member_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_shb_member_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_member_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_shb_member_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_shb_member_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less)
@@ -1184,7 +1210,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_base_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_base_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_base_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_base_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_sht_base_less_pool_ic_stat)
 
             CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less)
@@ -1194,7 +1221,8 @@ namespace tree {
             CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_member_cmp_ic)
             CPPUNIT_TEST(EllenBinTree_rcu_sht_member_cmp_ic_stat)
-            CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less_pool)
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_member_cmp_ic_stat_yield )
+            CPPUNIT_TEST( EllenBinTree_rcu_sht_member_less_pool )
             CPPUNIT_TEST(EllenBinTree_rcu_sht_member_less_pool_ic_stat)
 
         CPPUNIT_TEST_SUITE_END()
index 209e933..7bfe948 100644 (file)
@@ -113,7 +113,7 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
             ci::ellen_bintree::make_traits<
@@ -129,6 +129,23 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::DHP > > >
+                , ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                , co::compare< compare< base_value > >
+                , ci::opt::disposer< disposer< base_value > >
+                , co::item_counter< cds::atomicity::item_counter >
+                , co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_base_less_pool()
     {
         typedef ci::EllenBinTree< cds::gc::DHP, key_type, base_value,
index 2275c29..f07e18c 100644 (file)
@@ -115,7 +115,7 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
             ci::ellen_bintree::make_traits<
@@ -131,6 +131,23 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                ,co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_dhp_member_less_pool()
     {
         typedef ci::EllenBinTree< cds::gc::DHP, key_type, member_value,
index f2faad0..2134c97 100644 (file)
@@ -113,7 +113,7 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
             ci::ellen_bintree::make_traits<
@@ -129,6 +129,23 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< cds::gc::HP > > >
+                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                ,co::compare< compare< base_value > >
+                ,ci::opt::disposer< disposer< base_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_base_less_pool()
     {
         typedef ci::EllenBinTree< cds::gc::HP, key_type, base_value,
index a68eafd..3ccac6b 100644 (file)
@@ -122,7 +122,7 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
             ci::ellen_bintree::make_traits<
@@ -138,6 +138,23 @@ namespace tree {
         test<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_hp_member_less_pool()
     {
         typedef ci::EllenBinTree< cds::gc::HP, key_type, member_value,
index 8843fb6..1af18d8 100644 (file)
@@ -116,7 +116,7 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
             ci::ellen_bintree::make_traits<
@@ -132,6 +132,23 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
+                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                ,co::compare< compare< base_value > >
+                ,ci::opt::disposer< disposer< base_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_base_less_pool()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
index 1fdbebc..93afb90 100644 (file)
@@ -118,7 +118,7 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
             ci::ellen_bintree::make_traits<
@@ -134,6 +134,23 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpb_member_less_pool()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
index ddd379a..143ebb3 100644 (file)
@@ -116,7 +116,7 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
             ci::ellen_bintree::make_traits<
@@ -132,6 +132,23 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
+                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                ,co::compare< compare< base_value > >
+                ,ci::opt::disposer< disposer< base_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_base_less_pool()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
index e9651a1..4475191 100644 (file)
@@ -118,7 +118,7 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
             ci::ellen_bintree::make_traits<
@@ -134,6 +134,23 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpi_member_less_pool()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
index d11b4eb..1512dee 100644 (file)
@@ -116,7 +116,7 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
             ci::ellen_bintree::make_traits<
@@ -132,6 +132,23 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
+                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                ,co::compare< compare< base_value > >
+                ,ci::opt::disposer< disposer< base_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_base_less_pool()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, base_value,
index f0488f8..9791a1a 100644 (file)
@@ -118,7 +118,7 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
-        void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic_stat()
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic_stat()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
             ci::ellen_bintree::make_traits<
@@ -134,6 +134,23 @@ namespace tree {
         test_rcu<tree_type, print_stat>();
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_cmp_ic_stat_yield()
+    {
+        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                , co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_gpt_member_less_pool()
     {
         typedef ci::EllenBinTree< rcu_type, key_type, member_value,
index 87b7fcc..0b00de1 100644 (file)
@@ -148,6 +148,25 @@ namespace tree {
 #endif
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
+                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                ,co::compare< compare< base_value > >
+                ,ci::opt::disposer< disposer< base_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                ,co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+#endif
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_base_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index d6e5f64..0b10526 100644 (file)
@@ -150,6 +150,25 @@ namespace tree {
 #endif
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                ,co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+#endif
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_shb_member_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index bd2a579..d8b5e79 100644 (file)
@@ -148,6 +148,25 @@ namespace tree {
 #endif
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef ci::EllenBinTree< rcu_type, key_type, base_value,
+            ci::ellen_bintree::make_traits<
+                ci::opt::hook< ci::ellen_bintree::base_hook< co::gc< rcu_type > > >
+                ,ci::ellen_bintree::key_extractor< key_extractor< base_value > >
+                ,co::compare< compare< base_value > >
+                ,ci::opt::disposer< disposer< base_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                ,co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+#endif
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_base_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index c968426..8dcbfba 100644 (file)
@@ -151,6 +151,25 @@ namespace tree {
 #endif
     }
 
+    void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_cmp_ic_stat_yield()
+    {
+#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
+        typedef ci::EllenBinTree< rcu_type, key_type, member_value,
+            ci::ellen_bintree::make_traits<
+                member_hook
+                ,ci::ellen_bintree::key_extractor< key_extractor< member_value > >
+                ,co::compare< compare< member_value > >
+                ,ci::opt::disposer< disposer< member_value > >
+                ,co::item_counter< cds::atomicity::item_counter >
+                ,co::stat< ci::ellen_bintree::stat<> >
+                ,co::back_off< cds::backoff::yield >
+            >::type
+        > tree_type;
+
+        test_rcu<tree_type, print_stat>();
+#endif
+    }
+
     void IntrusiveBinTreeHdrTest::EllenBinTree_rcu_sht_member_less_pool()
     {
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
index a9c2f02..46577d8 100644 (file)
@@ -403,12 +403,15 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #define CDSUNIT_DECLARE_EllenBinTreeMap \
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_hp)\
+    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_hp_yield)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_hp_stat)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_dhp)\
+    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_dhp_yield)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_dhp_stat)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpi)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpi_stat)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpb)\
+    TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpb_yield)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpb_stat)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpt)\
     TEST_MAP_NOLF_EXTRACT(EllenBinTreeMap_rcu_gpt_stat)\
@@ -416,12 +419,15 @@ TEST_MAP_EXTRACT(SplitList_Lazy_RCU_SHT_st_less_stat)
 
 #define CDSUNIT_TEST_EllenBinTreeMap \
     CPPUNIT_TEST(EllenBinTreeMap_hp)\
+    CPPUNIT_TEST(EllenBinTreeMap_hp_yield)\
     CPPUNIT_TEST(EllenBinTreeMap_hp_stat)\
     CPPUNIT_TEST(EllenBinTreeMap_dhp)\
+    CPPUNIT_TEST(EllenBinTreeMap_dhp_yield)\
     CPPUNIT_TEST(EllenBinTreeMap_dhp_stat)\
     CPPUNIT_TEST(EllenBinTreeMap_rcu_gpi)\
     CPPUNIT_TEST(EllenBinTreeMap_rcu_gpi_stat)\
     CPPUNIT_TEST(EllenBinTreeMap_rcu_gpb)\
+    CPPUNIT_TEST(EllenBinTreeMap_rcu_gpb_yield)\
     CPPUNIT_TEST(EllenBinTreeMap_rcu_gpb_stat)\
     CPPUNIT_TEST(EllenBinTreeMap_rcu_gpt)\
     CPPUNIT_TEST(EllenBinTreeMap_rcu_gpt_stat)\
index 58f8f4a..c176295 100644 (file)
@@ -1639,6 +1639,26 @@ namespace map2 {
         typedef cc::EllenBinTreeMap< rcu_sht, Key, Value, traits_EllenBinTreeMap_sht >EllenBinTreeMap_rcu_sht;
 #endif
 
+        struct traits_EllenBinTreeMap_yield : public traits_EllenBinTreeMap
+        {
+            typedef cds::backoff::yield back_off;
+        };
+        struct traits_EllenBinTreeMap_hp_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::HP, Key, Value, traits_EllenBinTreeMap_hp_yield >EllenBinTreeMap_hp_yield;
+
+        struct traits_EllenBinTreeMap_dhp_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< cds::gc::DHP, Key, Value, traits_EllenBinTreeMap_dhp_yield >EllenBinTreeMap_dhp_yield;
+
+        struct traits_EllenBinTreeMap_gpb_yield : traits_EllenBinTreeMap_yield {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeMap< rcu_gpb, Key, Value, traits_EllenBinTreeMap_gpb_yield >EllenBinTreeMap_rcu_gpb_yield;
+
+
         struct traits_EllenBinTreeMap_stat: public cc::ellen_bintree::make_set_traits<
                 co::less< less >
                 ,cc::ellen_bintree::update_desc_allocator<
index f0bb9d2..5eda5f7 100644 (file)
 
 #define CDSUNIT_DECLARE_EllenBinTreeSet \
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_hp)\
+    TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_yield_hp)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_hp_stat)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_dhp)\
+    TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_yield_dhp)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_dhp_stat)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_rcu_gpi)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_rcu_gpi_stat)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_rcu_gpb)\
+    TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_yield_rcu_gpb)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_rcu_gpb_stat)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_rcu_gpt)\
     TEST_SET_NOLF_EXTRACT(EllenBinTreeSet_rcu_gpt_stat)\
 
 #define CDSUNIT_TEST_EllenBinTreeSet \
     CPPUNIT_TEST(EllenBinTreeSet_hp)\
+    CPPUNIT_TEST(EllenBinTreeSet_yield_hp)\
     CPPUNIT_TEST(EllenBinTreeSet_hp_stat)\
     CPPUNIT_TEST(EllenBinTreeSet_dhp)\
+    CPPUNIT_TEST(EllenBinTreeSet_yield_dhp)\
     CPPUNIT_TEST(EllenBinTreeSet_dhp_stat)\
     CPPUNIT_TEST(EllenBinTreeSet_rcu_gpi)\
     /*CPPUNIT_TEST(EllenBinTreeSet_rcu_gpi_stat)*/\
     CPPUNIT_TEST(EllenBinTreeSet_rcu_gpb)\
+    CPPUNIT_TEST(EllenBinTreeSet_yield_rcu_gpb)\
     CPPUNIT_TEST(EllenBinTreeSet_rcu_gpb_stat)\
     CPPUNIT_TEST(EllenBinTreeSet_rcu_gpt)\
     CPPUNIT_TEST(EllenBinTreeSet_rcu_gpt_stat)\
index d1e2aee..340411b 100644 (file)
@@ -1628,6 +1628,32 @@ namespace set2 {
         typedef cc::EllenBinTreeSet< rcu_sht, key_type, key_val, traits_EllenBinTreeSet_sht > EllenBinTreeSet_rcu_sht;
 #endif
 
+        //
+        struct traits_EllenBinTreeSet_yield : public traits_EllenBinTreeSet
+        {
+            typedef cds::backoff::yield back_off;
+        };
+
+        struct traits_EllenBinTreeSet_yield_hp : public traits_EllenBinTreeSet_yield
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::hp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< cds::gc::HP, key_type, key_val, traits_EllenBinTreeSet_yield_hp > EllenBinTreeSet_yield_hp;
+
+        struct traits_EllenBinTreeSet_yield_dhp : public traits_EllenBinTreeSet_yield
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::dhp_gc::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< cds::gc::DHP, key_type, key_val, traits_EllenBinTreeSet_yield_dhp > EllenBinTreeSet_yield_dhp;
+
+
+        struct traits_EllenBinTreeSet_yield_gpb : public traits_EllenBinTreeSet_yield
+        {
+            typedef cds::memory::pool_allocator< typename ellen_bintree_props::gpb::update_desc, ellen_bintree_pool::update_desc_pool_accessor > update_desc_allocator;
+        };
+        typedef cc::EllenBinTreeSet< rcu_gpb, key_type, key_val, traits_EllenBinTreeSet_yield_gpb > EllenBinTreeSet_yield_rcu_gpb;
+
+
         struct traits_EllenBinTreeSet_stat: public cc::ellen_bintree::make_set_traits<
             cc::ellen_bintree::key_extractor< typename ellen_bintree_props::key_extractor >
             ,co::less< typename ellen_bintree_props::less >