Skip to content

Commit 869660e

Browse files
author
Pavol Droba
committed
adapted to the new range interface
[SVN r38122]
1 parent 777f307 commit 869660e

2 files changed

Lines changed: 64 additions & 37 deletions

File tree

include/boost/algorithm/string/case_conv.hpp

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <locale>
1717
#include <boost/iterator/transform_iterator.hpp>
1818

19+
#include <boost/range/as_literal.hpp>
1920
#include <boost/range/begin.hpp>
2021
#include <boost/range/end.hpp>
2122
#include <boost/range/value_type.hpp>
@@ -56,11 +57,10 @@ namespace boost {
5657
const RangeT& Input,
5758
const std::locale& Loc=std::locale())
5859
{
59-
return std::transform(
60-
begin(Input),
61-
end(Input),
62-
Output,
63-
::boost::algorithm::detail::to_lowerF<
60+
return ::boost::algorithm::detail::transform_range_copy(
61+
Output,
62+
as_literal(Input),
63+
::boost::algorithm::detail::to_lowerF<
6464
typename range_value<RangeT>::type >(Loc));
6565
}
6666

@@ -73,15 +73,10 @@ namespace boost {
7373
const SequenceT& Input,
7474
const std::locale& Loc=std::locale())
7575
{
76-
return SequenceT(
77-
make_transform_iterator(
78-
begin(Input),
79-
::boost::algorithm::detail::to_lowerF<
80-
typename range_value<SequenceT>::type >(Loc)),
81-
make_transform_iterator(
82-
end(Input),
83-
::boost::algorithm::detail::to_lowerF<
84-
typename range_value<SequenceT>::type >(Loc)));
76+
return ::boost::algorithm::detail::transform_range_copy<SequenceT>(
77+
as_literal(Input),
78+
::boost::algorithm::detail::to_lowerF<
79+
typename range_value<SequenceT>::type >(Loc));
8580
}
8681

8782
//! Convert to lower case
@@ -97,10 +92,8 @@ namespace boost {
9792
WritableRangeT& Input,
9893
const std::locale& Loc=std::locale())
9994
{
100-
std::transform(
101-
begin(Input),
102-
end(Input),
103-
begin(Input),
95+
::boost::algorithm::detail::transform_range(
96+
as_literal(Input),
10497
::boost::algorithm::detail::to_lowerF<
10598
typename range_value<WritableRangeT>::type >(Loc));
10699
}
@@ -129,11 +122,10 @@ namespace boost {
129122
const RangeT& Input,
130123
const std::locale& Loc=std::locale())
131124
{
132-
return std::transform(
133-
begin(Input),
134-
end(Input),
135-
Output,
136-
::boost::algorithm::detail::to_upperF<
125+
return ::boost::algorithm::detail::transform_range_copy(
126+
Output,
127+
as_literal(Input),
128+
::boost::algorithm::detail::to_upperF<
137129
typename range_value<RangeT>::type >(Loc));
138130
}
139131

@@ -146,16 +138,10 @@ namespace boost {
146138
const SequenceT& Input,
147139
const std::locale& Loc=std::locale())
148140
{
149-
return SequenceT(
150-
make_transform_iterator(
151-
begin(Input),
152-
::boost::algorithm::detail::to_upperF<
153-
typename range_value<SequenceT>::type >(Loc)),
154-
make_transform_iterator(
155-
end(Input),
156-
::boost::algorithm::detail::to_upperF<
157-
typename range_value<SequenceT>::type >(Loc)));
158-
141+
return ::boost::algorithm::detail::transform_range_copy<SequenceT>(
142+
as_literal(Input),
143+
::boost::algorithm::detail::to_upperF<
144+
typename range_value<SequenceT>::type >(Loc));
159145
}
160146

161147
//! Convert to upper case
@@ -171,10 +157,8 @@ namespace boost {
171157
WritableRangeT& Input,
172158
const std::locale& Loc=std::locale())
173159
{
174-
std::transform(
175-
begin(Input),
176-
end(Input),
177-
begin(Input),
160+
::boost::algorithm::detail::transform_range(
161+
as_literal(Input),
178162
::boost::algorithm::detail::to_upperF<
179163
typename range_value<WritableRangeT>::type >(Loc));
180164
}

include/boost/algorithm/string/detail/case_conv.hpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,49 @@ namespace boost {
6161
const std::locale& m_Loc;
6262
};
6363

64+
// algorithm implementation -------------------------------------------------------------------------
65+
66+
// Transform a range
67+
template<typename OutputIteratorT, typename RangeT, typename FunctorT>
68+
OutputIteratorT transform_range_copy(
69+
OutputIteratorT Output,
70+
const RangeT& Input,
71+
FunctorT Functor)
72+
{
73+
return std::transform(
74+
begin(Input),
75+
end(Input),
76+
Output,
77+
Functor);
78+
}
79+
80+
// Transform a range (in-place)
81+
template<typename RangeT, typename FunctorT>
82+
void transform_range(
83+
const RangeT& Input,
84+
FunctorT Functor)
85+
{
86+
std::transform(
87+
begin(Input),
88+
end(Input),
89+
begin(Input),
90+
Functor);
91+
}
92+
93+
template<typename SequenceT, typename RangeT, typename FunctorT>
94+
inline SequenceT transform_range_copy(
95+
const RangeT& Input,
96+
FunctorT Functor)
97+
{
98+
return SequenceT(
99+
make_transform_iterator(
100+
begin(Input),
101+
Functor),
102+
make_transform_iterator(
103+
end(Input),
104+
Functor));
105+
}
106+
64107
} // namespace detail
65108
} // namespace algorithm
66109
} // namespace boost

0 commit comments

Comments
 (0)