* SkipListMap, SkipListSet:
authorkhizmax <libcds.dev@gmail.com>
Sat, 29 Aug 2015 17:30:50 +0000 (20:30 +0300)
committerkhizmax <libcds.dev@gmail.com>
Sat, 29 Aug 2015 17:30:50 +0000 (20:30 +0300)
- replaced ensure() with update()
- replaced find( key ) with contains( key )

MapDelOdd MT-test is refactored for SkipListMap

15 files changed:
cds/container/impl/skip_list_map.h
cds/container/impl/skip_list_set.h
cds/container/skip_list_map_nogc.h
cds/container/skip_list_map_rcu.h
cds/container/skip_list_set_nogc.h
cds/container/skip_list_set_rcu.h
cds/intrusive/impl/skip_list.h
cds/intrusive/skip_list_nogc.h
cds/intrusive/skip_list_rcu.h
projects/Win/vc12/unit-map-delodd.vcxproj
tests/unit/map2/map_defs.h
tests/unit/map2/map_delodd.cpp
tests/unit/map2/map_delodd.h
tests/unit/map2/map_delodd_skip.cpp
tests/unit/map2/map_type_skip_list.h

index 3192918b4dea8c843bee91ba538bd2fed354b03f..ccd14ad906509f09a401cf9ae41af1aec6b8c3ab 100644 (file)
@@ -332,7 +332,6 @@ namespace cds { namespace container {
                 pNode.release();
             return res;
         }
-
         //@cond
         // Deprecated, use update()
         template <typename K, typename Func>
@@ -558,31 +557,45 @@ namespace cds { namespace container {
                 [&f](node_type& item, K const& ) { f( item.m_Value );});
         }
 
-        /// Find the key \p key
-        /** \anchor cds_nonintrusive_SkipListMap_find_val
-
+        /// Checks whether the map contains \p key
+        /**
             The function searches the item with key equal to \p key
             and returns \p true if it is found, and \p false otherwise.
         */
         template <typename K>
+        bool contains( K const& key )
+        {
+            return base_class::contains( key );
+        }
+        //@cond
+        // Deprecated, use contains()
+        template <typename K>
         bool find( K const& key )
         {
-            return base_class::find( key );
+            return contains( key );
         }
+        //@endcond
 
-        /// Finds the key \p val using \p pred predicate for searching
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_nonintrusive_SkipListMap_find_val "find(K const&)"
-            but \p pred is used for key comparing.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
-            \p Less must imply the same element order as the comparator used for building the map.
+            \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename K, typename Less>
-        bool find_with( K const& key, Less pred )
+        bool contains( K const& key, Less pred )
         {
             CDS_UNUSED( pred );
-            return base_class::find_with( key, cds::details::predicate_wrapper< node_type, Less, typename maker::key_accessor >() );
+            return base_class::contains( key, cds::details::predicate_wrapper< node_type, Less, typename maker::key_accessor >() );
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename K, typename Less>
+        bool find_with( K const& key, Less pred )
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Finds the key \p key and return the item found
         /** \anchor cds_nonintrusive_SkipListMap_hp_get
index 9754e9976476479b74c3f5f068a6fedae352f674..4365e0438b267a083b2fda804fe6d50e90be90cd 100644 (file)
@@ -290,7 +290,6 @@ namespace cds { namespace container {
                 sp.release();
             return bRes;
         }
-
         //@cond
         // Deprecated, use update()
         template <typename Q, typename Func>
@@ -559,34 +558,45 @@ namespace cds { namespace container {
         }
         //@endcond
 
-        /// Find \p key
-        /** \anchor cds_nonintrusive_SkipListSet_find_val
-
+        /// Checks whether the set contains \p key
+        /**
             The function searches the item with key equal to \p key
             and returns \p true if it is found, and \p false otherwise.
-
-            Note the hash functor specified for class \p Traits template parameter
-            should accept a parameter of type \p Q that may be not the same as \ref value_type.
         */
         template <typename Q>
+        bool contains( Q const& key )
+        {
+            return base_class::contains( key );
+        }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q>
         bool find( Q const& key )
         {
-            return base_class::find( key );
+            return contains( key );
         }
+        //@endcond
 
-        /// Finds \p key using \p pred predicate for searching
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_nonintrusive_SkipListSet_find_val "find(Q const&)"
-            but \p pred is used for key comparing.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less>
-        bool find_with( Q const& key, Less pred )
+        bool contains( Q const& key, Less pred )
         {
             CDS_UNUSED( pred );
-            return base_class::find_with( key, cds::details::predicate_wrapper< node_type, Less, typename maker::value_accessor >());
+            return base_class::contains( key, cds::details::predicate_wrapper< node_type, Less, typename maker::value_accessor >());
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q, typename Less>
+        bool find_with( Q const& key, Less pred )
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Finds \p key and return the item found
         /** \anchor cds_nonintrusive_SkipListSet_hp_get
index 79ef6769e3d8b02f258ec2433831df3600371a97..2136e4ce207e7aa611b39dc7d65f2fa2a45a4931 100644 (file)
@@ -250,7 +250,6 @@ namespace cds { namespace container {
             //TODO: pass arguments by reference (make_pair makes copy)
             return base_class::update( std::make_pair( key, mapped_type() ), bInsert );
         }
-
         //@cond
         // Deprecated, use update()
         template <typename K>
@@ -260,31 +259,45 @@ namespace cds { namespace container {
         }
         //@endcond
 
-        /// Finds the key \p key
-        /** \anchor cds_nonintrusive_SkipListMap_nogc_find_val
-
+        /// Checks whether the map contains \p key
+        /**
             The function searches the item with key equal to \p key
             and returns an iterator pointed to item found if the key is found,
             and \ref end() otherwise
         */
         template <typename K>
+        iterator contains( K const& key )
+        {
+            return base_class::contains( key );
+        }
+        //@cond 
+        // Deprecated, use contains()
+        template <typename K>
         iterator find( K const& key )
         {
-            return base_class::find( key );
+            return contains( key );
         }
+        //@endcond
 
-        /// Finds the key \p key with comparing functor \p cmp
+        /// Checks whether the map contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_nonintrusive_SkipListMap_nogc_find_val "find(K const&)"
-            but \p pred is used for key comparing.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
-            \p Less must imply the same element order as the comparator used for building the set.
+            \p Less must imply the same element order as the comparator used for building the map.
         */
         template <typename K, typename Less>
+        iterator contains( K const& key, Less pred ) const
+        {
+            return base_class::contains( key, pred );
+        }
+        //@cond
+        // Deprecated, use contains()
+        template <typename K, typename Less>
         iterator find_with( K const& key, Less pred ) const
         {
-            return base_class::find_with( key, pred );
+            return contains( key, pred );
         }
+        //@endcond
 
         /// Gets minimum key from the map
         /**
index 70185d7fe8a296ee1d78f598b5481a972b9b6e83..07080a775b3361ff5c66e6341d8b35c922f17e91 100644 (file)
@@ -365,7 +365,6 @@ namespace cds { namespace container {
                 pNode.release();
             return res;
         }
-
         //@cond
         // Deprecated, use update()
         template <typename K, typename Func>
@@ -547,33 +546,47 @@ namespace cds { namespace container {
                 [&f](node_type& item, K const& ) { f( item.m_Value );});
         }
 
-        /// Find the key \p key
-        /** \anchor cds_nonintrusive_SkipListMap_rcu_find_val
-
+        /// Checks whether the map contains \p key
+        /**
             The function searches the item with key equal to \p key
             and returns \p true if it is found, and \p false otherwise.
 
             The function applies RCU lock internally.
         */
         template <typename K>
+        bool contains( K const& key )
+        {
+            return base_class::contains( key );
+        }
+        //@cond
+        // Deprecated, use contains()
+        template <typename K>
         bool find( K const& key )
         {
-            return base_class::find( key );
+            return contains( key );
         }
+        //@endcond
 
-        /// Finds the key \p val using \p pred predicate for searching
+        /// Checks whether the map contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_nonintrusive_SkipListMap_rcu_find_val "find(K const&)"
-            but \p pred is used for key comparing.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
-            \p Less must imply the same element order as the comparator used for building the map.
+            \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename K, typename Less>
-        bool find_with( K const& key, Less pred )
+        bool contains( K const& key, Less pred )
         {
             CDS_UNUSED( pred );
-            return base_class::find_with( key, cds::details::predicate_wrapper< node_type, Less, typename maker::key_accessor >() );
+            return base_class::contains( key, cds::details::predicate_wrapper< node_type, Less, typename maker::key_accessor >() );
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename K, typename Less>
+        bool find_with( K const& key, Less pred )
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Finds the key \p key and return the item found
         /** \anchor cds_nonintrusive_SkipListMap_rcu_get
index 0d6f88505620a0dd9725bc750edd1a93e489d232..e569c37fe4773fc9a7a13ab7ea565f462877065f 100644 (file)
@@ -290,7 +290,6 @@ namespace cds { namespace container {
             assert( pNode );
             return std::make_pair( node_to_iterator( pNode ), bRes.second );
         }
-
         //@cond
         // Deprecated, use update()
         template <typename Q>
@@ -300,38 +299,51 @@ namespace cds { namespace container {
         }
         //@endcond
 
-        /// Searches \p key
-        /** \anchor cds_nonintrusive_SkipListSet_nogc_find_val
-
+        /// Checks whether the set contains \p key
+        /**
             The function searches the item with key equal to \p key
-            and returns an iterator pointed to item found if the key is found,
-            and \ref end() otherwise
+            and returns an iterator to item found or \p end() if the key is not fund
         */
         template <typename Q>
-        iterator find( Q const& key ) const
+        iterator contains( Q const& key ) const
         {
-            node_type * pNode = base_class::find( key );
+            node_type * pNode = base_class::contains( key );
             if ( pNode )
                 return node_to_iterator( pNode );
             return base_class::nonconst_end();
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q>
+        iterator find( Q const& key ) const
+        {
+            return contains( key );
+        }
+        //@edncond
 
-        /// Finds the key \p val using \p pred predicate for searching
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_nonintrusive_SkipListSet_nogc_find_val "find(Q const&)"
-            but \p pred is used for key comparing.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less>
-        iterator find_with( Q const& key, Less pred ) const
+        iterator contains( Q const& key, Less pred ) const
         {
             CDS_UNUSED( pred );
-            node_type * pNode = base_class::find_with( key, cds::details::predicate_wrapper< node_type, Less, key_accessor>() );
+            node_type * pNode = base_class::contains( key, cds::details::predicate_wrapper< node_type, Less, key_accessor>() );
             if ( pNode )
                 return node_to_iterator( pNode );
             return base_class::nonconst_end();
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q, typename Less>
+        iterator find_with( Q const& key, Less pred ) const
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Gets minimum key from the set
         /**
index 32453bfa5eccb604c7402eb7524efde2e7bceb9f..22bccb31368b99862deaba5ede98396ee9fcb4e2 100644 (file)
@@ -367,7 +367,6 @@ namespace cds { namespace container {
                 sp.release();
             return bRes;
         }
-
         //@cond
         // Deprecated, use update()
         template <typename Q, typename Func>
@@ -602,36 +601,47 @@ namespace cds { namespace container {
         }
         //@endcond
 
-        /// Find the key \p val
-        /** @anchor cds_nonintrusive_SkipListSet_rcu_find_val
-
-            The function searches the item with key equal to \p val
+        /// Checks whether the set contains \p key
+        /**
+            The function searches the item with key equal to \p key
             and returns \p true if it is found, and \p false otherwise.
 
-            Note the hash functor specified for class \p Traits template parameter
-            should accept a parameter of type \p Q that may be not the same as \ref value_type.
-
             The function applies RCU lock internally.
         */
         template <typename Q>
-        bool find( Q const & val )
+        bool contains( Q const & key )
+        {
+            return base_class::contains( key );
+        }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q>
+        bool find( Q const & key )
         {
-            return base_class::find( val );
+            return contains( key );
         }
+        //@endcond
 
-        /// Finds the key \p val using \p pred predicate for searching
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_nonintrusive_SkipListSet_rcu_find_val "find(Q const&)"
-            but \p pred is used for key comparing.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
             \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less>
-        bool find_with( Q const& val, Less pred )
+        bool contains( Q const& key, Less pred )
         {
             CDS_UNUSED( pred );
-            return base_class::find_with( val, cds::details::predicate_wrapper< node_type, Less, typename maker::value_accessor >());
+            return base_class::contains( key, cds::details::predicate_wrapper< node_type, Less, typename maker::value_accessor >());
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q, typename Less>
+        bool find_with( Q const& key, Less pred )
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Finds \p key and return the item found
         /** \anchor cds_nonintrusive_SkipListSet_rcu_get
index 3574937aec07991f6478fba18792e6ee5915a35b..2f2da4c4e2e5f8c470cf27b46d2f14781e135e0a 100644 (file)
@@ -1156,7 +1156,6 @@ namespace cds { namespace intrusive {
                 return std::make_pair( true, true );
             }
         }
-
         //@cond
         // Deprecated, use update() instead
         template <typename Func>
@@ -1465,34 +1464,45 @@ namespace cds { namespace intrusive {
         }
         //@endcond
 
-        /// Finds \p key
-        /** \anchor cds_intrusive_SkipListSet_hp_find_val
+        /// Checks whether the set contains \p key
+        /**
             The function searches the item with key equal to \p key
             and returns \p true if it is found, and \p false otherwise.
-
-            Note the compare functor specified for class \p Traits template parameter
-            should accept a parameter of type \p Q that can be not the same as \p value_type.
         */
         template <typename Q>
-        bool find( Q const& key )
+        bool contains( Q const& key )
         {
             return find_with_( key, key_comparator(), [](value_type& , Q const& ) {} );
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q>
+        bool find( Q const& key )
+        {
+            return contains( key );
+        }
+        //@endcond
 
-        /// Finds \p key with comparing functor \p pred
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_SkipListSet_hp_find_val "find(Q const&)"
-            but \p pred is used for comparing the keys.
-            \p Less functor has the semantics like \p std::less but should take arguments of type \ref value_type and \p Q
-            in any order.
-            \p pred must imply the same element order as the comparator used for building the set.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
+            \p Less functor has the interface like \p std::less.
+            \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less>
-        bool find_with( Q const& key, Less pred )
+        bool contains( Q const& key, Less pred )
         {
             CDS_UNUSED( pred );
             return find_with_( key, cds::opt::details::make_comparator_from_less<Less>(), [](value_type& , Q const& ) {} );
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q, typename Less>
+        bool find_with( Q const& key, Less pred )
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Finds \p key and return the item found
         /** \anchor cds_intrusive_SkipListSet_hp_get
index 1d4503f4430ad539d8e854c30c4c3065fa684365..13a0e76f6eb80a31caf9edc542e9fa7a8f7ab382 100644 (file)
@@ -754,7 +754,6 @@ namespace cds { namespace intrusive {
                 return std::make_pair( true, true );
             }
         }
-
         //@cond
         // Deprecated, use update() instead
         template <typename Func>
@@ -823,32 +822,36 @@ namespace cds { namespace intrusive {
         }
         //@endcond
 
-        /// Finds \p key
-        /** \anchor cds_intrusive_SkipListSet_nogc_find_val
+        /// Checks whether the set contains \p key
+        /**
             The function searches the item with key equal to \p key
-            and returns \p true if it is found, and \p false otherwise.
-
-            Note the hash functor specified for class \p Traits template parameter
-            should accept a parameter of type \p Q that can be not the same as \p value_type.
+            and returns pointer to item found or \p nullptr.
         */
         template <typename Q>
-        value_type * find( Q const& key ) const
+        value_type * contains( Q const& key ) const
         {
             node_type * pNode = find_with_( key, key_comparator(), [](value_type& , Q const& ) {} );
             if ( pNode )
                 return node_traits::to_value_ptr( pNode );
             return nullptr;
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q>
+        value_type * find( Q const& key ) const
+        {
+            return contains( key );
+        }
+        //@endcond
 
-        /// Finds \p key using \p pred predicate for comparing
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_SkipListSet_nogc_find_val "find(Q const&)"
-            but \p pred predicate is used for key compare.
-            \p Less has the interface like \p std::less.
-            \p pred must imply the same element order as the comparator used for building the set.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
+            \p Less functor has the interface like \p std::less.
+            \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less>
-        value_type * find_with( Q const& key, Less pred ) const
+        value_type * contains( Q const& key, Less pred ) const
         {
             CDS_UNUSED( pred );
             node_type * pNode = find_with_( key, cds::opt::details::make_comparator_from_less<Less>(), [](value_type& , Q const& ) {} );
@@ -856,6 +859,14 @@ namespace cds { namespace intrusive {
                 return node_traits::to_value_ptr( pNode );
             return nullptr;
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q, typename Less>
+        value_type * find_with( Q const& key, Less pred ) const
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Gets minimum key from the set
         /**
index 95d9f59212f0e5d51d28241befc28156c77caf1e..1e3112954a4724d4bb83e173864df76fd2a0a96a 100644 (file)
@@ -1528,7 +1528,6 @@ namespace cds { namespace intrusive {
 
             return bRet;
         }
-
         //@cond
         // Deprecated, use update().
         template <typename Func>
@@ -1833,32 +1832,47 @@ namespace cds { namespace intrusive {
         }
         //@endcond
 
-        /// Finds \p key
-        /** @anchor cds_intrusive_SkipListSet_rcu_find_val
+        /// Checks whether the set contains \p key
+        /**
             The function searches the item with key equal to \p key
             and returns \p true if it is found, and \p false otherwise.
 
             The function applies RCU lock internally.
         */
         template <typename Q>
-        bool find( Q const& key )
+        bool contains( Q const& key )
         {
             return do_find_with( key, key_comparator(), [](value_type& , Q const& ) {} );
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q>
+        bool find( Q const& key )
+        {
+            return contains( key );
+        }
+        //@endcond
 
-        /// Finds \p key with comparing functor \p pred
+        /// Checks whether the set contains \p key using \p pred predicate for searching
         /**
-            The function is an analog of \ref cds_intrusive_SkipListSet_rcu_find_val "find(Q const&)"
-            but \p pred is used for key compare.
+            The function is similar to <tt>contains( key )</tt> but \p pred is used for key comparing.
             \p Less functor has the interface like \p std::less.
-            \p pred must imply the same element order as the comparator used for building the set.
+            \p Less must imply the same element order as the comparator used for building the set.
         */
         template <typename Q, typename Less>
-        bool find_with( Q const& key, Less pred )
+        bool contains( Q const& key, Less pred )
         {
             CDS_UNUSED( pred );
             return do_find_with( key, cds::opt::details::make_comparator_from_less<Less>(), [](value_type& , Q const& ) {} );
         }
+        //@cond
+        // Deprecated, use contains()
+        template <typename Q, typename Less>
+        bool find_with( Q const& key, Less pred )
+        {
+            return contains( key, pred );
+        }
+        //@endcond
 
         /// Finds \p key and return the item found
         /** \anchor cds_intrusive_SkipListSet_rcu_get
index 9aeb7eaa40ddf5114b25f77fa6996805006c50fd..6888626c30db5ca0f4b471dea63ddf69a8850c52 100644 (file)
@@ -57,7 +57,7 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_skip.cpp">\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">true</ExcludedFromBuild>\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
     </ClCompile>\r
     <ClCompile Include="..\..\..\tests\unit\map2\map_delodd_split.cpp">\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</ExcludedFromBuild>\r
index d94b68d7eeac09e437d97c20c3666f9f18b23c49..b7ecd466fe981b35c808e5894298873ad42ca221 100644 (file)
 
 #else
 #   define CDSUNIT_DECLARE_SplitList_RCU_signal
-#   define CDSUNIT_DEFINE_SplitList_RCU_signal( IMPL, C )
 #   define CDSUNIT_TEST_SplitList_RCU_signal
 #endif
 
 
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
 #   define CDSUNIT_DECLARE_SkipListMap_RCU_signal \
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_shb_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_sht_cmp_xorshift_stat)
-
-#   define CDSUNIT_DEFINE_SkipListMap_RCU_signal( IMPL, C ) \
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_shb_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_sht_cmp_xorshift_stat)
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_shb_cmp_xorshift_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_sht_cmp_xorshift_stat)
 
 #   define CDSUNIT_TEST_SkipListMap_RCU_signal \
     CPPUNIT_TEST(SkipListMap_rcu_shb_less_pascal)\
 
 #else
 #   define CDSUNIT_DECLARE_SkipListMap_RCU_signal
-#   define CDSUNIT_DEFINE_SkipListMap_RCU_signal( IMPL, C )
 #   define CDSUNIT_TEST_SkipListMap_RCU_signal
 #endif
 
 #define CDSUNIT_DECLARE_SkipListMap \
-    CDSUNIT_DECLARE_TEST(SkipListMap_hp_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_hp_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_hp_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_hp_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_dhp_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpi_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpb_cmp_xorshift_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_rcu_gpt_cmp_xorshift_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_hp_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_hp_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_hp_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_hp_cmp_xorshift_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_dhp_cmp_xorshift_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpi_cmp_xorshift_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpb_cmp_xorshift_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_rcu_gpt_cmp_xorshift_stat)\
     CDSUNIT_DECLARE_SkipListMap_RCU_signal
 
-#define CDSUNIT_DEFINE_SkipListMap( IMPL, C ) \
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_hp_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_dhp_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpi_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpb_cmp_xorshift_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_less_pascal)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_cmp_pascal_stat)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_less_xorshift)\
-    TEST_MAP_NOLF_EXTRACT(IMPL, C, SkipListMap_rcu_gpt_cmp_xorshift_stat)\
-    CDSUNIT_DEFINE_SkipListMap_RCU_signal( IMPL, C )
-
 #define CDSUNIT_TEST_SkipListMap \
     CPPUNIT_TEST(SkipListMap_hp_less_pascal)\
     CPPUNIT_TEST(SkipListMap_hp_cmp_pascal_stat)\
     CDSUNIT_TEST_SkipListMap_RCU_signal
 
 #define CDSUNIT_DECLARE_SkipListMap_nogc \
-    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_less_pascal)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_cmp_pascal_stat)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_less_xorshift)\
-    CDSUNIT_DECLARE_TEST(SkipListMap_nogc_cmp_xorshift_stat)
-
-#define CDSUNIT_DEFINE_SkipListMap_nogc( IMPL, C ) \
-    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_less_pascal)\
-    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_cmp_pascal_stat)\
-    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_less_xorshift)\
-    TEST_MAP_NOLF(IMPL, C, SkipListMap_nogc_cmp_xorshift_stat)
+    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_less_pascal)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_cmp_pascal_stat)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_less_xorshift)\
+    TEST_CASE(tag_SkipListMap, SkipListMap_nogc_cmp_xorshift_stat)
 
 #define CDSUNIT_TEST_SkipListMap_nogc \
     CPPUNIT_TEST(SkipListMap_nogc_less_pascal)\
index 7a3b1dde61f6728d4181547d8e886c6586548135..795d58d680496a2aeed908045c8597a56ac3a57d 100644 (file)
@@ -5,13 +5,6 @@
 namespace map2 {
     CPPUNIT_TEST_SUITE_REGISTRATION( Map_DelOdd );
 
-    //size_t  Map_DelOdd::c_nMapSize = 1000000         ;  // max map size
-    //size_t  Map_DelOdd::c_nInsThreadCount = 4        ;  // insert thread count
-    //size_t  Map_DelOdd::c_nDelThreadCount = 4        ;  // delete thread count
-    //size_t  Map_DelOdd::c_nExtractThreadCount = 4    ;  // extract thread count
-    //size_t  Map_DelOdd::c_nMaxLoadFactor = 8         ;  // maximum load factor
-    //bool    Map_DelOdd::c_bPrintGCState = true;
-
     void Map_DelOdd::setUpParams( const CppUnitMini::TestCfg& cfg ) {
         c_nMapSize = cfg.getULong("MapSize", static_cast<unsigned long>(c_nMapSize) );
         c_nInsThreadCount = cfg.getULong("InsThreadCount", static_cast<unsigned long>(c_nInsThreadCount) );
index b006fdf4aa17380589c13d1883da6314f40cf37b..443b54e1da06692a46bf0810f24cd3b06789a269 100644 (file)
@@ -691,6 +691,7 @@ namespace map2 {
 #   include "map2/map_defs.h"
         CDSUNIT_DECLARE_MichaelMap
         CDSUNIT_DECLARE_SplitList
+        CDSUNIT_DECLARE_SkipListMap
 
         // This test is not suitable for MultiLevelHashMap
         //CDSUNIT_DECLARE_MultiLevelHashMap
@@ -698,13 +699,14 @@ namespace map2 {
         CPPUNIT_TEST_SUITE(Map_DelOdd)
             CDSUNIT_TEST_MichaelMap
             CDSUNIT_TEST_SplitList
+            CDSUNIT_TEST_SkipListMap
+
             //CDSUNIT_TEST_MultiLevelHashMap // the test is not suitable
         CPPUNIT_TEST_SUITE_END();
 
         ////CDSUNIT_DECLARE_StripedMap
         ////CDSUNIT_DECLARE_RefinableMap
         //CDSUNIT_DECLARE_CuckooMap
-        //CDSUNIT_DECLARE_SkipListMap
         //CDSUNIT_DECLARE_EllenBinTreeMap
         //CDSUNIT_DECLARE_BronsonAVLTreeMap
         //CDSUNIT_DECLARE_MultiLevelHashMap
index 255f0784489848fc14e9b85dbec4ddb5f6d7a66f..c0cd78454eed7c988567576447dce73a0c6086b9 100644 (file)
@@ -3,10 +3,10 @@
 #include "map2/map_delodd.h"
 #include "map2/map_type_skip_list.h"
 
-namespace map2 {
-    CDSUNIT_DEFINE_SkipListMap( cc::skip_list::implementation_tag, Map_DelOdd)
+#undef TEST_CASE
+#define TEST_CASE(TAG, X)  void Map_DelOdd::X() { run_test<typename map_type< TAG, key_type, value_type>::X>(); }
+#include "map2/map_defs.h"
 
-    CPPUNIT_TEST_SUITE_PART( Map_DelOdd, run_SkipListMap )
-        CDSUNIT_TEST_SkipListMap
-    CPPUNIT_TEST_SUITE_END_PART()
+namespace map2 {
+    CDSUNIT_DECLARE_SkipListMap
 } // namespace map2
index eb142c94dd9b24ea2763e1104dea9cc8a576d319..8f95050e52c99a30b0184e0730b3cc9886304336 100644 (file)
 
 namespace map2 {
 
+    template <class GC, typename Key, typename T, typename Traits = cc::split_list::traits >
+    class SkipListMap : public cc::SkipListMap< GC, Key, T, Traits >
+    {
+        typedef cc::SkipListMap< GC, Key, T, Traits > base_class;
+    public:
+        template <typename Config>
+        SkipListMap( Config const& /*cfg*/)
+            : base_class()
+        {}
+
+        // for testing
+        static CDS_CONSTEXPR bool const c_bExtractSupported = true;
+        static CDS_CONSTEXPR bool const c_bLoadFactorDepended = true;
+    };
+
+    struct tag_SkipListMap;
+
     template <typename Key, typename Value>
-    struct map_type< cc::skip_list::implementation_tag, Key, Value >: public map_type_base< Key, Value >
+    struct map_type< tag_SkipListMap, Key, Value >: public map_type_base< Key, Value >
     {
         typedef map_type_base< Key, Value > base_class;
         typedef typename base_class::compare    compare;
@@ -27,15 +44,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_hp_less_pascal;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_dhp_less_pascal;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_nogc_less_pascal;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpi_less_pascal;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpb_less_pascal;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_gpt_less_pascal;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_shb_less_pascal;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal > SkipListMap_rcu_sht_less_pascal;
 #endif
 
         class traits_SkipListMap_less_pascal_seqcst: public cc::skip_list::make_traits <
@@ -45,15 +62,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_hp_less_pascal_seqcst;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_dhp_less_pascal_seqcst;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_nogc_less_pascal_seqcst;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpi_less_pascal_seqcst;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpb_less_pascal_seqcst;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_gpt_less_pascal_seqcst;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_shb_less_pascal_seqcst;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_seqcst > SkipListMap_rcu_sht_less_pascal_seqcst;
 #endif
 
         class traits_SkipListMap_less_pascal_stat: public cc::skip_list::make_traits <
@@ -63,15 +80,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_hp_less_pascal_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_dhp_less_pascal_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_nogc_less_pascal_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpi_less_pascal_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpb_less_pascal_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_gpt_less_pascal_stat;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_shb_less_pascal_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_pascal_stat > SkipListMap_rcu_sht_less_pascal_stat;
 #endif
 
         class traits_SkipListMap_cmp_pascal: public cc::skip_list::make_traits <
@@ -80,15 +97,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_hp_cmp_pascal;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_dhp_cmp_pascal;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_nogc_cmp_pascal;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpi_cmp_pascal;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpb_cmp_pascal;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_gpt_cmp_pascal;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_shb_cmp_pascal;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal > SkipListMap_rcu_sht_cmp_pascal;
 #endif
 
         class traits_SkipListMap_cmp_pascal_stat: public cc::skip_list::make_traits <
@@ -98,15 +115,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_hp_cmp_pascal_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_dhp_cmp_pascal_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_nogc_cmp_pascal_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpi_cmp_pascal_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpb_cmp_pascal_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_gpt_cmp_pascal_stat;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_shb_cmp_pascal_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_pascal_stat > SkipListMap_rcu_sht_cmp_pascal_stat;
 #endif
 
         class traits_SkipListMap_less_xorshift: public cc::skip_list::make_traits <
@@ -115,15 +132,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_hp_less_xorshift;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_dhp_less_xorshift;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_nogc_less_xorshift;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpi_less_xorshift;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpb_less_xorshift;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_gpt_less_xorshift;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_shb_less_xorshift;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift > SkipListMap_rcu_sht_less_xorshift;
 #endif
 
         class traits_SkipListMap_less_xorshift_stat: public cc::skip_list::make_traits <
@@ -133,15 +150,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_hp_less_xorshift_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_dhp_less_xorshift_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_nogc_less_xorshift_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpi_less_xorshift_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpb_less_xorshift_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_gpt_less_xorshift_stat;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_shb_less_xorshift_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_less_xorshift_stat > SkipListMap_rcu_sht_less_xorshift_stat;
 #endif
 
         class traits_SkipListMap_cmp_xorshift: public cc::skip_list::make_traits <
@@ -150,15 +167,15 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_hp_cmp_xorshift;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_dhp_cmp_xorshift;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_nogc_cmp_xorshift;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpi_cmp_xorshift;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpb_cmp_xorshift;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_gpt_cmp_xorshift;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_shb_cmp_xorshift;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift > SkipListMap_rcu_sht_cmp_xorshift;
 #endif
 
         class traits_SkipListMap_cmp_xorshift_stat: public cc::skip_list::make_traits <
@@ -168,21 +185,21 @@ namespace map2 {
                 ,co::item_counter< cds::atomicity::item_counter >
             >::type
         {};
-        typedef cc::SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
-        typedef cc::SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
+        typedef SkipListMap< cds::gc::HP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_hp_cmp_xorshift_stat;
+        typedef SkipListMap< cds::gc::DHP, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_dhp_cmp_xorshift_stat;
+        typedef SkipListMap< cds::gc::nogc, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_nogc_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_gpi, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpi_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_gpb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpb_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_gpt, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_gpt_cmp_xorshift_stat;
 #ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
-        typedef cc::SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
-        typedef cc::SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_shb, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_shb_cmp_xorshift_stat;
+        typedef SkipListMap< rcu_sht, Key, Value, traits_SkipListMap_cmp_xorshift_stat > SkipListMap_rcu_sht_cmp_xorshift_stat;
 #endif
 
     };
 
     template <typename GC, typename K, typename T, typename Traits >
-    static inline void print_stat( cc::SkipListMap< GC, K, T, Traits > const& m )
+    static inline void print_stat( SkipListMap< GC, K, T, Traits > const& m )
     {
         CPPUNIT_MSG( m.statistics() );
     }