From 6e5a7497ae6b81e76035e4ad9fbd728e15c1831f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Sch=C3=B6pflin?= Date: Tue, 25 Sep 2007 08:46:31 +0000 Subject: [PATCH 01/21] Added missing include. [SVN r39519] --- include/boost/algorithm/string/find_format.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/boost/algorithm/string/find_format.hpp b/include/boost/algorithm/string/find_format.hpp index f244df3..cb3dd7c 100644 --- a/include/boost/algorithm/string/find_format.hpp +++ b/include/boost/algorithm/string/find_format.hpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include From 7a97b3390e54ae59e213b1f8d18c074adc7a5022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Sch=C3=B6pflin?= Date: Fri, 28 Sep 2007 07:19:29 +0000 Subject: [PATCH 02/21] Added missing include. [SVN r39586] --- include/boost/algorithm/string/join.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/algorithm/string/join.hpp b/include/boost/algorithm/string/join.hpp index a6c26ab..d2bc382 100644 --- a/include/boost/algorithm/string/join.hpp +++ b/include/boost/algorithm/string/join.hpp @@ -14,7 +14,7 @@ #include #include #include - +#include /*! \file Defines join algorithm. From 1541a554f547c056b2069130e9e912134abab5c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20J=C3=B8rgen=20Ottosen?= Date: Sat, 27 Oct 2007 22:52:29 +0000 Subject: [PATCH 03/21] changed range_result_iterator to range_iterator [SVN r40518] --- include/boost/algorithm/string/find.hpp | 22 +++++++++---------- .../boost/algorithm/string/find_iterator.hpp | 10 ++++----- include/boost/algorithm/string/iter_find.hpp | 10 ++++----- include/boost/algorithm/string/regex.hpp | 4 ++-- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/include/boost/algorithm/string/find.hpp b/include/boost/algorithm/string/find.hpp index f7996f4..1f7202d 100644 --- a/include/boost/algorithm/string/find.hpp +++ b/include/boost/algorithm/string/find.hpp @@ -17,8 +17,6 @@ #include #include #include -#include -#include #include #include @@ -50,7 +48,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find( RangeT& Input, const FinderT& Finder) @@ -78,7 +76,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find_first( Range1T& Input, const Range2T& Search) @@ -104,7 +102,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> ifind_first( Range1T& Input, const Range2T& Search, @@ -131,7 +129,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find_last( Range1T& Input, const Range2T& Search) @@ -157,7 +155,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> ifind_last( Range1T& Input, const Range2T& Search, @@ -185,7 +183,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find_nth( Range1T& Input, const Range2T& Search, @@ -215,7 +213,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> ifind_nth( Range1T& Input, const Range2T& Search, @@ -247,7 +245,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find_head( RangeT& Input, int N) @@ -278,7 +276,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find_tail( RangeT& Input, int N) @@ -307,7 +305,7 @@ namespace boost { */ template inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> find_token( RangeT& Input, PredicateT Pred, diff --git a/include/boost/algorithm/string/find_iterator.hpp b/include/boost/algorithm/string/find_iterator.hpp index 38a30bd..aba28d8 100644 --- a/include/boost/algorithm/string/find_iterator.hpp +++ b/include/boost/algorithm/string/find_iterator.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include @@ -185,12 +185,12 @@ namespace boost { */ template inline find_iterator< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> make_find_iterator( RangeT& Collection, FinderT Finder) { - return find_iterator::type>( + return find_iterator::type>( Collection, Finder); } @@ -363,12 +363,12 @@ namespace boost { */ template inline split_iterator< - BOOST_STRING_TYPENAME range_result_iterator::type> + BOOST_STRING_TYPENAME range_iterator::type> make_split_iterator( RangeT& Collection, FinderT Finder) { - return split_iterator::type>( + return split_iterator::type>( Collection, Finder); } diff --git a/include/boost/algorithm/string/iter_find.hpp b/include/boost/algorithm/string/iter_find.hpp index 41d11b7..73887a8 100644 --- a/include/boost/algorithm/string/iter_find.hpp +++ b/include/boost/algorithm/string/iter_find.hpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include @@ -76,12 +76,12 @@ namespace boost { { function_requires< FinderConcept::type> >(); + BOOST_STRING_TYPENAME range_iterator::type> >(); iterator_range::type> lit_input(as_literal(Input)); typedef BOOST_STRING_TYPENAME - range_result_iterator::type input_iterator_type; + range_iterator::type input_iterator_type; typedef find_iterator find_iterator_type; typedef detail::copy_iterator_rangeF< BOOST_STRING_TYPENAME @@ -145,12 +145,12 @@ namespace boost { { function_requires< FinderConcept::type> >(); + BOOST_STRING_TYPENAME range_iterator::type> >(); iterator_range::type> lit_input(as_literal(Input)); typedef BOOST_STRING_TYPENAME - range_result_iterator::type input_iterator_type; + range_iterator::type input_iterator_type; typedef split_iterator find_iterator_type; typedef detail::copy_iterator_rangeF< BOOST_STRING_TYPENAME diff --git a/include/boost/algorithm/string/regex.hpp b/include/boost/algorithm/string/regex.hpp index d670364..c3b2600 100644 --- a/include/boost/algorithm/string/regex.hpp +++ b/include/boost/algorithm/string/regex.hpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include @@ -54,7 +54,7 @@ namespace boost { typename CharT, typename RegexTraitsT> inline iterator_range< - BOOST_STRING_TYPENAME range_result_iterator::type > + BOOST_STRING_TYPENAME range_iterator::type > find_regex( RangeT& Input, const basic_regex& Rx, From b25d6511b369a2ca290ec408ad6f3146148895a9 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Fri, 2 Nov 2007 20:55:26 +0000 Subject: [PATCH 04/21] merging changes from 1.34 [SVN r40697] --- string/doc/Jamfile.v2 | 1 + string/doc/quickref.xml | 20 +++++++++++++++++--- string/doc/release_notes.xml | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/string/doc/Jamfile.v2 b/string/doc/Jamfile.v2 index be42d64..ac3a43b 100644 --- a/string/doc/Jamfile.v2 +++ b/string/doc/Jamfile.v2 @@ -31,6 +31,7 @@ doxygen autodoc [ glob ../../../../boost/algorithm/string/trim.hpp ] [ glob ../../../../boost/algorithm/string/predicate.hpp ] [ glob ../../../../boost/algorithm/string/split.hpp ] + [ glob ../../../../boost/algorithm/string/iter_find.hpp ] [ glob ../../../../boost/algorithm/string/erase.hpp ] [ glob ../../../../boost/algorithm/string/join.hpp ] [ glob ../../../../boost/algorithm/string/replace.hpp ] diff --git a/string/doc/quickref.xml b/string/doc/quickref.xml index 0972893..3c65ae2 100644 --- a/string/doc/quickref.xml +++ b/string/doc/quickref.xml @@ -151,7 +151,7 @@ lexicographical_compare - Check if a string is lexicographicaly less then another one + Check if a string is lexicographically less then another one lexicographical_compare() @@ -434,7 +434,7 @@ find_all_regex() - + split Split input into parts @@ -442,7 +442,21 @@ split_regex() - + + + iter_find + Iteratively apply the finder to the input to find all matching substrings + + iter_find() + + + + iter_split + Use the finder to find matching substrings in the input and use them as separators to split the input into parts + + iter_split() + + diff --git a/string/doc/release_notes.xml b/string/doc/release_notes.xml index b60b74b..b40504b 100644 --- a/string/doc/release_notes.xml +++ b/string/doc/release_notes.xml @@ -8,6 +8,10 @@ -->
+ + + + Release Notes @@ -19,5 +23,23 @@ 1.33 Internal version of collection traits removed, library adapted to Boost.Range + + 1.34 + + + lexicographical_compare() + + + join() and join_if() + + + New comparison predicates is_less, is_not_greater + + + Negative indexes support (like Perl) in various algorihtms + (*_head/tail, *_nth). + + +
From 5b24f31486a64aab50771bedf5d77e7e825e9bdf Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Fri, 2 Nov 2007 21:00:08 +0000 Subject: [PATCH 05/21] merging changes from 1.34 [SVN r40698] --- include/boost/algorithm/string/regex.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/boost/algorithm/string/regex.hpp b/include/boost/algorithm/string/regex.hpp index c3b2600..98a0dfc 100644 --- a/include/boost/algorithm/string/regex.hpp +++ b/include/boost/algorithm/string/regex.hpp @@ -634,6 +634,12 @@ namespace boost { using algorithm::find_all_regex; using algorithm::split_regex; +#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING + using algorithm::join_if; +#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + using algorithm::join_if_regex; +#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + } // namespace boost From 90fca3990648749d3cfec8d1b11608e6bbf4b156 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Sun, 10 Feb 2008 15:02:17 +0000 Subject: [PATCH 06/21] Point links to the pages that used to be in 'more' to the site. [SVN r43210] --- string/doc/design.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/string/doc/design.xml b/string/doc/design.xml index 23d7bd5..8701b45 100644 --- a/string/doc/design.xml +++ b/string/doc/design.xml @@ -217,7 +217,7 @@ For more information about the exception safety topics, follow this - link + link From a389d768c4539a05e89a26307455d6794b419d31 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Wed, 27 Feb 2008 18:51:14 +0000 Subject: [PATCH 07/21] Fix broken copyright urls. Fixes #1573. [SVN r43422] --- string/doc/concept.xml | 2 +- string/doc/credits.xml | 2 +- string/doc/design.xml | 2 +- string/doc/environment.xml | 2 +- string/doc/intro.xml | 2 +- string/doc/quickref.xml | 2 +- string/doc/rationale.xml | 2 +- string/doc/release_notes.xml | 2 +- string/doc/string_algo.xml | 2 +- string/doc/usage.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/string/doc/concept.xml b/string/doc/concept.xml index 1f3c8d1..ed43108 100644 --- a/string/doc/concept.xml +++ b/string/doc/concept.xml @@ -4,7 +4,7 @@
diff --git a/string/doc/credits.xml b/string/doc/credits.xml index ff7996f..6acdf74 100644 --- a/string/doc/credits.xml +++ b/string/doc/credits.xml @@ -4,7 +4,7 @@
diff --git a/string/doc/design.xml b/string/doc/design.xml index 8701b45..980c722 100644 --- a/string/doc/design.xml +++ b/string/doc/design.xml @@ -5,7 +5,7 @@
diff --git a/string/doc/environment.xml b/string/doc/environment.xml index 667b965..4fef5d9 100644 --- a/string/doc/environment.xml +++ b/string/doc/environment.xml @@ -4,7 +4,7 @@
diff --git a/string/doc/intro.xml b/string/doc/intro.xml index 42e0923..47a7e18 100644 --- a/string/doc/intro.xml +++ b/string/doc/intro.xml @@ -5,7 +5,7 @@
diff --git a/string/doc/quickref.xml b/string/doc/quickref.xml index 3c65ae2..0290bd4 100644 --- a/string/doc/quickref.xml +++ b/string/doc/quickref.xml @@ -4,7 +4,7 @@
diff --git a/string/doc/rationale.xml b/string/doc/rationale.xml index fbc65f2..e2d1ab1 100644 --- a/string/doc/rationale.xml +++ b/string/doc/rationale.xml @@ -4,7 +4,7 @@
diff --git a/string/doc/release_notes.xml b/string/doc/release_notes.xml index b40504b..9314064 100644 --- a/string/doc/release_notes.xml +++ b/string/doc/release_notes.xml @@ -4,7 +4,7 @@
diff --git a/string/doc/string_algo.xml b/string/doc/string_algo.xml index 2313066..f803968 100644 --- a/string/doc/string_algo.xml +++ b/string/doc/string_algo.xml @@ -4,7 +4,7 @@ From 346f032be2c74aa29ad4846c4d6e6ea7ce5af6e8 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Sun, 11 May 2008 13:49:20 +0000 Subject: [PATCH 08/21] Quote href values - our tools don't support unquoted values. [SVN r45283] --- minmax/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minmax/index.html b/minmax/index.html index 27efb39..c1c10e5 100644 --- a/minmax/index.html +++ b/minmax/index.html @@ -56,7 +56,7 @@ be enough. The present library solves both problems.

minmax as straightforward extensions of the C++ standard. As it returns a pair of const&, we must use the Boost.tuple library to construct such +href="../../tuple/index.html">Boost.tuple library to construct such pairs. (Please note: the intent is not to fix the known defaults of std::min and std::max, but to add one more algorithms that combines both; see the From d0a03fdb4e7c3dbc9a0d1feccd04a4ce98d1f919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Sch=C3=B6pflin?= Date: Wed, 28 May 2008 08:32:12 +0000 Subject: [PATCH 09/21] Added missing include. This was already fixed on the 1.34 branch but never merged to the trunk. [SVN r45857] --- include/boost/algorithm/string.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/boost/algorithm/string.hpp b/include/boost/algorithm/string.hpp index a2f943e..0771517 100644 --- a/include/boost/algorithm/string.hpp +++ b/include/boost/algorithm/string.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include From 35f317aeac74ff764002c9d7a8f0c16487569476 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Tue, 17 Jun 2008 20:31:41 +0000 Subject: [PATCH 10/21] unnecessary typedefs removed [SVN r46458] --- include/boost/algorithm/string/find_iterator.hpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/include/boost/algorithm/string/find_iterator.hpp b/include/boost/algorithm/string/find_iterator.hpp index aba28d8..30a337c 100644 --- a/include/boost/algorithm/string/find_iterator.hpp +++ b/include/boost/algorithm/string/find_iterator.hpp @@ -58,12 +58,6 @@ namespace boost { // facade support friend class ::boost::iterator_core_access; - // base type - typedef iterator_facade< - find_iterator, - const iterator_range, - forward_traversal_tag> facade_type; - private: // typedefs @@ -220,12 +214,6 @@ namespace boost { // facade support friend class ::boost::iterator_core_access; - // base type - typedef iterator_facade< - find_iterator, - iterator_range, - forward_traversal_tag> facade_type; - private: // typedefs From 9fa2f90db45839bb776cd9175d047e8f243658a1 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Tue, 17 Jun 2008 21:04:00 +0000 Subject: [PATCH 11/21] begin() and end() calls made fully qualified [SVN r46459] --- include/boost/algorithm/string/concept.hpp | 4 +- .../algorithm/string/detail/case_conv.hpp | 14 +++--- .../string/detail/classification.hpp | 2 +- .../algorithm/string/detail/find_format.hpp | 14 +++--- .../string/detail/find_format_all.hpp | 30 ++++++------ .../boost/algorithm/string/detail/finder.hpp | 12 ++--- .../algorithm/string/detail/formatter.hpp | 4 +- .../string/detail/replace_storage.hpp | 2 +- .../algorithm/string/detail/sequence.hpp | 6 +-- include/boost/algorithm/string/find.hpp | 2 +- .../boost/algorithm/string/find_format.hpp | 12 ++--- .../boost/algorithm/string/find_iterator.hpp | 12 ++--- include/boost/algorithm/string/iter_find.hpp | 8 ++-- include/boost/algorithm/string/join.hpp | 20 ++++---- include/boost/algorithm/string/predicate.hpp | 38 +++++++-------- include/boost/algorithm/string/regex.hpp | 30 ++++++------ include/boost/algorithm/string/trim.hpp | 48 +++++++++---------- 17 files changed, 129 insertions(+), 129 deletions(-) diff --git a/include/boost/algorithm/string/concept.hpp b/include/boost/algorithm/string/concept.hpp index 3ebc88c..9876e98 100644 --- a/include/boost/algorithm/string/concept.hpp +++ b/include/boost/algorithm/string/concept.hpp @@ -65,8 +65,8 @@ namespace boost { void constraints() { // Operation - begin((*pFo)( (*pF)(i,i) )); - end((*pFo)( (*pF)(i,i) )); + ::boost::begin((*pFo)( (*pF)(i,i) )); + ::boost::end((*pFo)( (*pF)(i,i) )); } private: IteratorT i; diff --git a/include/boost/algorithm/string/detail/case_conv.hpp b/include/boost/algorithm/string/detail/case_conv.hpp index 0eaad19..ef1d4aa 100644 --- a/include/boost/algorithm/string/detail/case_conv.hpp +++ b/include/boost/algorithm/string/detail/case_conv.hpp @@ -71,8 +71,8 @@ namespace boost { FunctorT Functor) { return std::transform( - begin(Input), - end(Input), + ::boost::begin(Input), + ::boost::end(Input), Output, Functor); } @@ -84,9 +84,9 @@ namespace boost { FunctorT Functor) { std::transform( - begin(Input), - end(Input), - begin(Input), + ::boost::begin(Input), + ::boost::end(Input), + ::boost::begin(Input), Functor); } @@ -97,10 +97,10 @@ namespace boost { { return SequenceT( make_transform_iterator( - begin(Input), + ::boost::begin(Input), Functor), make_transform_iterator( - end(Input), + ::boost::end(Input), Functor)); } diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index d3139ad..4e77070 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -74,7 +74,7 @@ namespace boost { // Constructor template is_any_ofF( const RangeT& Range ) : - m_Set( begin(Range), end(Range) ) {} + m_Set( ::boost::begin(Range), ::boost::end(Range) ) {} // Operation template diff --git a/include/boost/algorithm/string/detail/find_format.hpp b/include/boost/algorithm/string/detail/find_format.hpp index f1dcc0c..8fb625e 100644 --- a/include/boost/algorithm/string/detail/find_format.hpp +++ b/include/boost/algorithm/string/detail/find_format.hpp @@ -68,17 +68,17 @@ namespace boost { if ( !M ) { // Match not found - return original sequence - std::copy( begin(Input), end(Input), Output ); + std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); return Output; } // Copy the beginning of the sequence - std::copy( begin(Input), begin(M), Output ); + std::copy( ::boost::begin(Input), ::boost::begin(M), Output ); // Format find result // Copy formated result - std::copy( begin(M.format_result()), end(M.format_result()), Output ); + std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output ); // Copy the rest of the sequence - std::copy( M.end(), end(Input), Output ); + std::copy( M.end(), ::boost::end(Input), Output ); return Output; } @@ -129,11 +129,11 @@ namespace boost { InputT Output; // Copy the beginning of the sequence - insert( Output, end(Output), begin(Input), M.begin() ); + insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() ); // Copy formated result - insert( Output, end(Output), M.format_result() ); + insert( Output, ::boost::end(Output), M.format_result() ); // Copy the rest of the sequence - insert( Output, end(Output), M.end(), end(Input) ); + insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) ); return Output; } diff --git a/include/boost/algorithm/string/detail/find_format_all.hpp b/include/boost/algorithm/string/detail/find_format_all.hpp index 28c60b8..9533be6 100644 --- a/include/boost/algorithm/string/detail/find_format_all.hpp +++ b/include/boost/algorithm/string/detail/find_format_all.hpp @@ -73,7 +73,7 @@ namespace boost { store_type M( FindResult, FormatResult, Formatter ); // Initialize last match - input_iterator_type LastMatch=begin(Input); + input_iterator_type LastMatch=::boost::begin(Input); // Iterate through all matches while( M ) @@ -81,15 +81,15 @@ namespace boost { // Copy the beginning of the sequence std::copy( LastMatch, M.begin(), Output ); // Copy formated result - std::copy( begin(M.format_result()), end(M.format_result()), Output ); + std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output ); // Proceed to the next match LastMatch=M.end(); - M=Finder( LastMatch, end(Input) ); + M=Finder( LastMatch, ::boost::end(Input) ); } // Copy the rest of the sequence - std::copy( LastMatch, end(Input), Output ); + std::copy( LastMatch, ::boost::end(Input), Output ); return Output; } @@ -140,7 +140,7 @@ namespace boost { store_type M( FindResult, FormatResult, Formatter ); // Initialize last match - input_iterator_type LastMatch=begin(Input); + input_iterator_type LastMatch=::boost::begin(Input); // Output temporary InputT Output; @@ -149,17 +149,17 @@ namespace boost { while( M ) { // Copy the beginning of the sequence - insert( Output, end(Output), LastMatch, M.begin() ); + insert( Output, ::boost::end(Output), LastMatch, M.begin() ); // Copy formated result - insert( Output, end(Output), M.format_result() ); + insert( Output, ::boost::end(Output), M.format_result() ); // Proceed to the next match LastMatch=M.end(); - M=Finder( LastMatch, end(Input) ); + M=Finder( LastMatch, ::boost::end(Input) ); } // Copy the rest of the sequence - insert( Output, end(Output), LastMatch, end(Input) ); + insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) ); return Output; } @@ -213,8 +213,8 @@ namespace boost { BOOST_STRING_TYPENAME range_value::type> Storage; // Initialize replacement iterators - input_iterator_type InsertIt=begin(Input); - input_iterator_type SearchIt=begin(Input); + input_iterator_type InsertIt=::boost::begin(Input); + input_iterator_type SearchIt=::boost::begin(Input); while( M ) { @@ -233,7 +233,7 @@ namespace boost { copy_to_storage( Storage, M.format_result() ); // Find range for a next match - M=Finder( SearchIt, end(Input) ); + M=Finder( SearchIt, ::boost::end(Input) ); } // process the last segment @@ -242,17 +242,17 @@ namespace boost { Input, InsertIt, SearchIt, - end(Input) ); + ::boost::end(Input) ); if ( Storage.empty() ) { // Truncate input - erase( Input, InsertIt, end(Input) ); + erase( Input, InsertIt, ::boost::end(Input) ); } else { // Copy remaining data to the end of input - insert( Input, end(Input), Storage.begin(), Storage.end() ); + insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() ); } } diff --git a/include/boost/algorithm/string/detail/finder.hpp b/include/boost/algorithm/string/detail/finder.hpp index 194296e..c6d0752 100644 --- a/include/boost/algorithm/string/detail/finder.hpp +++ b/include/boost/algorithm/string/detail/finder.hpp @@ -41,7 +41,7 @@ namespace boost { // Construction template< typename SearchT > first_finderF( const SearchT& Search, PredicateT Comp ) : - m_Search(begin(Search), end(Search)), m_Comp(Comp) {} + m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {} first_finderF( search_iterator_type SearchBegin, search_iterator_type SearchEnd, @@ -108,7 +108,7 @@ namespace boost { // Construction template< typename SearchT > last_finderF( const SearchT& Search, PredicateT Comp ) : - m_Search(begin(Search), end(Search)), m_Comp(Comp) {} + m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {} last_finderF( search_iterator_type SearchBegin, search_iterator_type SearchEnd, @@ -154,7 +154,7 @@ namespace boost { while( M ) { Last=M; - M=first_finder( end(M), End ); + M=first_finder( ::boost::end(M), End ); } return Last; @@ -224,7 +224,7 @@ namespace boost { const SearchT& Search, int Nth, PredicateT Comp) : - m_Search(begin(Search), end(Search)), + m_Search(::boost::begin(Search), ::boost::end(Search)), m_Nth(Nth), m_Comp(Comp) {} nth_finderF( @@ -279,7 +279,7 @@ namespace boost { for( unsigned int n=0; n<=N; ++n ) { // find next match - M=first_finder( end(M), End ); + M=first_finder( ::boost::end(M), End ); if ( !M ) { @@ -314,7 +314,7 @@ namespace boost { for( unsigned int n=1; n<=N; ++n ) { // find next match - M=last_finder( Begin, begin(M) ); + M=last_finder( Begin, ::boost::begin(M) ); if ( !M ) { diff --git a/include/boost/algorithm/string/detail/formatter.hpp b/include/boost/algorithm/string/detail/formatter.hpp index 2af1573..bd6a780 100644 --- a/include/boost/algorithm/string/detail/formatter.hpp +++ b/include/boost/algorithm/string/detail/formatter.hpp @@ -39,7 +39,7 @@ namespace boost { public: // Construction const_formatF(const RangeT& Format) : - m_Format(begin(Format), end(Format)) {} + m_Format(::boost::begin(Format), ::boost::end(Format)) {} // Operation #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) @@ -70,7 +70,7 @@ namespace boost { template< typename Range2T > const RangeT& operator()(const Range2T& Replace) const { - return RangeT(begin(Replace), end(Replace)); + return RangeT(::boost::begin(Replace), ::boost::end(Replace)); } }; diff --git a/include/boost/algorithm/string/detail/replace_storage.hpp b/include/boost/algorithm/string/detail/replace_storage.hpp index 759036e..7aff247 100644 --- a/include/boost/algorithm/string/detail/replace_storage.hpp +++ b/include/boost/algorithm/string/detail/replace_storage.hpp @@ -46,7 +46,7 @@ namespace boost { StorageT& Storage, const WhatT& What ) { - Storage.insert( Storage.end(), begin(What), end(What) ); + Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) ); } diff --git a/include/boost/algorithm/string/detail/sequence.hpp b/include/boost/algorithm/string/detail/sequence.hpp index 87d7eab..de01350 100644 --- a/include/boost/algorithm/string/detail/sequence.hpp +++ b/include/boost/algorithm/string/detail/sequence.hpp @@ -41,7 +41,7 @@ namespace boost { BOOST_STRING_TYPENAME InputT::iterator At, const InsertT& Insert ) { - insert( Input, At, begin(Insert), end(Insert) ); + insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) ); } // erase helper ---------------------------------------------------// @@ -184,11 +184,11 @@ namespace boost { { if(From!=To) { - replace( Input, From, To, begin(Insert), end(Insert) ); + replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) ); } else { - insert( Input, From, begin(Insert), end(Insert) ); + insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) ); } } diff --git a/include/boost/algorithm/string/find.hpp b/include/boost/algorithm/string/find.hpp index 1f7202d..8daada5 100644 --- a/include/boost/algorithm/string/find.hpp +++ b/include/boost/algorithm/string/find.hpp @@ -55,7 +55,7 @@ namespace boost { { iterator_range::type> lit_input(as_literal(Input)); - return Finder(begin(lit_input),end(lit_input)); + return Finder(::boost::begin(lit_input),::boost::end(lit_input)); } // find_first -----------------------------------------------// diff --git a/include/boost/algorithm/string/find_format.hpp b/include/boost/algorithm/string/find_format.hpp index cb3dd7c..453dfaf 100644 --- a/include/boost/algorithm/string/find_format.hpp +++ b/include/boost/algorithm/string/find_format.hpp @@ -76,7 +76,7 @@ namespace boost { Output, lit_input, Formatter, - Finder( begin(lit_input), end(lit_input) ) ); + Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) ); } //! Generic replace algorithm @@ -104,7 +104,7 @@ namespace boost { return detail::find_format_copy_impl( Input, Formatter, - Finder(begin(Input), end(Input))); + Finder(::boost::begin(Input), ::boost::end(Input))); } //! Generic replace algorithm @@ -137,7 +137,7 @@ namespace boost { detail::find_format_impl( Input, Formatter, - Finder(begin(Input), end(Input))); + Finder(::boost::begin(Input), ::boost::end(Input))); } @@ -187,7 +187,7 @@ namespace boost { lit_input, Finder, Formatter, - Finder(begin(lit_input), end(lit_input))); + Finder(::boost::begin(lit_input), ::boost::end(lit_input))); } //! Generic replace all algorithm @@ -216,7 +216,7 @@ namespace boost { Input, Finder, Formatter, - Finder( begin(Input), end(Input) ) ); + Finder( ::boost::begin(Input), ::boost::end(Input) ) ); } //! Generic replace all algorithm @@ -251,7 +251,7 @@ namespace boost { Input, Finder, Formatter, - Finder(begin(Input), end(Input))); + Finder(::boost::begin(Input), ::boost::end(Input))); } diff --git a/include/boost/algorithm/string/find_iterator.hpp b/include/boost/algorithm/string/find_iterator.hpp index 30a337c..211b87c 100644 --- a/include/boost/algorithm/string/find_iterator.hpp +++ b/include/boost/algorithm/string/find_iterator.hpp @@ -24,7 +24,7 @@ #include /*! \file - Defines find iterator classes. Find iterator repeatly applies a Finder + Defines find iterator classes. Find iterator repeatedly applies a Finder to the specified input string to search for matches. Dereferencing the iterator yields the current match or a range between the last and the current match depending on the iterator used. @@ -114,8 +114,8 @@ namespace boost { detail::find_iterator_base(Finder,0) { iterator_range::type> lit_col(as_literal(Col)); - m_Match=make_iterator_range(begin(lit_col), begin(lit_col)); - m_End=end(lit_col); + m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col)); + m_End=::boost::end(lit_col); increment(); } @@ -274,9 +274,9 @@ namespace boost { m_bEof(false) { iterator_range::type> lit_col(as_literal(Col)); - m_Match=make_iterator_range(begin(lit_col), begin(lit_col)); - m_Next=begin(lit_col); - m_End=end(lit_col); + m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col)); + m_Next=::boost::begin(lit_col); + m_End=::boost::end(lit_col); increment(); } diff --git a/include/boost/algorithm/string/iter_find.hpp b/include/boost/algorithm/string/iter_find.hpp index 73887a8..525109b 100644 --- a/include/boost/algorithm/string/iter_find.hpp +++ b/include/boost/algorithm/string/iter_find.hpp @@ -88,14 +88,14 @@ namespace boost { range_value::type, input_iterator_type> copy_range_type; - input_iterator_type InputEnd=end(lit_input); + input_iterator_type InputEnd=::boost::end(lit_input); typedef transform_iterator transform_iter_type; transform_iter_type itBegin= make_transform_iterator( - find_iterator_type( begin(lit_input), InputEnd, Finder ), + find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ), copy_range_type()); transform_iter_type itEnd= @@ -157,14 +157,14 @@ namespace boost { range_value::type, input_iterator_type> copy_range_type; - input_iterator_type InputEnd=end(lit_input); + input_iterator_type InputEnd=::boost::end(lit_input); typedef transform_iterator transform_iter_type; transform_iter_type itBegin= make_transform_iterator( - find_iterator_type( begin(lit_input), InputEnd, Finder ), + find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ), copy_range_type() ); transform_iter_type itEnd= diff --git a/include/boost/algorithm/string/join.hpp b/include/boost/algorithm/string/join.hpp index d2bc382..b215598 100644 --- a/include/boost/algorithm/string/join.hpp +++ b/include/boost/algorithm/string/join.hpp @@ -52,8 +52,8 @@ namespace boost { typedef typename range_const_iterator::type InputIteratorT; // Parse input - InputIteratorT itBegin=begin(Input); - InputIteratorT itEnd=end(Input); + InputIteratorT itBegin=::boost::begin(Input); + InputIteratorT itEnd=::boost::end(Input); // Construct container to hold the result ResultT Result; @@ -61,16 +61,16 @@ namespace boost { // Append first element if(itBegin!=itEnd) { - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); ++itBegin; } for(;itBegin!=itEnd; ++itBegin) { // Add separator - detail::insert(Result, end(Result), as_literal(Separator)); + detail::insert(Result, ::boost::end(Result), as_literal(Separator)); // Add element - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); } return Result; @@ -103,8 +103,8 @@ namespace boost { typedef typename range_const_iterator::type InputIteratorT; // Parse input - InputIteratorT itBegin=begin(Input); - InputIteratorT itEnd=end(Input); + InputIteratorT itBegin=::boost::begin(Input); + InputIteratorT itEnd=::boost::end(Input); // Construct container to hold the result ResultT Result; @@ -114,7 +114,7 @@ namespace boost { // Add this element if(itBegin!=itEnd) { - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); ++itBegin; } @@ -123,9 +123,9 @@ namespace boost { if(Pred(*itBegin)) { // Add separator - detail::insert(Result, end(Result), as_literal(Separator)); + detail::insert(Result, ::boost::end(Result), as_literal(Separator)); // Add element - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); } } diff --git a/include/boost/algorithm/string/predicate.hpp b/include/boost/algorithm/string/predicate.hpp index 4edd553..8b62086 100644 --- a/include/boost/algorithm/string/predicate.hpp +++ b/include/boost/algorithm/string/predicate.hpp @@ -67,11 +67,11 @@ namespace boost { typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator2T; - Iterator1T InputEnd=end(lit_input); - Iterator2T TestEnd=end(lit_test); + Iterator1T InputEnd=::boost::end(lit_input); + Iterator2T TestEnd=::boost::end(lit_test); - Iterator1T it=begin(lit_input); - Iterator2T pit=begin(lit_test); + Iterator1T it=::boost::begin(lit_input); + Iterator2T pit=::boost::begin(lit_test); for(; it!=InputEnd && pit!=TestEnd; ++it,++pit) @@ -151,10 +151,10 @@ namespace boost { return detail:: ends_with_iter_select( - begin(lit_input), - end(lit_input), - begin(lit_test), - end(lit_test), + ::boost::begin(lit_input), + ::boost::end(lit_input), + ::boost::begin(lit_test), + ::boost::end(lit_test), Comp, category()); } @@ -225,7 +225,7 @@ namespace boost { } // Use the temporary variable to make VACPP happy - bool bResult=(first_finder(lit_test,Comp)(begin(lit_input), end(lit_input))); + bool bResult=(first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input))); return bResult; } @@ -294,11 +294,11 @@ namespace boost { typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator2T; - Iterator1T InputEnd=end(lit_input); - Iterator2T TestEnd=end(lit_test); + Iterator1T InputEnd=::boost::end(lit_input); + Iterator2T TestEnd=::boost::end(lit_test); - Iterator1T it=begin(lit_input); - Iterator2T pit=begin(lit_test); + Iterator1T it=::boost::begin(lit_input); + Iterator2T pit=::boost::begin(lit_test); for(; it!=InputEnd && pit!=TestEnd; ++it,++pit) @@ -376,10 +376,10 @@ namespace boost { iterator_range::type> lit_arg2(as_literal(Arg2)); return std::lexicographical_compare( - begin(lit_arg1), - end(lit_arg1), - begin(lit_arg2), - end(lit_arg2), + ::boost::begin(lit_arg1), + ::boost::end(lit_arg1), + ::boost::begin(lit_arg2), + ::boost::end(lit_arg2), Pred); } @@ -444,8 +444,8 @@ namespace boost { typedef BOOST_STRING_TYPENAME range_const_iterator::type Iterator1T; - Iterator1T InputEnd=end(lit_input); - for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It) + Iterator1T InputEnd=::boost::end(lit_input); + for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It) { if (!Pred(*It)) return false; diff --git a/include/boost/algorithm/string/regex.hpp b/include/boost/algorithm/string/regex.hpp index 98a0dfc..b723204 100644 --- a/include/boost/algorithm/string/regex.hpp +++ b/include/boost/algorithm/string/regex.hpp @@ -63,7 +63,7 @@ namespace boost { iterator_range::type> lit_input(as_literal(Input)); return regex_finder(Rx,Flags)( - begin(lit_input), end(lit_input) ); + ::boost::begin(lit_input), ::boost::end(lit_input) ); } // replace_regex --------------------------------------------------------------------// @@ -515,8 +515,8 @@ namespace boost { typedef typename range_const_iterator::type InputIteratorT; // Parse input - InputIteratorT itBegin=begin(Input); - InputIteratorT itEnd=end(Input); + InputIteratorT itBegin=::boost::begin(Input); + InputIteratorT itEnd=::boost::end(Input); // Construct container to hold the result ResultT Result; @@ -525,23 +525,23 @@ namespace boost { // Roll to the first element that will be added while( itBegin!=itEnd && - !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin; + !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin; // Add this element if(itBegin!=itEnd) { - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); ++itBegin; } for(;itBegin!=itEnd; ++itBegin) { - if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) + if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) { // Add separator - detail::insert(Result, end(Result), as_literal(Separator)); + detail::insert(Result, ::boost::end(Result), as_literal(Separator)); // Add element - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); } } @@ -583,8 +583,8 @@ namespace boost { typedef typename range_const_iterator::type InputIteratorT; // Parse input - InputIteratorT itBegin=begin(Input); - InputIteratorT itEnd=end(Input); + InputIteratorT itBegin=::boost::begin(Input); + InputIteratorT itEnd=::boost::end(Input); // Construct container to hold the result ResultT Result; @@ -593,23 +593,23 @@ namespace boost { // Roll to the first element that will be added while( itBegin!=itEnd && - !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin; + !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin; // Add this element if(itBegin!=itEnd) { - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); ++itBegin; } for(;itBegin!=itEnd; ++itBegin) { - if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) + if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) { // Add separator - detail::insert(Result, end(Result), as_literal(Separator)); + detail::insert(Result, ::boost::end(Result), as_literal(Separator)); // Add element - detail::insert(Result, end(Result), *itBegin); + detail::insert(Result, ::boost::end(Result), *itBegin); } } diff --git a/include/boost/algorithm/string/trim.hpp b/include/boost/algorithm/string/trim.hpp index b2bdc04..177ed1b 100644 --- a/include/boost/algorithm/string/trim.hpp +++ b/include/boost/algorithm/string/trim.hpp @@ -67,10 +67,10 @@ namespace boost { std::copy( ::boost::algorithm::detail::trim_begin( - begin(lit_range), - end(lit_range), + ::boost::begin(lit_range), + ::boost::end(lit_range), IsSpace ), - end(lit_range), + ::boost::end(lit_range), Output); return Output; @@ -85,10 +85,10 @@ namespace boost { { return SequenceT( ::boost::algorithm::detail::trim_begin( - begin(Input), - end(Input), + ::boost::begin(Input), + ::boost::end(Input), IsSpace ), - end(Input)); + ::boost::end(Input)); } //! Left trim - parametric @@ -124,10 +124,10 @@ namespace boost { inline void trim_left_if(SequenceT& Input, PredicateT IsSpace) { Input.erase( - begin(Input), + ::boost::begin(Input), ::boost::algorithm::detail::trim_begin( - begin(Input), - end(Input), + ::boost::begin(Input), + ::boost::end(Input), IsSpace)); } @@ -174,10 +174,10 @@ namespace boost { iterator_range::type> lit_range(as_literal(Input)); std::copy( - begin(lit_range), + ::boost::begin(lit_range), ::boost::algorithm::detail::trim_end( - begin(lit_range), - end(lit_range), + ::boost::begin(lit_range), + ::boost::end(lit_range), IsSpace ), Output ); @@ -192,10 +192,10 @@ namespace boost { inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace) { return SequenceT( - begin(Input), + ::boost::begin(Input), ::boost::algorithm::detail::trim_end( - begin(Input), - end(Input), + ::boost::begin(Input), + ::boost::end(Input), IsSpace) ); } @@ -235,10 +235,10 @@ namespace boost { { Input.erase( ::boost::algorithm::detail::trim_end( - begin(Input), - end(Input), + ::boost::begin(Input), + ::boost::end(Input), IsSpace ), - end(Input) + ::boost::end(Input) ); } @@ -288,13 +288,13 @@ namespace boost { BOOST_STRING_TYPENAME range_const_iterator::type TrimEnd= ::boost::algorithm::detail::trim_end( - begin(lit_range), - end(lit_range), + ::boost::begin(lit_range), + ::boost::end(lit_range), IsSpace); std::copy( detail::trim_begin( - begin(lit_range), TrimEnd, IsSpace), + ::boost::begin(lit_range), TrimEnd, IsSpace), TrimEnd, Output ); @@ -312,13 +312,13 @@ namespace boost { BOOST_STRING_TYPENAME range_const_iterator::type TrimEnd= ::boost::algorithm::detail::trim_end( - begin(Input), - end(Input), + ::boost::begin(Input), + ::boost::end(Input), IsSpace); return SequenceT( detail::trim_begin( - begin(Input), + ::boost::begin(Input), TrimEnd, IsSpace), TrimEnd From 4e15767bed439b83f610d0a3f94f53c5d23ac68e Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Tue, 17 Jun 2008 21:13:25 +0000 Subject: [PATCH 12/21] simple_finder example fixed [SVN r46460] --- string/doc/concept.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/string/doc/concept.xml b/string/doc/concept.xml index ed43108..fd432c2 100644 --- a/string/doc/concept.xml +++ b/string/doc/concept.xml @@ -102,7 +102,7 @@ struct simple_finder { template<typename ForwardIteratorT> - boost::iterator_range<ForwardIterator> operator()( + boost::iterator_range<ForwardIteratorT> operator()( ForwardIteratorT Begin, ForwardIteratorT End ) { From cd26ed816c611951624cb52b7d42bbc163ad11a4 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Tue, 17 Jun 2008 21:21:33 +0000 Subject: [PATCH 13/21] patch from ticket #1152 applied [SVN r46461] --- include/boost/algorithm/string/detail/case_conv.hpp | 9 +++++++++ include/boost/algorithm/string/detail/classification.hpp | 8 ++++++++ .../boost/algorithm/string/detail/find_format_store.hpp | 7 +++++++ 3 files changed, 24 insertions(+) diff --git a/include/boost/algorithm/string/detail/case_conv.hpp b/include/boost/algorithm/string/detail/case_conv.hpp index ef1d4aa..5253454 100644 --- a/include/boost/algorithm/string/detail/case_conv.hpp +++ b/include/boost/algorithm/string/detail/case_conv.hpp @@ -21,6 +21,11 @@ namespace boost { // case conversion functors -----------------------------------------------// +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif + // a tolower functor template struct to_lowerF : public std::unary_function @@ -61,6 +66,10 @@ namespace boost { const std::locale& m_Loc; }; +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif + // algorithm implementation ------------------------------------------------------------------------- // Transform a range diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index 4e77070..22b3779 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -29,6 +29,10 @@ namespace boost { // classification functors -----------------------------------------------// +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif // is_classified functor struct is_classifiedF : public predicate_facade @@ -60,6 +64,10 @@ namespace boost { const std::locale m_Locale; }; +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif + // is_any_of functor /* returns true if the value is from the specified set diff --git a/include/boost/algorithm/string/detail/find_format_store.hpp b/include/boost/algorithm/string/detail/find_format_store.hpp index 6dbbcba..2260fc2 100644 --- a/include/boost/algorithm/string/detail/find_format_store.hpp +++ b/include/boost/algorithm/string/detail/find_format_store.hpp @@ -20,6 +20,10 @@ namespace boost { // temporary format and find result storage --------------------------------// +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif template< typename ForwardIteratorT, typename FormatterT, @@ -64,6 +68,9 @@ namespace boost { const formatter_type& m_Formatter; }; +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif } // namespace detail } // namespace algorithm } // namespace boost From ba5e4c30c65fe7e00abdc3ee2e87b305b0678b00 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Tue, 17 Jun 2008 21:58:58 +0000 Subject: [PATCH 14/21] fixed the rle example crash [SVN r46463] --- string/example/rle_example.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/string/example/rle_example.cpp b/string/example/rle_example.cpp index 26ec5b8..9e52b96 100644 --- a/string/example/rle_example.cpp +++ b/string/example/rle_example.cpp @@ -114,10 +114,13 @@ public: result_type operator()( const ReplaceT& Replace ) const { SeqT r; - r.push_back( repeat_mark() ); - r.push_back( *(Replace.begin()) ); - r.push_back( value_type( Replace.size() ) ); - + if(!Replace.empty()) + { + r.push_back( repeat_mark() ); + r.push_back( *(Replace.begin()) ); + r.push_back( value_type( Replace.size() ) ); + } + return r; } }; @@ -183,14 +186,18 @@ public: template< typename ReplaceT > result_type operator()( const ReplaceT& Replace ) const { - // extract info - typename ReplaceT::const_iterator It=Replace.begin(); - - value_type Value=*(++It); - value_type Repeat=*(++It); - SeqT r; - for( value_type Index=0; Index Date: Wed, 18 Jun 2008 21:54:06 +0000 Subject: [PATCH 15/21] is_any_ofF performance improvements tabs removed [SVN r46496] --- .../boost/algorithm/string/classification.hpp | 4 +- .../string/detail/classification.hpp | 160 +++++++++++++++++- include/boost/algorithm/string/find.hpp | 2 +- .../boost/algorithm/string/find_format.hpp | 2 +- 4 files changed, 159 insertions(+), 9 deletions(-) diff --git a/include/boost/algorithm/string/classification.hpp b/include/boost/algorithm/string/classification.hpp index a2e2b4d..33ff9be 100644 --- a/include/boost/algorithm/string/classification.hpp +++ b/include/boost/algorithm/string/classification.hpp @@ -202,8 +202,8 @@ namespace boost { BOOST_STRING_TYPENAME range_value::type> is_any_of( const RangeT& Set ) { - return detail::is_any_ofF< - BOOST_STRING_TYPENAME range_value::type>(as_literal(Set)); + iterator_range::type> lit_set(as_literal(Set)); + return detail::is_any_ofF::type>(lit_set); } //! is_from_range predicate diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index 22b3779..3930655 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -76,27 +75,178 @@ namespace boost { struct is_any_ofF : public predicate_facade > { + private: + // set cannot operate on const value-type + typedef typename remove_const::type set_value_type; + // Size of the static storage (size of pointer*2) + static const ::std::size_t FIXED_STORAGE_SIZE = sizeof(set_value_type*)*2; + + public: // Boost.Lambda support template struct sig { typedef bool type; }; // Constructor template - is_any_ofF( const RangeT& Range ) : - m_Set( ::boost::begin(Range), ::boost::end(Range) ) {} + is_any_ofF( const RangeT& Range ) : m_Size(0) + { + // Prepare storage + m_Storage.m_dynSet=0; + + std::size_t Size=::boost::distance(Range); + m_Size=Size; + set_value_type* Storage=0; + + if(m_Size<=FIXED_STORAGE_SIZE) + { + // Use fixed storage + Storage=&m_Storage.m_fixSet[0]; + } + else + { + // Use dynamic storage + m_Storage.m_dynSet=new set_value_type[m_Size]; + Storage=m_Storage.m_dynSet; + } + + // Use fixed storage + ::std::copy(::boost::begin(Range), ::boost::end(Range), Storage); + ::std::sort(Storage, Storage+m_Size); + } + + // Copy constructor + is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size) + { + // Prepare storage + m_Storage.m_dynSet=0; + const set_value_type* SrcStorage=0; + set_value_type* DestStorage=0; + + if(m_Size<=FIXED_STORAGE_SIZE) + { + // Use fixed storage + DestStorage=&m_Storage.m_fixSet[0]; + SrcStorage=&Other.m_Storage.m_fixSet[0]; + } + else + { + // Use dynamic storage + m_Storage.m_dynSet=new set_value_type[m_Size]; + DestStorage=m_Storage.m_dynSet; + SrcStorage=Other.m_Storage.m_dynSet; + } + + // Use fixed storage + ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); + } + + // Destructor + ~is_any_ofF() + { + if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) + { + delete m_Storage.m_dynSet; + } + } + + // Assignment + is_any_ofF& operator=(const is_any_ofF& Other) + { + // Prepare storage + m_Storage.m_dynSet=0; + m_Size=Other.m_Size; + const set_value_type* SrcStorage=0; + set_value_type* DestStorage=0; + + if(m_Size<=FIXED_STORAGE_SIZE) + { + // Use fixed storage + DestStorage=&m_Storage.m_fixSet[0]; + SrcStorage=&Other.m_Storage.m_fixSet[0]; + } + else + { + // Use dynamic storage + m_Storage.m_dynSet=new set_value_type[Size]; + DestStorage=m_Storage.m_dynSet; + SrcStorage=Other.m_Storage.m_dynSet; + } + + // Use fixed storage + ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); + + return *this; + } // Operation template bool operator()( Char2T Ch ) const { - return m_Set.find(Ch)!=m_Set.end(); + const set_value_type* Storage= + (m_Size<=FIXED_STORAGE_SIZE) + ? &m_Storage.m_fixSet[0] + : m_Storage.m_dynSet; + + return ::std::binary_search(Storage, Storage+m_Size, Ch); } private: // set cannot operate on const value-type typedef typename remove_const::type set_value_type; - std::set m_Set; + + // storage + // The actual used storage is selected on the type + union + { + set_value_type* m_dynSet; + set_value_type m_fixSet[FIXED_STORAGE_SIZE]; + } + m_Storage; + + // storage size + ::std::size_t m_Size; }; + // fixed size is_any_of functor + /* + returns true if the value is from the specified set + works on the fixed size set + */ + template + struct is_any_of_fixedF : + public predicate_facade > + { + // Boost.Lambda support + template struct sig { typedef bool type; }; + + // Constructor + template + is_any_of_fixedF( const RangeT& Range ) + { + BOOST_ASSERT(::boost::distance(Range)==Size); + // Copy up-to Size elements + ::std::size_t nIndex=0; + ::boost::range_const_iterator::type It=::boost::begin(Range); + while(nIndex + bool operator()( Char2T Ch ) const + { + return ::std::binary_search(&m_Set[0], &m_Set[Size], Ch); + } + + private: + // set cannot operate on const value-type + typedef typename remove_const::type set_value_type; + set_value_type m_Set[Size]; + }; + + // is_from_range functor /* returns true if the value is from the specified range. diff --git a/include/boost/algorithm/string/find.hpp b/include/boost/algorithm/string/find.hpp index 8daada5..4196585 100644 --- a/include/boost/algorithm/string/find.hpp +++ b/include/boost/algorithm/string/find.hpp @@ -55,7 +55,7 @@ namespace boost { { iterator_range::type> lit_input(as_literal(Input)); - return Finder(::boost::begin(lit_input),::boost::end(lit_input)); + return Finder(::boost::begin(lit_input),::boost::end(lit_input)); } // find_first -----------------------------------------------// diff --git a/include/boost/algorithm/string/find_format.hpp b/include/boost/algorithm/string/find_format.hpp index 453dfaf..7cbaf34 100644 --- a/include/boost/algorithm/string/find_format.hpp +++ b/include/boost/algorithm/string/find_format.hpp @@ -76,7 +76,7 @@ namespace boost { Output, lit_input, Formatter, - Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) ); + Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) ); } //! Generic replace algorithm From 539c170b9df57d3f45f649d4d151158d066409dc Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Wed, 18 Jun 2008 21:55:38 +0000 Subject: [PATCH 16/21] aditional tests added [SVN r46497] --- string/test/predicate_test.cpp | 8 ++++++++ string/test/replace_test.cpp | 1 + 2 files changed, 9 insertions(+) diff --git a/string/test/predicate_test.cpp b/string/test/predicate_test.cpp index f200a0e..3ee9141 100644 --- a/string/test/predicate_test.cpp +++ b/string/test/predicate_test.cpp @@ -121,6 +121,14 @@ void classification_test() TEST_CLASS( !is_classified(std::ctype_base::space), "...", "..\n\r\t " ); TEST_CLASS( ( !is_any_of("abc") && is_from_range('a','e') ) || is_space(), "d e", "abcde" ); + + // is_any_of test +// TEST_CLASS( !is_any_of(""), "", "aaa" ) + TEST_CLASS( is_any_of("a"), "a", "ab" ) + TEST_CLASS( is_any_of("ba"), "ab", "abc" ) + TEST_CLASS( is_any_of("cba"), "abc", "abcd" ) + TEST_CLASS( is_any_of("hgfedcba"), "abcdefgh", "abcdefghi" ) + TEST_CLASS( is_any_of("qponmlkjihgfedcba"), "abcdefghijklmnopq", "zzz" ) } #undef TEST_CLASS diff --git a/string/test/replace_test.cpp b/string/test/replace_test.cpp index 1152144..f9239f6 100644 --- a/string/test/replace_test.cpp +++ b/string/test/replace_test.cpp @@ -120,6 +120,7 @@ void replace_all_test() { // replace all TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("YYY"), string("1YYY3YYY2") ); + TEST_ALGO( replace_all, string("1abc3abc2"), "/" C_ "\\", string("1abc3abc2") ); TEST_ALGO( ireplace_all, "1aBc3AbC2", "abC" C_ "YYY", string("1YYY3YYY2") ); TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("Z"), string("1Z3Z2") ); TEST_ALGO( replace_all, "1abc3abc2", string("abc") C_ string("XXXX"), string("1XXXX3XXXX2") ); From 7299b29bf88f347023349251638703c9cd589bfa Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Wed, 18 Jun 2008 22:07:32 +0000 Subject: [PATCH 17/21] fixind the problems in is_any_ofF spotted by gcc [SVN r46498] --- .../string/detail/classification.hpp | 46 +------------------ 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index 3930655..2fa3b6d 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -166,7 +166,7 @@ namespace boost { else { // Use dynamic storage - m_Storage.m_dynSet=new set_value_type[Size]; + m_Storage.m_dynSet=new set_value_type[m_Size]; DestStorage=m_Storage.m_dynSet; SrcStorage=Other.m_Storage.m_dynSet; } @@ -190,9 +190,6 @@ namespace boost { } private: - // set cannot operate on const value-type - typedef typename remove_const::type set_value_type; - // storage // The actual used storage is selected on the type union @@ -206,47 +203,6 @@ namespace boost { ::std::size_t m_Size; }; - // fixed size is_any_of functor - /* - returns true if the value is from the specified set - works on the fixed size set - */ - template - struct is_any_of_fixedF : - public predicate_facade > - { - // Boost.Lambda support - template struct sig { typedef bool type; }; - - // Constructor - template - is_any_of_fixedF( const RangeT& Range ) - { - BOOST_ASSERT(::boost::distance(Range)==Size); - // Copy up-to Size elements - ::std::size_t nIndex=0; - ::boost::range_const_iterator::type It=::boost::begin(Range); - while(nIndex - bool operator()( Char2T Ch ) const - { - return ::std::binary_search(&m_Set[0], &m_Set[Size], Ch); - } - - private: - // set cannot operate on const value-type - typedef typename remove_const::type set_value_type; - set_value_type m_Set[Size]; - }; - - // is_from_range functor /* returns true if the value is from the specified range. From baf3dd99e22758fbee1d22ec75d2793fe4c5c8c7 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Mon, 18 Aug 2008 18:32:51 +0000 Subject: [PATCH 18/21] fox for allocation bug in is_any_ofF [SVN r48198] --- .../string/detail/classification.hpp | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index 2fa3b6d..71e0f3b 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -28,11 +28,7 @@ namespace boost { // classification functors -----------------------------------------------// -#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) -#pragma warning(push) -#pragma warning(disable:4512) //assignment operator could not be generated -#endif - // is_classified functor + // is_classified functor struct is_classifiedF : public predicate_facade { @@ -42,7 +38,6 @@ namespace boost { // Constructor from a locale is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) : m_Type(Type), m_Locale(Loc) {} - // Operation template bool operator()( CharT Ch ) const @@ -59,13 +54,10 @@ namespace boost { #endif private: - const std::ctype_base::mask m_Type; - const std::locale m_Locale; + std::ctype_base::mask m_Type; + std::locale m_Locale; }; -#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) -#pragma warning(pop) -#endif // is_any_of functor /* @@ -144,31 +136,51 @@ namespace boost { { if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) { - delete m_Storage.m_dynSet; + delete [] m_Storage.m_dynSet; } } // Assignment is_any_ofF& operator=(const is_any_ofF& Other) { - // Prepare storage - m_Storage.m_dynSet=0; - m_Size=Other.m_Size; + // Prepare storage const set_value_type* SrcStorage=0; set_value_type* DestStorage=0; - if(m_Size<=FIXED_STORAGE_SIZE) + if(Other.m_Size<=FIXED_STORAGE_SIZE) { // Use fixed storage DestStorage=&m_Storage.m_fixSet[0]; SrcStorage=&Other.m_Storage.m_fixSet[0]; + + // Delete old storage if was present + if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) + { + delete [] m_Storage.m_dynSet; + } + + // Set new size + m_Size=Other.m_Size; } else { // Use dynamic storage - m_Storage.m_dynSet=new set_value_type[m_Size]; - DestStorage=m_Storage.m_dynSet; + + // Create new buffer + set_value_type* pTemp=new set_value_type[Other.m_Size]; + DestStorage=pTemp; SrcStorage=Other.m_Storage.m_dynSet; + + // Delete old storage if necessary + if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) + { + delete [] m_Storage.m_dynSet; + } + + // Store the new storage + m_Storage.m_dynSet=pTemp; + // Set new size + m_Size=Other.m_Size; } // Use fixed storage From 1f5542b44c7085dbcff6955fd45c6c286e90bb4f Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Mon, 18 Aug 2008 18:33:40 +0000 Subject: [PATCH 19/21] predicate test improvements [SVN r48199] --- string/test/predicate_test.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/string/test/predicate_test.cpp b/string/test/predicate_test.cpp index 3ee9141..43d7142 100644 --- a/string/test/predicate_test.cpp +++ b/string/test/predicate_test.cpp @@ -96,10 +96,28 @@ void predicate_test() } +template +void test_pred(const Pred& pred, const Input& input, bool bYes) +{ + // test assignment operator + Pred pred1=pred; + pred1=pred; + if(bYes) + { + BOOST_CHECK( all( input, pred ) ); + BOOST_CHECK( all( input, pred1 ) ); + } + else + { + BOOST_CHECK( !all( input, pred ) ); + BOOST_CHECK( !all( input, pred1 ) ); + } +} + #define TEST_CLASS( Pred, YesInput, NoInput )\ {\ - BOOST_CHECK( all( string(YesInput), Pred ) );\ - BOOST_CHECK( !all( string(NoInput), Pred ) );\ + test_pred(Pred, YesInput, true); \ + test_pred(Pred, NoInput, false); \ } void classification_test() From 760af1798bcd0fbd216a7b85114b1fba380c7d18 Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Tue, 19 Aug 2008 14:32:59 +0000 Subject: [PATCH 20/21] removed static constant FIXED_STORAGE_SIZE from is_any_of to make the code compile on borland compilers [SVN r48218] --- .../string/detail/classification.hpp | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index 71e0f3b..df9726e 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -69,9 +69,7 @@ namespace boost { { private: // set cannot operate on const value-type - typedef typename remove_const::type set_value_type; - // Size of the static storage (size of pointer*2) - static const ::std::size_t FIXED_STORAGE_SIZE = sizeof(set_value_type*)*2; + typedef typename ::boost::remove_const::type set_value_type; public: // Boost.Lambda support @@ -88,7 +86,7 @@ namespace boost { m_Size=Size; set_value_type* Storage=0; - if(m_Size<=FIXED_STORAGE_SIZE) + if(use_fixed_storage(m_Size)) { // Use fixed storage Storage=&m_Storage.m_fixSet[0]; @@ -113,7 +111,7 @@ namespace boost { const set_value_type* SrcStorage=0; set_value_type* DestStorage=0; - if(m_Size<=FIXED_STORAGE_SIZE) + if(use_fixed_storage(m_Size)) { // Use fixed storage DestStorage=&m_Storage.m_fixSet[0]; @@ -134,7 +132,7 @@ namespace boost { // Destructor ~is_any_ofF() { - if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) + if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0) { delete [] m_Storage.m_dynSet; } @@ -147,14 +145,14 @@ namespace boost { const set_value_type* SrcStorage=0; set_value_type* DestStorage=0; - if(Other.m_Size<=FIXED_STORAGE_SIZE) + if(use_fixed_storage(Other.m_Size)) { // Use fixed storage DestStorage=&m_Storage.m_fixSet[0]; SrcStorage=&Other.m_Storage.m_fixSet[0]; // Delete old storage if was present - if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) + if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0) { delete [] m_Storage.m_dynSet; } @@ -172,7 +170,7 @@ namespace boost { SrcStorage=Other.m_Storage.m_dynSet; // Delete old storage if necessary - if(m_Size>FIXED_STORAGE_SIZE && m_Storage.m_dynSet!=0) + if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0) { delete [] m_Storage.m_dynSet; } @@ -183,7 +181,7 @@ namespace boost { m_Size=Other.m_Size; } - // Use fixed storage + // Copy the data ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); return *this; @@ -194,12 +192,19 @@ namespace boost { bool operator()( Char2T Ch ) const { const set_value_type* Storage= - (m_Size<=FIXED_STORAGE_SIZE) + (use_fixed_storage(m_Size)) ? &m_Storage.m_fixSet[0] : m_Storage.m_dynSet; return ::std::binary_search(Storage, Storage+m_Size, Ch); } + private: + // check if the size is eligible for fixed storage + static bool use_fixed_storage(std::size_t size) + { + return size<=sizeof(set_value_type*)*2; + } + private: // storage @@ -207,7 +212,7 @@ namespace boost { union { set_value_type* m_dynSet; - set_value_type m_fixSet[FIXED_STORAGE_SIZE]; + set_value_type m_fixSet[sizeof(set_value_type*)*2]; } m_Storage; From 6d5e7b5a04554f46a252aebfce027aeb713c4e7d Mon Sep 17 00:00:00 2001 From: Pavol Droba Date: Thu, 21 Aug 2008 14:46:15 +0000 Subject: [PATCH 21/21] self assignment problem in is_any_ofF fixed [SVN r48281] --- .../string/detail/classification.hpp | 58 +++++++++++++------ string/test/predicate_test.cpp | 1 + 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/include/boost/algorithm/string/detail/classification.hpp b/include/boost/algorithm/string/detail/classification.hpp index df9726e..1db5d29 100644 --- a/include/boost/algorithm/string/detail/classification.hpp +++ b/include/boost/algorithm/string/detail/classification.hpp @@ -141,9 +141,12 @@ namespace boost { // Assignment is_any_ofF& operator=(const is_any_ofF& Other) { + // Handle self assignment + if(this==&Other) return *this; + // Prepare storage - const set_value_type* SrcStorage=0; - set_value_type* DestStorage=0; + const set_value_type* SrcStorage; + set_value_type* DestStorage; if(use_fixed_storage(Other.m_Size)) { @@ -162,23 +165,44 @@ namespace boost { } else { - // Use dynamic storage - - // Create new buffer - set_value_type* pTemp=new set_value_type[Other.m_Size]; - DestStorage=pTemp; + // Other uses dynamic storage SrcStorage=Other.m_Storage.m_dynSet; - - // Delete old storage if necessary - if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0) - { - delete [] m_Storage.m_dynSet; - } - // Store the new storage - m_Storage.m_dynSet=pTemp; - // Set new size - m_Size=Other.m_Size; + // Check what kind of storage are we using right now + if(use_fixed_storage(m_Size)) + { + // Using fixed storage, allocate new + set_value_type* pTemp=new set_value_type[Other.m_Size]; + DestStorage=pTemp; + m_Storage.m_dynSet=pTemp; + m_Size=Other.m_Size; + } + else + { + // Using dynamic storage, check if can reuse + if(m_Storage.m_dynSet!=0 && m_Size>=Other.m_Size && m_Size