Fixed explicit ctor incompatibility
authorkhizmax <libcds.dev@gmail.com>
Wed, 6 Apr 2016 21:37:20 +0000 (00:37 +0300)
committerkhizmax <libcds.dev@gmail.com>
Wed, 6 Apr 2016 21:37:20 +0000 (00:37 +0300)
cds/container/striped_map.h
cds/container/striped_map/boost_flat_map.h
cds/container/striped_map/boost_list.h
cds/container/striped_map/boost_slist.h
cds/container/striped_map/std_hash_map.h
cds/container/striped_map/std_list.h
cds/container/striped_map/std_map.h
cds/container/striped_set/adapter.h

index 88ca30dd6c7e3d07d068d4c10159ad3bd8b1f2cf..40b32ae34d9edbd5bfdb6b57fa6fbc146c2afa42 100644 (file)
@@ -241,7 +241,7 @@ namespace cds { namespace container {
                         #include <cds/container/striped_map/boost_map.h>
                         #include <cds/container/striped_hash_map.h>
                         typedef cds::container::StripedMap<
-                            boost::container::map< Key, T, std::pair< const Key, T> >
+                            boost::container::map< Key, T, std::less<Key> >
                         > striped_map;
                     \endcode
                     </td>
@@ -256,7 +256,7 @@ namespace cds { namespace container {
                         #include <cds/container/striped_hash_map.h>
                         typedef cds::container::StripedMap<
                             boost::container::flat_map< Key, T,
-                                std::less< std::pair< const Key, T> >
+                                std::less< std::less<Key> >
                             >
                         > striped_map;
                     \endcode
@@ -286,7 +286,7 @@ namespace cds { namespace container {
             There are two possibility:
             - either your \p MyBestContainer class has native support of bucket's interface;
                 in this case, you can use default <tt>striped_set::adapt</tt> metafunction;
-            - or your \p MyBestContainer class does not support bucket's interface, which means, that you should develop a specialization
+            - or your \p MyBestContainer class does not support bucket's interface; it means you should develop a specialization
                 <tt>cds::container::striped_set::adapt<MyBestContainer> </tt> metafunction providing necessary interface.
 
             The <tt>striped_set::adapt< Container, Options... ></tt> metafunction has two template argument:
@@ -295,7 +295,7 @@ namespace cds { namespace container {
                 any option from \p Options for its internal use. For example, a \p compare option can be passed to \p adapt
                 metafunction via \p Options argument of \p %StripedMap declaration.
 
-            See striped_set::adapt metafunction for the description of interface that the bucket container must provide
+            See \p striped_set::adapt metafunction for the description of interface that the bucket container must provide
             to be \p %StripedMap compatible.
 
         <b>Copy policy</b>
index 6921db987a8324ab5e33c9cf17f6cd9d416d73bd..72bf0641b92cf89fb3cdeae38c2ba8c8e559cecc 100644 (file)
 #include <cds/container/striped_set/adapter.h>
 #include <boost/container/flat_map.hpp>
 
-//#if CDS_COMPILER == CDS_COMPILER_MSVC && CDS_COMPILER_VERSION >= 1700
-//#   error "boost::container::flat_map is not compatible with MS VC++ 11"
-//#endif
-
 
 //@cond
 namespace cds { namespace container {
index 94125ed73d7030f03003d978f8ab0504e5f18e2a..f39e4a88ed0c709b75aa61acf398fcf5b43cffae 100644 (file)
@@ -167,7 +167,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                 iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
                 if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
                     //value_type newItem( key );
-                    it = m_List.insert( it, value_type( key, mapped_type()) );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type()) );
                     f( *it );
 
                     return true;
@@ -180,9 +180,10 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename K, typename... Args>
             bool emplace( K&& key, Args&&... args )
             {
-                iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
-                if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
-                    m_List.emplace( it, std::forward<K>(key), std::move( mapped_type( std::forward<Args>(args)... )) );
+                value_type val( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )... ));
+                iterator it = std::lower_bound( m_List.begin(), m_List.end(), val.first, find_predicate() );
+                if ( it == m_List.end() || key_comparator()( val.first, it->first ) != 0 ) {
+                    m_List.emplace( it, std::move( val ));
                     return true;
                 }
                 return false;
@@ -197,8 +198,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                     if ( !bAllowInsert )
                         return std::make_pair( false, false );
 
-                    value_type newItem( key, mapped_type() );
-                    it = m_List.insert( it, newItem );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type() ));
                     func( true, *it );
 
                     return std::make_pair( true, true );
index c154b951bdaee966932b1e7a27fd413ac8b71204..a5e7b00da6a3b48279312018a271bf76f236bcfe 100644 (file)
@@ -178,8 +178,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             {
                 std::pair< iterator, bool > pos = find_prev_item( key );
                 if ( !pos.second ) {
-                    value_type newItem( key, mapped_type() );
-                    pos.first = m_List.insert_after( pos.first, newItem );
+                    pos.first = m_List.insert_after( pos.first, value_type( key_type( key ), mapped_type() ));
                     f( *pos.first );
                     return true;
                 }
@@ -193,7 +192,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             {
                 std::pair< iterator, bool > pos = find_prev_item( key );
                 if ( !pos.second ) {
-                    m_List.emplace_after( pos.first, std::forward<K>(key), std::move( mapped_type( std::forward<Args>(args)... )));
+                    m_List.emplace_after( pos.first, key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )... ));
                     return true;
                 }
                 return false;
@@ -208,8 +207,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                     if ( !bAllowInsert )
                         return std::make_pair( false, false );
 
-                    value_type newItem( key, mapped_type() );
-                    pos.first = m_List.insert_after( pos.first, newItem );
+                    pos.first = m_List.insert_after( pos.first, value_type( key_type( key ), mapped_type() ));
                     func( true, *pos.first );
                     return std::make_pair( true, true );
                 }
index da58820400767ad4522142e478e96ec2b5f6e419..4cfe659a51a36e182b9c3a45e8cf0c20e0d05006 100644 (file)
@@ -132,7 +132,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool insert( const Q& key, Func f )
             {
-                std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ));
+                std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ));
                 if ( res.second )
                     f( const_cast<value_type&>(*res.first) );
                 return res.second;
@@ -141,7 +141,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename... Args>
             bool emplace( Q&& key, Args&&... args )
             {
-                std::pair<iterator, bool> res = m_Map.emplace( std::forward<Q>(key), std::move( mapped_type(std::forward<Args>(args)...)) );
+                std::pair<iterator, bool> res = m_Map.emplace( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>( args )...));
                 return res.second;
             }
 
@@ -149,12 +149,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             std::pair<bool, bool> update( const Q& key, Func func, bool bAllowInsert )
             {
                 if ( bAllowInsert ) {
-                    std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ) );
+                    std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ) );
                     func( res.second, const_cast<value_type&>(*res.first));
                     return std::make_pair( true, res.second );
                 }
                 else {
-                    auto it = m_Map.find(key_type( key ));
+                    auto it = m_Map.find( key_type( key ));
                     if ( it == end() )
                         return std::make_pair( false, false );
                     func( false, *it );
@@ -165,7 +165,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool erase( const Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(key) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
                 f( const_cast<value_type&>(*it) );
@@ -174,12 +174,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             }
 
             template <typename Q, typename Func>
-            bool find( Q& val, Func f )
+            bool find( Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(val) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
-                f( const_cast<value_type&>(*it), val );
+                f( const_cast<value_type&>(*it), key );
                 return true;
             }
 
index 10080dd121e75aa5b3e089772cbd47bda1807923..cc19f06d0d8ef0402e8be4ff33499935bddef39f 100644 (file)
@@ -177,8 +177,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             {
                 iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
                 if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
-                    //value_type newItem( key );
-                    it = m_List.insert( it, value_type( key, mapped_type()) );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type()) );
                     f( *it );
 
 #           if !defined(CDS_STD_LIST_SIZE_CXX11_CONFORM)
@@ -216,8 +215,7 @@ namespace cds { namespace intrusive { namespace striped_set {
                     if ( !bAllowInsert )
                         return std::make_pair( false, false );
 
-                    value_type newItem( key, mapped_type() );
-                    it = m_List.insert( it, newItem );
+                    it = m_List.insert( it, value_type( key_type( key ), mapped_type() ));
                     func( true, *it );
 #           if !defined(CDS_STD_LIST_SIZE_CXX11_CONFORM)
                     ++m_nSize;
index 3c0b37d9321ff8d774581028b9bc086e0d853829..76da98bb7a619fed93123465ed058ee328c09f0e 100644 (file)
@@ -132,7 +132,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool insert( const Q& key, Func f )
             {
-                std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ) );
+                std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ) );
                 if ( res.second )
                     f( *res.first );
                 return res.second;
@@ -141,7 +141,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename... Args>
             bool emplace( Q&& key, Args&&... args )
             {
-                std::pair<iterator, bool> res = m_Map.emplace( std::forward<Q>(key), std::move(mapped_type( std::forward<Args>(args)...)));
+                std::pair<iterator, bool> res = m_Map.emplace( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>( args )...));
                 return res.second;
             }
 
@@ -149,12 +149,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             std::pair<bool, bool> update( const Q& key, Func func, bool bAllowInsert )
             {
                 if ( bAllowInsert ) {
-                    std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ));
+                    std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ));
                     func( res.second, *res.first );
                     return std::make_pair( true, res.second );
                 }
                 else {
-                    auto it = m_Map.find(key_type( key ));
+                    auto it = m_Map.find( key_type( key ));
                     if ( it == end() )
                         return std::make_pair( false, false );
                     func( false, *it );
@@ -165,7 +165,7 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename Q, typename Func>
             bool erase( const Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(key) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
                 f( *it );
@@ -174,12 +174,12 @@ namespace cds { namespace intrusive { namespace striped_set {
             }
 
             template <typename Q, typename Func>
-            bool find( Q& val, Func f )
+            bool find( Q& key, Func f )
             {
-                iterator it = m_Map.find( key_type(val) );
+                iterator it = m_Map.find( key_type( key ));
                 if ( it == m_Map.end() )
                     return false;
-                f( *it, val );
+                f( *it, key );
                 return true;
             }
 
index bbb1be14652a9ad396f4479dd409c21c471cd119..3f0df6428069bb7f251eb6b67225992fa1cdecd1 100644 (file)
@@ -452,7 +452,7 @@ namespace cds { namespace container {
                 template <typename Q, typename Func>
                 bool insert( const Q& key, Func f )
                 {
-                    std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ) );
+                    std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ) );
                     if ( res.second )
                         f( *res.first );
                     return res.second;
@@ -461,7 +461,7 @@ namespace cds { namespace container {
                 template <typename Q, typename... Args>
                 bool emplace( Q&& key, Args&&... args )
                 {
-                    std::pair<iterator, bool> res = m_Map.emplace( std::forward<Q>(key), std::move( mapped_type( std::forward<Args>(args)...)));
+                    std::pair<iterator, bool> res = m_Map.emplace( key_type( std::forward<Q>( key )), mapped_type( std::forward<Args>( args )...));
                     return res.second;
                 }
 
@@ -469,12 +469,12 @@ namespace cds { namespace container {
                 std::pair<bool, bool> update( const Q& key, Func func, bool bAllowInsert )
                 {
                     if ( bAllowInsert ) {
-                        std::pair<iterator, bool> res = m_Map.insert( value_type( key, mapped_type() ));
+                        std::pair<iterator, bool> res = m_Map.insert( value_type( key_type( key ), mapped_type() ));
                         func( res.second, *res.first );
                         return std::make_pair( true, res.second );
                     }
                     else {
-                        auto it = m_Map.find(key_type( key ));
+                        auto it = m_Map.find( key_type( key ));
                         if ( it == end() )
                             return std::make_pair( false, false );
                         func( false, *it );
@@ -485,7 +485,7 @@ namespace cds { namespace container {
                 template <typename Q, typename Func>
                 bool erase( const Q& key, Func f )
                 {
-                    iterator it = m_Map.find( key_type(key) );
+                    iterator it = m_Map.find( key_type( key ));
                     if ( it == m_Map.end() )
                         return false;
                     f( *it );
@@ -496,7 +496,7 @@ namespace cds { namespace container {
                 template <typename Q, typename Func>
                 bool find( Q& val, Func f )
                 {
-                    iterator it = m_Map.find( key_type(val) );
+                    iterator it = m_Map.find( key_type( val ));
                     if ( it == m_Map.end() )
                         return false;
                     f( *it, val );