From 30b3a2ec6f99a290f4c1ce5eef35f841bd6a7e4f Mon Sep 17 00:00:00 2001 From: khizmax Date: Sat, 2 Apr 2016 00:02:29 +0300 Subject: [PATCH] Fixed some bugs related to type conversion --- cds/container/split_list_map.h | 2 +- cds/container/split_list_map_rcu.h | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/cds/container/split_list_map.h b/cds/container/split_list_map.h index 8ec8dcea..56753b9a 100644 --- a/cds/container/split_list_map.h +++ b/cds/container/split_list_map.h @@ -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 ); diff --git a/cds/container/split_list_map_rcu.h b/cds/container/split_list_map_rcu.h index 66ee073d..2e5f9228 100644 --- a/cds/container/split_list_map_rcu.h +++ b/cds/container/split_list_map_rcu.h @@ -299,8 +299,7 @@ namespace cds { namespace container { template 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 bool emplace( K&& key, Args&&... args ) { - return base_class::emplace( std::forward(key), std::move(mapped_type(std::forward(args)...))); + return base_class::emplace( key_type( std::forward( key )), mapped_type( std::forward(args)... )); } /// Updates data by \p key @@ -410,8 +409,10 @@ namespace cds { namespace container { std::pair 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 ); -- 2.34.1