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 f8e11fd656f592eebe361dfd070d53727007b85d..1439b8234623bce5a2d3aad585562c98d4ecff28 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 e3ad6135532da590ce1a7d4d4b3331fc27d012a7..d5852f66cbda7b059772a0a6ef054da6ca84487c 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 f0a0049e0c070d2f989147028d58311101d34a7b..4c802c931750d6f28ab6197a6ebc6df75e61afc2 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 c8dab92550b2c6bb2de8da9c1aec934aa32b34b9..3ca0dbf2698da14bb9de369932f9ac45cb567140 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 13f75fb56c6e287288108d3c19899c235d8c3eaf..432947ede51c80a09c209d8447cb15bd570490b9 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 f0d9ffc3da819e168e17c3c55e55391bbfc117d8..2049781993a2b9563e03935483b1316053084b08 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 79b9e751c323e86fc3ab7e565a9df3d4b4e021e7..55e805115878ef34a3de525d3af0d0dd38149e7a 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 06baed3b76aa96302e40f053020742c148fc1f36..ca9fa2d30d2f2cc4b86df8bdacebb3d409c94d60 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 d917bc8afb1b2b6d79afaecd1c523e7b37723370..033db4e31e2a1529cab10f69df01ef29cc002a10 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 3145e085d763e4b181d502ff12880f6d65e55fa1..31e58db1889bdc3679bc1415f7536d71170dde76 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 81201123a1ea0edee657b17ba1adb62e8ef6d97c..bd6d57fd36b02e271e8a3342e7a1790a2a5cb247 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 6a7bdc539e26009038182ba75fbb99fefcc45280..babea28d5e51829a4331814c049f379492b1afac 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 2f308aa7f83ad7744dadf5c30296e6868270eeda..2354449a71c9ca6b087f32247a5b11b4f1ba812c 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 5b9b1f4e5110f497dbfb7d93a777826d6f672ba4..e7d9083042e31daa8ae9e1e03b88998b95ff6276 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 b10a47e58d8b9b0c9627cfdcf330b9a1edb9217e..0354c22401a966313aa6c82aa7bbf43e1f51892d 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 fb3f21c5f68afc95938a4810b857483eb7c824b8..c18fbef6224d2238eda7649f1f444506a16ecab7 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 8d80b66de1c11baf13e50e7695193065e2640949..91065a09ededfc1fdce37b2d13820a23ce7d128e 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 cdabe21525016221f30bf9fc4dd37c589f327b2b..1d65ff9b45b394023356c3d81fec46e1ea0ff170 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 582ef7ee140a6539eb2e957bbe2cb6bfa34f2743..814b6f0c774129e939ba7368572f9fc27a6f597c 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 063dfb61bd1556db73679b0e7263c788c8df9b0a..3d8443c287fe9dca1ac9f843562497a95f286bd4 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 1794d9ed6ce5728746a3705d649b4ce99c95dbad..8ce0a672b39bf11d135784452031f768846ea769 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 49f3514930a57bef1139bcc078dc47f70e1768ac..d3a26473f268290be07bbd30938fa8004b4b6a7b 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 f153f895ae48d3328bef861a9c4ce05a170ca238..57f56d4cbb5419f6d764d486a70ea912a91958b8 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 1e4982a76c56cf98274105f88f074a9cd3ef4be6..3073a5b38e5062848e2bdfea106a073debe79637 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 3091d5c1d57dafe9c3ab9349a8885f6c8b11d723..af3424ba905a1423803d0ed796140ad806796e25 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 209e933a36f86b50fb77f64d5640c8ec3c10aa99..7bfe948f3e69644eaa6bdfe07ef85e0079a59cdf 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 2275c2978e787dcfc141dff3624b1de53b485819..f07e18cd659fa1040a3c1c627c7b9ae647c70679 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 f2faad097fbdd0e1b6fcfc45fad25ab09cfcd691..2134c9766d2a692028d59e71943171203e9a80c8 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 a68eafd7d688fe9cbc5557fc1440e7183c9abe8d..3ccac6bc57674f664f544d3f94261dacf58cb0de 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 8843fb69d6159897fd0abd46e8c52ae87c1ccde7..1af18d8747d493c6274180a88a3e34aebaf82f8a 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 1fdbebc9a61629c6018cc3687229165b885ed9ca..93afb90c13fc3b91d12477cff203494b62f3ba04 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 ddd379a1c59af74a5cf6c9e826b71addd184762e..143ebb3b12329ee82d6bbbaf7f2d270704d491e0 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 e9651a1df9a514e628b4d15d64881b4b2106c5ea..44751912171d864e4e9178a13d33ef6891755851 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 d11b4ebc2f5f7f118d8cb19570364879c4074733..1512deee95708b4efdb3d65911aa94d6bd0a3e4c 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 f0488f8adf40721acb5ebe49f41c1c6c96190a37..9791a1a434154a72fc8f9a9cfb197529d9a762ac 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 87b7fcc38666231ecc18725369534ab32bc57652..0b00de15671eda46e186b625e0cbd23b2d02b36c 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 d6e5f64189d2a11b56fd62b86b393774b4cd2589..0b105260e595abf2183cca933628f11ef8a4b5f0 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 bd2a5791a39a94aa6f3e05680c5ea8be296f2fec..d8b5e79fb91f8fccf2d3ca1ce773553d7b6ba6ac 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 c96842681b4f179715a14c2ffd56adc5f3af24a3..8dcbfba98dec895a5ee57cb012ec3b5fa8cfbb7f 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 a9c2f0283303a6d2d93d6f6394cf1bb175ad21a2..46577d8dc5f10107627aa1f881546fcbc12c42d8 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 58f8f4ab750d40063b9e93cc2f3ca36957e6261d..c17629593bcb6f7b67313cede9148100bed23a9f 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 f0bb9d28e4e7db6009feaac00af825813dd53fb4..5eda5f718df3608319a616c49bff2a7d0b0057ae 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 d1e2aee4e67bee8039d077ef466e6cc585b48361..340411b3becc9c3e9b26f8f77de10be34903d92e 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 >