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