From b170379f3221672fb7ad2e1396c37d1735266f59 Mon Sep 17 00:00:00 2001 From: jfbastien Date: Fri, 13 Mar 2009 13:54:51 +0000 Subject: [PATCH] Bug 2686155: flex_string is missing input_iterator methods git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@1009 7ec92016-0320-0410-acc4-a06ded1c099a --- include/loki/flex/flex_string_shell.h | 14 ++-- test/flex_string/main.cpp | 98 ++++++++++++++++++++++++--- 2 files changed, 95 insertions(+), 17 deletions(-) diff --git a/include/loki/flex/flex_string_shell.h b/include/loki/flex/flex_string_shell.h index e6553b5..975f2ee 100644 --- a/include/loki/flex/flex_string_shell.h +++ b/include/loki/flex/flex_string_shell.h @@ -645,16 +645,16 @@ private: } template - void InsertImpl(iterator i1, iterator i2, - InputIterator b, InputIterator e, std::input_iterator_tag) + void InsertImpl(iterator insertPosition, + InputIterator inputBegin, InputIterator inputEnd, std::input_iterator_tag) { - flex_string temp(begin(), i1); - for (; b != e; ++b) + flex_string temporary(begin(), insertPosition); + for (; inputBegin != inputEnd; ++inputBegin) { - temp.push_back(*b); + temporary.push_back(*inputBegin); } - temp.append(i2, end()); - swap(temp); + temporary.append(insertPosition, end()); + swap(temporary); } public: diff --git a/test/flex_string/main.cpp b/test/flex_string/main.cpp index c7c21a3..50c23c0 100644 --- a/test/flex_string/main.cpp +++ b/test/flex_string/main.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -621,6 +622,19 @@ namespace Tests return result; } + template + String constructor_iterator_iterator__istream_iterator() + { + // 21.3.5 + String random1(RandomString(MaxString::value)); + typedef typename String::value_type value_type; + std::basic_stringstream > stream; + stream << random1; + std::istreambuf_iterator > begin(stream), end; + String result(begin, end); + return result; + } + // TODO: destructor template @@ -1051,6 +1065,20 @@ namespace Tests return random1 + SeparatorString() + copy; } + template + String append_iterator_iterator__istream_iterator() + { + // 21.3.5 + String random1(RandomString(MaxString::value)); + String random2(RandomString(MaxString::value)); + typedef typename String::value_type value_type; + std::basic_stringstream > stream; + stream << random1; + std::istreambuf_iterator > begin(stream), end; + random2.append(begin, end); + return random2; + } + template String push_back_char() { @@ -1245,6 +1273,20 @@ namespace Tests return random1 + SeparatorString() + copy; } + template + String assign_iterator_iterator__istream_iterator() + { + // 21.3.5 + String random1(RandomString(MaxString::value)); + String random2(RandomString(MaxString::value)); + typedef typename String::value_type value_type; + std::basic_stringstream > stream; + stream << random1; + std::istreambuf_iterator > begin(stream), end; + random2.assign(begin, end); + return random2; + } + template String insert_position_string() { @@ -1406,7 +1448,7 @@ namespace Tests } template - String insert_iterator_iterator() + String insert_iterator_iterator_iterator() { // 21.3.5 String random1(RandomString(MaxString::value)); @@ -1417,7 +1459,7 @@ namespace Tests } template - String insert_iterator_iterator__self() + String insert_iterator_iterator_iterator__self() { // 21.3.5 String random1(RandomString(MaxString::value)); @@ -1427,7 +1469,7 @@ namespace Tests } template - String insert_iterator_iterator__selfcopy() + String insert_iterator_iterator_iterator__selfcopy() { // 21.3.5 String random1(RandomString(MaxString::value)); @@ -1438,7 +1480,7 @@ namespace Tests } template - String insert_iterator_iterator__self_reverse() + String insert_iterator_iterator_iterator__self_reverse() { // 21.3.5 String random1(RandomString(MaxString::value)); @@ -1448,7 +1490,7 @@ namespace Tests } template - String insert_iterator_iterator__selfcopy_reverse() + String insert_iterator_iterator_iterator__selfcopy_reverse() { // 21.3.5 String random1(RandomString(MaxString::value)); @@ -1458,6 +1500,21 @@ namespace Tests return random1; } + template + String insert_iterator_iterator_iterator__istream_iterator() + { + // 21.3.5 + String random1(RandomString(MaxString::value)); + String random2(RandomString(MaxString::value)); + const typename String::size_type position = random(0, random2.size()); + typedef typename String::value_type value_type; + std::basic_stringstream > stream; + stream << random1; + std::istreambuf_iterator > begin(stream), end; + random2.insert(random2.begin() + position, begin, end); + return random2; + } + template String erase_position_number() { @@ -1842,6 +1899,22 @@ namespace Tests return random1; } + template + String replace_iterator_iterator_iterator_iterator__istream_iterator() + { + // 21.3.5 + String random1(RandomString(MaxString::value)); + String random2(RandomString(MaxString::value)); + const typename String::size_type position1 = random(0, random1.size()); + const typename String::size_type position2 = random(position1, random1.size()); + typedef typename String::value_type value_type; + std::basic_stringstream > stream; + stream << random2; + std::istreambuf_iterator > begin(stream), end; + random1.replace(random1.begin() + position1, random1.begin() + position2, begin, end); + return random1; + } + template String copy_char_number_position() { @@ -2726,6 +2799,7 @@ public: ADD_TEST(constructor_cstr_number); ADD_TEST(constructor_number_char); ADD_TEST(constructor_iterator_iterator); + ADD_TEST(constructor_iterator_iterator__istream_iterator); ADD_TEST(operator_equal_string); ADD_TEST(operator_equal_string__self); ADD_TEST(operator_equal_string__selfCopy); @@ -2765,6 +2839,7 @@ public: ADD_TEST(append_iterator_iterator__selfcopy); ADD_TEST(append_iterator_iterator__self_reverse); ADD_TEST(append_iterator_iterator__selfcopy_reverse); + ADD_TEST(append_iterator_iterator__istream_iterator); ADD_TEST(push_back_char); ADD_TEST(assign_string); ADD_TEST(assign_string__self); @@ -2784,6 +2859,7 @@ public: ADD_TEST(assign_iterator_iterator__selfcopy); ADD_TEST(assign_iterator_iterator__self_reverse); ADD_TEST(assign_iterator_iterator__selfcopy_reverse); + ADD_TEST(assign_iterator_iterator__istream_iterator); ADD_TEST(insert_position_string); ADD_TEST(insert_position_string__self); ADD_TEST(insert_position_string__selfcopy); @@ -2798,11 +2874,12 @@ public: ADD_TEST(insert_position_cstr__selfcopy); ADD_TEST(insert_iterator_char); ADD_TEST(insert_position_number_char); - ADD_TEST(insert_iterator_iterator); - ADD_TEST(insert_iterator_iterator__self); - ADD_TEST(insert_iterator_iterator__selfcopy); - ADD_TEST(insert_iterator_iterator__self_reverse); - ADD_TEST(insert_iterator_iterator__selfcopy_reverse); + ADD_TEST(insert_iterator_iterator_iterator); + ADD_TEST(insert_iterator_iterator_iterator__self); + ADD_TEST(insert_iterator_iterator_iterator__selfcopy); + ADD_TEST(insert_iterator_iterator_iterator__self_reverse); + ADD_TEST(insert_iterator_iterator_iterator__selfcopy_reverse); + ADD_TEST(insert_iterator_iterator_iterator__istream_iterator); ADD_TEST(erase_position_number); ADD_TEST(erase_iterator); ADD_TEST(erase_iterator_iterator); @@ -2832,6 +2909,7 @@ public: ADD_TEST(replace_iterator_iterator_iterator_iterator); ADD_TEST(replace_iterator_iterator_iterator_iterator__self); ADD_TEST(replace_iterator_iterator_iterator_iterator__selfcopy); + ADD_TEST(replace_iterator_iterator_iterator_iterator__istream_iterator); ADD_TEST(copy_char_number_position); ADD_TEST(swap); ADD_TEST(swap__self);