From d05bf1b4fd4ac7abd0c78d3ce46d2fc046e8a1bb Mon Sep 17 00:00:00 2001 From: Steffen Zimmermann Date: Mon, 15 Nov 2021 11:26:23 +0100 Subject: [PATCH] let map/multimap/set/multiset return iterator on erase (#463) Beginning with C++11, erase(iterator) and erase(const_iterator) returns an iterator following the removed element. --- include/etl/map.h | 6 +++--- include/etl/multimap.h | 4 ++-- include/etl/multiset.h | 4 ++-- include/etl/set.h | 6 +++--- test/test_map.cpp | 6 ++++-- test/test_multimap.cpp | 6 ++++-- test/test_multiset.cpp | 6 ++++-- test/test_set.cpp | 6 ++++-- 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/include/etl/map.h b/include/etl/map.h index 5ab89fe5..6cc18707 100644 --- a/include/etl/map.h +++ b/include/etl/map.h @@ -993,10 +993,10 @@ namespace etl //************************************************************************* /// Erases the value at the specified position. //************************************************************************* - void erase(iterator position) + iterator erase(iterator position) { - // Remove the node by its key - erase((*position).first); + // Remove the node by its node specified in iterator position + return erase(const_iterator(position)); } //************************************************************************* diff --git a/include/etl/multimap.h b/include/etl/multimap.h index 14c8a905..5224973b 100644 --- a/include/etl/multimap.h +++ b/include/etl/multimap.h @@ -1101,10 +1101,10 @@ namespace etl //************************************************************************* /// Erases the value at the specified position. //************************************************************************* - void erase(iterator position) + iterator erase(iterator position) { // Remove the node by its node specified in iterator position - (void)erase(const_iterator(position)); + return erase(const_iterator(position)); } //************************************************************************* diff --git a/include/etl/multiset.h b/include/etl/multiset.h index 21e32a2d..f1734dcd 100644 --- a/include/etl/multiset.h +++ b/include/etl/multiset.h @@ -1085,10 +1085,10 @@ namespace etl //************************************************************************* /// Erases the value at the specified position. //************************************************************************* - void erase(iterator position) + iterator erase(iterator position) { // Remove the node by its node specified in iterator position - (void)erase(const_iterator(position)); + return erase(const_iterator(position)); } //************************************************************************* diff --git a/include/etl/set.h b/include/etl/set.h index 88f8bc5f..262703a7 100644 --- a/include/etl/set.h +++ b/include/etl/set.h @@ -956,10 +956,10 @@ namespace etl //************************************************************************* /// Erases the value at the specified position. //************************************************************************* - void erase(iterator position) + iterator erase(iterator position) { - // Remove the node by its key - erase((*position)); + // Remove the node by its node specified in iterator position + return erase(const_iterator(position)); } //************************************************************************* diff --git a/test/test_map.cpp b/test/test_map.cpp index 0abec90c..af9138c8 100644 --- a/test/test_map.cpp +++ b/test/test_map.cpp @@ -830,8 +830,10 @@ namespace std::advance(i_compare, 2); std::advance(i_data, 2); - compare_data.erase(i_compare); - data.erase(i_data); + Compare_Data::iterator i_compare1 = compare_data.erase(i_compare); + Data::iterator i_data1 = data.erase(i_data); + + CHECK(i_compare1->second == i_data1->second); bool isEqual = Check_Equal(data.begin(), data.end(), diff --git a/test/test_multimap.cpp b/test/test_multimap.cpp index 1218410c..f8871ba9 100644 --- a/test/test_multimap.cpp +++ b/test/test_multimap.cpp @@ -699,8 +699,10 @@ namespace Compare_Data::iterator i_compare = compare_data.begin(); Data::iterator i_data = data.begin(); - compare_data.erase(i_compare); - data.erase(i_data); + Compare_Data::iterator i_compare1 = compare_data.erase(i_compare); + Data::iterator i_data1 = data.erase(i_data); + + CHECK(i_compare1->second == i_data1->second); bool isEqual = Check_Equal(data.begin(), data.end(), diff --git a/test/test_multiset.cpp b/test/test_multiset.cpp index be31ac51..0c9b8c9d 100644 --- a/test/test_multiset.cpp +++ b/test/test_multiset.cpp @@ -713,8 +713,10 @@ namespace Compare_Data::iterator i_compare = compare_data.begin(); Data::iterator i_data = data.begin(); - compare_data.erase(i_compare); - data.erase(i_data); + Compare_Data::iterator i_compare1 = compare_data.erase(i_compare); + Data::iterator i_data1 = data.erase(i_data); + + CHECK_EQUAL(*i_compare1, *i_data1); bool isEqual = Check_Equal(data.begin(), data.end(), diff --git a/test/test_set.cpp b/test/test_set.cpp index a552c61b..1a886fce 100644 --- a/test/test_set.cpp +++ b/test/test_set.cpp @@ -754,8 +754,10 @@ namespace std::advance(i_compare, 2); std::advance(i_data, 2); - compare_data.erase(i_compare); - data.erase(i_data); + Compare_Data::iterator i_compare1 = compare_data.erase(i_compare); + Data::iterator i_data1 = data.erase(i_data); + + CHECK_EQUAL(*i_compare1, *i_data1); bool isEqual = Check_Equal(data.begin(), data.end(),