Fixed some bugs related to type conversion
authorkhizmax <libcds.dev@gmail.com>
Fri, 1 Apr 2016 21:02:29 +0000 (00:02 +0300)
committerkhizmax <libcds.dev@gmail.com>
Fri, 1 Apr 2016 21:02:29 +0000 (00:02 +0300)
cds/container/split_list_map.h
cds/container/split_list_map_rcu.h

index 8ec8dcea9a013ddc483f01c4aed0e444b1b58b8d..56753b9ad53f61632d1ee102c981302f7c927997 100644 (file)
@@ -408,7 +408,7 @@ namespace cds { namespace container {
             typedef decltype( std::make_pair( key_type( key ), mapped_type() )) arg_pair_type;
 
             return base_class::update( std::make_pair( key_type( key ), mapped_type()),
-                [&func](bool bNew, value_type& item, arg_pair_type const& /*val*/) {
+                [&func]( bool bNew, value_type& item, arg_pair_type const& /*val*/ ) {
                     func( bNew, item );
                 },
                 bAllowInsert );
index 66ee073dd2bf5df355029c2f2c5881b9777070fc..2e5f92280e9b5095a986dc2309ff4477361f1f9f 100644 (file)
@@ -299,8 +299,7 @@ namespace cds { namespace container {
         template <typename K>
         bool insert( K const& key )
         {
-            //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type() ) );
+            return base_class::emplace( key_type( key ), mapped_type() );
         }
 
         /// Inserts new node
@@ -320,7 +319,7 @@ namespace cds { namespace container {
         bool insert( K const& key, V const& val )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair(key, val) );
+            return base_class::emplace( key_type( key ), mapped_type( val ));
         }
 
         /// Inserts new node and initialize it by a functor
@@ -358,7 +357,7 @@ namespace cds { namespace container {
         bool insert_with( K const& key, Func func )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::insert( std::make_pair( key, mapped_type() ), func );
+            return base_class::insert( std::make_pair( key_type( key ), mapped_type() ), func );
         }
 
         /// For key \p key inserts data of type \p mapped_type created in-place from \p args
@@ -372,7 +371,7 @@ namespace cds { namespace container {
         template <typename K, typename... Args>
         bool emplace( K&& key, Args&&... args )
         {
-            return base_class::emplace( std::forward<K>(key), std::move(mapped_type(std::forward<Args>(args)...)));
+            return base_class::emplace( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>(args)... ));
         }
 
         /// Updates data by \p key
@@ -410,8 +409,10 @@ namespace cds { namespace container {
         std::pair<bool, bool> update( K const& key, Func func, bool bAllowInsert = true )
         {
             //TODO: pass arguments by reference (make_pair makes copy)
-            return base_class::update( std::make_pair( key, mapped_type() ),
-                [&func](bool bNew, value_type& item, value_type const& /*val*/) {
+            typedef decltype( std::make_pair( key_type( key ), mapped_type() )) arg_pair_type;
+
+            return base_class::update( std::make_pair( key_type( key ), mapped_type() ),
+                [&func]( bool bNew, value_type& item, arg_pair_type const& /*val*/ ) {
                     func( bNew, item );
                 },
                 bAllowInsert );