forked from boostorg/range
Boost.Range fixes for compilers that were having problems picking between const and mutable range overloads of range algorithms.
[SVN r61028]
This commit is contained in:
@ -7,10 +7,6 @@ template<class SinglePassRange, class Value>
|
|||||||
typename range_iterator<SinglePassRange>::type
|
typename range_iterator<SinglePassRange>::type
|
||||||
find(SinglePassRange& rng, Value val);
|
find(SinglePassRange& rng, Value val);
|
||||||
|
|
||||||
template<class SinglePassRange, class Value>
|
|
||||||
typename range_iterator<const SinglePassRange>::type
|
|
||||||
find(const SinglePassRange& rng, Value val);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class SinglePassRange,
|
class SinglePassRange,
|
||||||
@ -18,20 +14,12 @@ template<
|
|||||||
>
|
>
|
||||||
typename range_return<SinglePassRange, re>::type
|
typename range_return<SinglePassRange, re>::type
|
||||||
find(SinglePassRange& rng, Value val);
|
find(SinglePassRange& rng, Value val);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class SinglePassRange,
|
|
||||||
class Value
|
|
||||||
>
|
|
||||||
typename range_return<const SinglePassRange, re>::type
|
|
||||||
find(const SinglePassRange& rng, Value val);
|
|
||||||
``
|
``
|
||||||
|
|
||||||
[heading Description]
|
[heading Description]
|
||||||
|
|
||||||
The versions of `find` that return an iterator, returns the first iterator in the range `rng` such that `*i == value`. `end(rng)` is returned if no such iterator exists.
|
The versions of `find` that return an iterator, returns the first iterator in the range `rng` such that `*i == value`. `end(rng)` is returned if no such iterator exists.
|
||||||
The versions of find that return a `range_return`, defines `found` in the same manner as the returned iterator described above.
|
The versions of find that return a `range_return`, defines `found` in the same manner as the returned iterator described above.
|
||||||
|
|
||||||
[heading Definition]
|
[heading Definition]
|
||||||
|
|
||||||
|
@ -7,10 +7,6 @@ template<class ForwardRange1, class ForwardRange2>
|
|||||||
typename range_iterator<ForwardRange1>::type
|
typename range_iterator<ForwardRange1>::type
|
||||||
find_end(ForwardRange1& rng1, const ForwardRange2& rng2);
|
find_end(ForwardRange1& rng1, const ForwardRange2& rng2);
|
||||||
|
|
||||||
template<class ForwardRange1, class ForwardRange2>
|
|
||||||
typename range_iterator<const ForwardRange1>::type
|
|
||||||
find_end(const ForwardRange1& rng1, const ForwardRange2& rng2);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class ForwardRange1,
|
class ForwardRange1,
|
||||||
class ForwardRange2,
|
class ForwardRange2,
|
||||||
@ -19,15 +15,6 @@ template<
|
|||||||
typename range_iterator<ForwardRange1>::type
|
typename range_iterator<ForwardRange1>::type
|
||||||
find_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
find_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
||||||
|
|
||||||
template<
|
|
||||||
class ForwardRange1,
|
|
||||||
class ForwardRange2,
|
|
||||||
class BinaryPredicate
|
|
||||||
>
|
|
||||||
typename range_iterator<const ForwardRange1>::type
|
|
||||||
find_end(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
|
||||||
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class ForwardRange1,
|
class ForwardRange1,
|
||||||
@ -36,14 +23,6 @@ template<
|
|||||||
typename range_return<ForwardRange1, re>::type
|
typename range_return<ForwardRange1, re>::type
|
||||||
find_end(ForwardRange1& rng1, const ForwardRange2& rng2);
|
find_end(ForwardRange1& rng1, const ForwardRange2& rng2);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class ForwardRange1,
|
|
||||||
class ForwardRange2
|
|
||||||
>
|
|
||||||
typename range_return<const ForwardRange1, re>::type
|
|
||||||
find_end(const ForwardRange1& rng1, const ForwardRange2& rng2);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class ForwardRange1,
|
class ForwardRange1,
|
||||||
@ -52,22 +31,13 @@ template<
|
|||||||
>
|
>
|
||||||
typename range_return<ForwardRange1, re>::type
|
typename range_return<ForwardRange1, re>::type
|
||||||
find_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
find_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class ForwardRange1,
|
|
||||||
class ForwardRange2,
|
|
||||||
class BinaryPredicate
|
|
||||||
>
|
|
||||||
typename range_return<const ForwardRange1, re>::type
|
|
||||||
find_end(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
|
||||||
``
|
``
|
||||||
|
|
||||||
[heading Description]
|
[heading Description]
|
||||||
|
|
||||||
The versions of `find_end` that return an iterator, return an iterator to the beginning of the last sub-sequence equal to `rng2` within `rng1`.
|
The versions of `find_end` that return an iterator, return an iterator to the beginning of the last sub-sequence equal to `rng2` within `rng1`.
|
||||||
Equality is determined by `operator==` for non-predicate versions of `find_end`, and by satisfying `pred` in the predicate versions. The versions of `find_end` that return a `range_return`, defines `found` in the same manner as the returned iterator described above.
|
Equality is determined by `operator==` for non-predicate versions of `find_end`, and by satisfying `pred` in the predicate versions. The versions of `find_end` that return a `range_return`, defines `found` in the same manner as the returned iterator described above.
|
||||||
|
|
||||||
[heading Definition]
|
[heading Definition]
|
||||||
|
|
||||||
Defined in the header file `boost/range/algorithm/find_end.hpp`
|
Defined in the header file `boost/range/algorithm/find_end.hpp`
|
||||||
|
@ -7,10 +7,6 @@ template<class SinglePassRange1, class ForwardRange2>
|
|||||||
typename range_iterator<SinglePassRange1>::type
|
typename range_iterator<SinglePassRange1>::type
|
||||||
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2);
|
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2);
|
||||||
|
|
||||||
template<class SinglePassRange1, class ForwardRange2>
|
|
||||||
typename range_iterator<const SinglePassRange1>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class SinglePassRange1,
|
class SinglePassRange1,
|
||||||
class ForwardRange2,
|
class ForwardRange2,
|
||||||
@ -19,15 +15,6 @@ template<
|
|||||||
typename range_iterator<SinglePassRange1>::type
|
typename range_iterator<SinglePassRange1>::type
|
||||||
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
||||||
|
|
||||||
template<
|
|
||||||
class SinglePassRange1,
|
|
||||||
class ForwardRange2,
|
|
||||||
class BinaryPredicate
|
|
||||||
>
|
|
||||||
typename range_iterator<const SinglePassRange1>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
|
||||||
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class SinglePassRange1,
|
class SinglePassRange1,
|
||||||
@ -36,14 +23,6 @@ template<
|
|||||||
typename range_return<SinglePassRange1, re>::type
|
typename range_return<SinglePassRange1, re>::type
|
||||||
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2);
|
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class SinglePassRange1,
|
|
||||||
class ForwardRange2
|
|
||||||
>
|
|
||||||
typename range_return<const SinglePassRange1, re>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class SinglePassRange1,
|
class SinglePassRange1,
|
||||||
@ -52,15 +31,6 @@ template<
|
|||||||
>
|
>
|
||||||
typename range_return<SinglePassRange1, re>::type
|
typename range_return<SinglePassRange1, re>::type
|
||||||
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class SinglePassRange1,
|
|
||||||
class ForwardRange2,
|
|
||||||
class BinaryPredicate
|
|
||||||
>
|
|
||||||
typename range_return<const SinglePassRange1, re>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
|
|
||||||
``
|
``
|
||||||
|
|
||||||
[heading Description]
|
[heading Description]
|
||||||
|
@ -7,10 +7,6 @@ template<class SinglePassRange, class UnaryPredicate>
|
|||||||
typename range_iterator<SinglePassRange>::type
|
typename range_iterator<SinglePassRange>::type
|
||||||
find_if(SinglePassRange& rng, UnaryPredicate pred);
|
find_if(SinglePassRange& rng, UnaryPredicate pred);
|
||||||
|
|
||||||
template<class SinglePassRange, class UnaryPredicate>
|
|
||||||
typename range_iterator<const SinglePassRange>::type
|
|
||||||
find_if(const SinglePassRange& rng, UnaryPredicate pred);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class SinglePassRange,
|
class SinglePassRange,
|
||||||
@ -18,14 +14,6 @@ template<
|
|||||||
>
|
>
|
||||||
typename range_return<SinglePassRange, re>::type
|
typename range_return<SinglePassRange, re>::type
|
||||||
find_if(SinglePassRange& rng, UnaryPredicate pred);
|
find_if(SinglePassRange& rng, UnaryPredicate pred);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class SinglePassRange,
|
|
||||||
class UnaryPredicate
|
|
||||||
>
|
|
||||||
typename range_return<const SinglePassRange, re>::type
|
|
||||||
find_if(const SinglePassRange& rng, UnaryPredicate pred);
|
|
||||||
``
|
``
|
||||||
|
|
||||||
[heading Description]
|
[heading Description]
|
||||||
|
@ -7,10 +7,6 @@ template<class ForwardRange, class Value>
|
|||||||
typename range_iterator<ForwardRange>::type
|
typename range_iterator<ForwardRange>::type
|
||||||
lower_bound(ForwardRange& rng, Value val);
|
lower_bound(ForwardRange& rng, Value val);
|
||||||
|
|
||||||
template<class ForwardRange, class Value>
|
|
||||||
typename range_iterator<const ForwardRange>::type
|
|
||||||
lower_bound(const ForwardRange& rng, Value val);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class ForwardRange,
|
class ForwardRange,
|
||||||
@ -18,14 +14,6 @@ template<
|
|||||||
>
|
>
|
||||||
typename range_return<ForwardRange, re>::type
|
typename range_return<ForwardRange, re>::type
|
||||||
lower_bound(ForwardRange& rng, Value val);
|
lower_bound(ForwardRange& rng, Value val);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class ForwardRange,
|
|
||||||
class Value
|
|
||||||
>
|
|
||||||
typename range_return<const ForwardRange, re>::type
|
|
||||||
lower_bound(const ForwardRange& rng, Value val);
|
|
||||||
``
|
``
|
||||||
|
|
||||||
[heading Description]
|
[heading Description]
|
||||||
|
@ -7,10 +7,6 @@ template<class ForwardRange, class Value>
|
|||||||
typename range_iterator<ForwardRange>::type
|
typename range_iterator<ForwardRange>::type
|
||||||
upper_bound(ForwardRange& rng, Value val);
|
upper_bound(ForwardRange& rng, Value val);
|
||||||
|
|
||||||
template<class ForwardRange, class Value>
|
|
||||||
typename range_iterator<const ForwardRange>::type
|
|
||||||
upper_bound(const ForwardRange& rng, Value val);
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
range_return_value re,
|
range_return_value re,
|
||||||
class ForwardRange,
|
class ForwardRange,
|
||||||
@ -18,14 +14,6 @@ template<
|
|||||||
>
|
>
|
||||||
typename range_return<ForwardRange, re>::type
|
typename range_return<ForwardRange, re>::type
|
||||||
upper_bound(ForwardRange& rng, Value val);
|
upper_bound(ForwardRange& rng, Value val);
|
||||||
|
|
||||||
template<
|
|
||||||
range_return_value re,
|
|
||||||
class ForwardRange,
|
|
||||||
class Value
|
|
||||||
>
|
|
||||||
typename range_return<const ForwardRange, re>::type
|
|
||||||
upper_bound(const ForwardRange& rng, Value val);
|
|
||||||
``
|
``
|
||||||
|
|
||||||
[heading Description]
|
[heading Description]
|
||||||
@ -36,7 +24,7 @@ with predicate - `pred(val, *i)` is `true`.
|
|||||||
|
|
||||||
`end(rng)` is returned if no such iterator exists.
|
`end(rng)` is returned if no such iterator exists.
|
||||||
|
|
||||||
The versions of `upper_bound` that return a `range_return`, defines `found` in the same manner as the returned iterator described above.
|
The versions of `upper_bound` that return a `range_return`, defines `found` in the same manner as the returned iterator described above.
|
||||||
|
|
||||||
[heading Definition]
|
[heading Definition]
|
||||||
|
|
||||||
|
@ -33,14 +33,6 @@ find( SinglePassRange& rng, const Value& val )
|
|||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
|
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
|
||||||
return std::find(boost::begin(rng), boost::end(rng), val);
|
return std::find(boost::begin(rng), boost::end(rng), val);
|
||||||
}
|
}
|
||||||
/// \overload
|
|
||||||
template< class SinglePassRange, class Value >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type
|
|
||||||
find( const SinglePassRange& rng, const Value& val )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
|
|
||||||
return std::find(boost::begin(rng), boost::end(rng), val);
|
|
||||||
}
|
|
||||||
|
|
||||||
// range_return overloads
|
// range_return overloads
|
||||||
|
|
||||||
@ -54,16 +46,6 @@ find( SinglePassRange& rng, const Value& val )
|
|||||||
pack(std::find(boost::begin(rng), boost::end(rng), val),
|
pack(std::find(boost::begin(rng), boost::end(rng), val),
|
||||||
rng);
|
rng);
|
||||||
}
|
}
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class SinglePassRange, class Value >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange,re>::type
|
|
||||||
find( const SinglePassRange& rng, const Value& val )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
|
|
||||||
return range_return<const SinglePassRange,re>::
|
|
||||||
pack(std::find(boost::begin(rng), boost::end(rng), val),
|
|
||||||
rng);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace range
|
} // namespace range
|
||||||
using range::find;
|
using range::find;
|
||||||
|
@ -30,7 +30,7 @@ namespace boost
|
|||||||
/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
|
/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
|
||||||
template< class ForwardRange1, class ForwardRange2 >
|
template< class ForwardRange1, class ForwardRange2 >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator< ForwardRange1 >::type
|
inline BOOST_DEDUCED_TYPENAME range_iterator< ForwardRange1 >::type
|
||||||
find_end(ForwardRange1 & rng1, ForwardRange2 const & rng2)
|
find_end(ForwardRange1 & rng1, const ForwardRange2& rng2)
|
||||||
{
|
{
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
|
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
||||||
@ -39,23 +39,10 @@ find_end(ForwardRange1 & rng1, ForwardRange2 const & rng2)
|
|||||||
boost::begin(rng2),boost::end(rng2));
|
boost::begin(rng2),boost::end(rng2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< class ForwardRange1, class ForwardRange2 >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type
|
|
||||||
find_end(ForwardRange1 const & rng1, ForwardRange2 const & rng2)
|
|
||||||
{
|
|
||||||
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return std::find_end(boost::begin(rng1),boost::end(rng1),
|
|
||||||
boost::begin(rng2),boost::end(rng2));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
|
template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type
|
inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type
|
||||||
find_end(ForwardRange1 & rng1, ForwardRange2 const & rng2, BinaryPredicate pred)
|
find_end(ForwardRange1 & rng1, const ForwardRange2& rng2, BinaryPredicate pred)
|
||||||
{
|
{
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
|
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
||||||
@ -64,18 +51,6 @@ find_end(ForwardRange1 & rng1, ForwardRange2 const & rng2, BinaryPredicate pred)
|
|||||||
boost::begin(rng2),boost::end(rng2),pred);
|
boost::begin(rng2),boost::end(rng2),pred);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type
|
|
||||||
find_end(ForwardRange1 const & rng1, ForwardRange2 const & rng2, BinaryPredicate pred)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return std::find_end(boost::begin(rng1),boost::end(rng1),
|
|
||||||
boost::begin(rng2),boost::end(rng2),pred);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \overload
|
/// \overload
|
||||||
template< range_return_value re, class ForwardRange1, class ForwardRange2 >
|
template< range_return_value re, class ForwardRange1, class ForwardRange2 >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type
|
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type
|
||||||
@ -90,20 +65,6 @@ find_end(ForwardRange1& rng1, const ForwardRange2& rng2)
|
|||||||
rng1);
|
rng1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange1, class ForwardRange2 >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type
|
|
||||||
find_end(const ForwardRange1& rng1, const ForwardRange2& rng2)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return range_return<const ForwardRange1,re>::
|
|
||||||
pack(std::find_end(boost::begin(rng1), boost::end(rng1),
|
|
||||||
boost::begin(rng2), boost::end(rng2)),
|
|
||||||
rng1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \overload
|
/// \overload
|
||||||
template< range_return_value re, class ForwardRange1, class ForwardRange2,
|
template< range_return_value re, class ForwardRange1, class ForwardRange2,
|
||||||
class BinaryPredicate >
|
class BinaryPredicate >
|
||||||
@ -119,22 +80,6 @@ find_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
|
|||||||
rng1);
|
rng1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange1, class ForwardRange2,
|
|
||||||
class BinaryPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type
|
|
||||||
find_end(const ForwardRange1& rng1, const ForwardRange2& rng2,
|
|
||||||
BinaryPredicate pred)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return range_return<const ForwardRange1,re>::
|
|
||||||
pack(std::find_end(boost::begin(rng1), boost::end(rng1),
|
|
||||||
boost::begin(rng2), boost::end(rng2), pred),
|
|
||||||
rng1);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace range
|
} // namespace range
|
||||||
using range::find_end;
|
using range::find_end;
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
@ -39,18 +39,6 @@ find_first_of(SinglePassRange1 & rng1, ForwardRange2 const & rng2)
|
|||||||
boost::begin(rng2),boost::end(rng2));
|
boost::begin(rng2),boost::end(rng2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< class SinglePassRange1, class ForwardRange2 >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type
|
|
||||||
find_first_of(SinglePassRange1 const & rng1, ForwardRange2 const & rng2)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return std::find_first_of(boost::begin(rng1),boost::end(rng1),
|
|
||||||
boost::begin(rng2),boost::end(rng2));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >
|
template< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type
|
inline BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type
|
||||||
@ -63,19 +51,6 @@ find_first_of(SinglePassRange1 & rng1, ForwardRange2 const & rng2, BinaryPredica
|
|||||||
boost::begin(rng2),boost::end(rng2),pred);
|
boost::begin(rng2),boost::end(rng2),pred);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2,
|
|
||||||
BinaryPredicate pred)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return std::find_first_of(boost::begin(rng1),boost::end(rng1),
|
|
||||||
boost::begin(rng2),boost::end(rng2),pred);
|
|
||||||
}
|
|
||||||
|
|
||||||
// range return overloads
|
// range return overloads
|
||||||
/// \overload
|
/// \overload
|
||||||
template< range_return_value re, class SinglePassRange1, class ForwardRange2 >
|
template< range_return_value re, class SinglePassRange1, class ForwardRange2 >
|
||||||
@ -91,20 +66,6 @@ find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2)
|
|||||||
rng1);
|
rng1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class SinglePassRange1, class ForwardRange2 >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange1,re>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
|
|
||||||
|
|
||||||
return range_return<const SinglePassRange1,re>::
|
|
||||||
pack(std::find_first_of(boost::begin(rng1), boost::end(rng1),
|
|
||||||
boost::begin(rng2), boost::end(rng2)),
|
|
||||||
rng1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \overload
|
/// \overload
|
||||||
template< range_return_value re, class SinglePassRange1, class ForwardRange2,
|
template< range_return_value re, class SinglePassRange1, class ForwardRange2,
|
||||||
class BinaryPredicate >
|
class BinaryPredicate >
|
||||||
@ -121,22 +82,6 @@ find_first_of(SinglePassRange1 & rng1, const ForwardRange2& rng2,
|
|||||||
rng1);
|
rng1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class SinglePassRange1, class ForwardRange2,
|
|
||||||
class BinaryPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange1,re>::type
|
|
||||||
find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2,
|
|
||||||
BinaryPredicate pred)
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange2> ));
|
|
||||||
|
|
||||||
return range_return<const SinglePassRange1,re>::
|
|
||||||
pack(std::find_first_of(boost::begin(rng1), boost::end(rng1),
|
|
||||||
boost::begin(rng2), boost::end(rng2),pred),
|
|
||||||
rng1);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace range
|
} // namespace range
|
||||||
using range::find_first_of;
|
using range::find_first_of;
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
@ -34,14 +34,6 @@ find_if( SinglePassRange& rng, UnaryPredicate pred )
|
|||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
|
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
|
||||||
return std::find_if(boost::begin(rng), boost::end(rng), pred);
|
return std::find_if(boost::begin(rng), boost::end(rng), pred);
|
||||||
}
|
}
|
||||||
/// \overload
|
|
||||||
template< class SinglePassRange, class UnaryPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type
|
|
||||||
find_if( const SinglePassRange& rng, UnaryPredicate pred )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
|
|
||||||
return std::find_if(boost::begin(rng), boost::end(rng), pred);
|
|
||||||
}
|
|
||||||
|
|
||||||
// range_return overloads
|
// range_return overloads
|
||||||
|
|
||||||
@ -55,16 +47,6 @@ find_if( SinglePassRange& rng, UnaryPredicate pred )
|
|||||||
pack(std::find_if(boost::begin(rng), boost::end(rng), pred),
|
pack(std::find_if(boost::begin(rng), boost::end(rng), pred),
|
||||||
rng);
|
rng);
|
||||||
}
|
}
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class SinglePassRange, class UnaryPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange,re>::type
|
|
||||||
find_if( const SinglePassRange& rng, UnaryPredicate pred )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
|
|
||||||
return range_return<const SinglePassRange,re>::
|
|
||||||
pack(std::find_if(boost::begin(rng), boost::end(rng), pred),
|
|
||||||
rng);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace range
|
} // namespace range
|
||||||
using range::find_if;
|
using range::find_if;
|
||||||
|
@ -34,14 +34,6 @@ lower_bound( ForwardRange& rng, Value val )
|
|||||||
return std::lower_bound(boost::begin(rng), boost::end(rng), val);
|
return std::lower_bound(boost::begin(rng), boost::end(rng), val);
|
||||||
}
|
}
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class ForwardRange, class Value >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
|
|
||||||
lower_bound( const ForwardRange& rng, Value val )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return std::lower_bound(boost::begin(rng), boost::end(rng), val);
|
|
||||||
}
|
|
||||||
/// \overload
|
|
||||||
template< class ForwardRange, class Value, class SortPredicate >
|
template< class ForwardRange, class Value, class SortPredicate >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
|
inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
|
||||||
lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
||||||
@ -50,14 +42,6 @@ lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
|||||||
return std::lower_bound(boost::begin(rng), boost::end(rng), val, pred);
|
return std::lower_bound(boost::begin(rng), boost::end(rng), val, pred);
|
||||||
}
|
}
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class ForwardRange, class Value, class SortPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
|
|
||||||
lower_bound( const ForwardRange& rng, Value val, SortPredicate pred )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return std::lower_bound(boost::begin(rng), boost::end(rng), val, pred);
|
|
||||||
}
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange, class Value >
|
template< range_return_value re, class ForwardRange, class Value >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
||||||
lower_bound( ForwardRange& rng, Value val )
|
lower_bound( ForwardRange& rng, Value val )
|
||||||
@ -68,16 +52,6 @@ lower_bound( ForwardRange& rng, Value val )
|
|||||||
rng);
|
rng);
|
||||||
}
|
}
|
||||||
/// \overload
|
/// \overload
|
||||||
template< range_return_value re, class ForwardRange, class Value >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
|
|
||||||
lower_bound( const ForwardRange& rng, Value val )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return range_return<const ForwardRange,re>::
|
|
||||||
pack(std::lower_bound(boost::begin(rng), boost::end(rng), val),
|
|
||||||
rng);
|
|
||||||
}
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange, class Value, class SortPredicate >
|
template< range_return_value re, class ForwardRange, class Value, class SortPredicate >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
||||||
lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
||||||
@ -87,16 +61,6 @@ lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
|||||||
pack(std::lower_bound(boost::begin(rng), boost::end(rng), val, pred),
|
pack(std::lower_bound(boost::begin(rng), boost::end(rng), val, pred),
|
||||||
rng);
|
rng);
|
||||||
}
|
}
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange, class Value, class SortPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
|
|
||||||
lower_bound( const ForwardRange& rng, Value val, SortPredicate pred )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return range_return<const ForwardRange,re>::
|
|
||||||
pack(std::lower_bound(boost::begin(rng), boost::end(rng), val, pred),
|
|
||||||
rng);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace range
|
} // namespace range
|
||||||
using range::lower_bound;
|
using range::lower_bound;
|
||||||
|
@ -34,13 +34,6 @@ upper_bound( ForwardRange& rng, Value val )
|
|||||||
return std::upper_bound(boost::begin(rng), boost::end(rng), val);
|
return std::upper_bound(boost::begin(rng), boost::end(rng), val);
|
||||||
}
|
}
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class ForwardRange, class Value >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
|
|
||||||
upper_bound( const ForwardRange& rng, Value val )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return std::upper_bound(boost::begin(rng), boost::end(rng), val);
|
|
||||||
}
|
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class ForwardRange, class Value, class SortPredicate >
|
template< class ForwardRange, class Value, class SortPredicate >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
|
inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
|
||||||
@ -50,14 +43,6 @@ upper_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
|||||||
return std::upper_bound(boost::begin(rng), boost::end(rng), val, pred);
|
return std::upper_bound(boost::begin(rng), boost::end(rng), val, pred);
|
||||||
}
|
}
|
||||||
/// \overload
|
/// \overload
|
||||||
template< class ForwardRange, class Value, class SortPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
|
|
||||||
upper_bound( const ForwardRange& rng, Value val, SortPredicate pred )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return std::upper_bound(boost::begin(rng), boost::end(rng), val, pred);
|
|
||||||
}
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange, class Value >
|
template< range_return_value re, class ForwardRange, class Value >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
||||||
upper_bound( ForwardRange& rng, Value val )
|
upper_bound( ForwardRange& rng, Value val )
|
||||||
@ -68,16 +53,6 @@ upper_bound( ForwardRange& rng, Value val )
|
|||||||
rng);
|
rng);
|
||||||
}
|
}
|
||||||
/// \overload
|
/// \overload
|
||||||
template< range_return_value re, class ForwardRange, class Value >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
|
|
||||||
upper_bound( const ForwardRange& rng, Value val )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return range_return<const ForwardRange,re>::
|
|
||||||
pack(std::upper_bound(boost::begin(rng), boost::end(rng), val),
|
|
||||||
rng);
|
|
||||||
}
|
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange, class Value,
|
template< range_return_value re, class ForwardRange, class Value,
|
||||||
class SortPredicate >
|
class SortPredicate >
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
|
||||||
@ -88,17 +63,6 @@ upper_bound( ForwardRange& rng, Value val, SortPredicate pred )
|
|||||||
pack(std::upper_bound(boost::begin(rng), boost::end(rng), val, pred),
|
pack(std::upper_bound(boost::begin(rng), boost::end(rng), val, pred),
|
||||||
rng);
|
rng);
|
||||||
}
|
}
|
||||||
/// \overload
|
|
||||||
template< range_return_value re, class ForwardRange, class Value,
|
|
||||||
class SortPredicate >
|
|
||||||
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
|
|
||||||
upper_bound( const ForwardRange& rng, Value val, SortPredicate pred )
|
|
||||||
{
|
|
||||||
BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
|
|
||||||
return range_return<const ForwardRange,re>::
|
|
||||||
pack(std::upper_bound(boost::begin(rng), boost::end(rng), val, pred),
|
|
||||||
rng);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace range
|
} // namespace range
|
||||||
using range::upper_bound;
|
using range::upper_bound;
|
||||||
|
@ -86,6 +86,10 @@ namespace boost
|
|||||||
test_find_container< const std::vector<int> >();
|
test_find_container< const std::vector<int> >();
|
||||||
test_find_container< const std::list<int> >();
|
test_find_container< const std::list<int> >();
|
||||||
test_find_container< const std::deque<int> >();
|
test_find_container< const std::deque<int> >();
|
||||||
|
|
||||||
|
std::vector<int> vi;
|
||||||
|
const std::vector<int>& cvi = vi;
|
||||||
|
std::vector<int>::const_iterator it = boost::find(vi, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
94
test/sub_range.cpp
Executable file → Normal file
94
test/sub_range.cpp
Executable file → Normal file
@ -17,51 +17,48 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/range/sub_range.hpp>
|
#include <boost/range/sub_range.hpp>
|
||||||
#include <boost/range/as_literal.hpp>
|
#include <boost/range/as_literal.hpp>
|
||||||
#include <boost/test/test_tools.hpp>
|
#include <boost/test/test_tools.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
using namespace boost;
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
void check_sub_range()
|
void check_sub_range()
|
||||||
{
|
{
|
||||||
|
|
||||||
typedef string::iterator iterator;
|
typedef std::string::iterator iterator;
|
||||||
typedef string::const_iterator const_iterator;
|
typedef std::string::const_iterator const_iterator;
|
||||||
typedef iterator_range<iterator> irange;
|
typedef boost::iterator_range<iterator> irange;
|
||||||
typedef iterator_range<const_iterator> cirange;
|
typedef boost::iterator_range<const_iterator> cirange;
|
||||||
string str = "hello world";
|
std::string str = "hello world";
|
||||||
const string cstr = "const world";
|
const std::string cstr = "const world";
|
||||||
irange r = make_iterator_range( str );
|
irange r = boost::make_iterator_range( str );
|
||||||
r = make_iterator_range( str.begin(), str.end() );
|
r = boost::make_iterator_range( str.begin(), str.end() );
|
||||||
cirange r2 = make_iterator_range( cstr );
|
cirange r2 = boost::make_iterator_range( cstr );
|
||||||
r2 = make_iterator_range( cstr.begin(), cstr.end() );
|
r2 = boost::make_iterator_range( cstr.begin(), cstr.end() );
|
||||||
r2 = make_iterator_range( str );
|
r2 = boost::make_iterator_range( str );
|
||||||
|
|
||||||
typedef sub_range<string> srange;
|
typedef boost::sub_range<std::string> srange;
|
||||||
typedef sub_range<const string> csrange;
|
typedef boost::sub_range<const std::string> csrange;
|
||||||
srange s = r;
|
srange s = r;
|
||||||
BOOST_CHECK( r == r );
|
BOOST_CHECK( r == r );
|
||||||
BOOST_CHECK( s == r );
|
BOOST_CHECK( s == r );
|
||||||
s = make_iterator_range( str );
|
s = boost::make_iterator_range( str );
|
||||||
csrange s2 = r;
|
csrange s2 = r;
|
||||||
s2 = r2;
|
s2 = r2;
|
||||||
s2 = make_iterator_range( cstr );
|
s2 = boost::make_iterator_range( cstr );
|
||||||
BOOST_CHECK( r2 == r2 );
|
BOOST_CHECK( r2 == r2 );
|
||||||
BOOST_CHECK( s2 != r2 );
|
BOOST_CHECK( s2 != r2 );
|
||||||
s2 = make_iterator_range( str );
|
s2 = boost::make_iterator_range( str );
|
||||||
BOOST_CHECK( !(s != s) );
|
BOOST_CHECK( !(s != s) );
|
||||||
|
|
||||||
BOOST_CHECK( r.begin() == s.begin() );
|
BOOST_CHECK( r.begin() == s.begin() );
|
||||||
BOOST_CHECK( r2.begin()== s2.begin() );
|
BOOST_CHECK( r2.begin()== s2.begin() );
|
||||||
BOOST_CHECK( r.end() == s.end() );
|
BOOST_CHECK( r.end() == s.end() );
|
||||||
BOOST_CHECK( r2.end() == s2.end() );
|
BOOST_CHECK( r2.end() == s2.end() );
|
||||||
BOOST_CHECK_EQUAL( r.size(), s.size() );
|
BOOST_CHECK_EQUAL( r.size(), s.size() );
|
||||||
BOOST_CHECK_EQUAL( r2.size(), s2.size() );
|
BOOST_CHECK_EQUAL( r2.size(), s2.size() );
|
||||||
|
|
||||||
//#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
|
//#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
|
||||||
// if( !(bool)r )
|
// if( !(bool)r )
|
||||||
// BOOST_CHECK( false );
|
// BOOST_CHECK( false );
|
||||||
@ -70,7 +67,7 @@ void check_sub_range()
|
|||||||
// if( !(bool)s )
|
// if( !(bool)s )
|
||||||
// BOOST_CHECK( false );
|
// BOOST_CHECK( false );
|
||||||
// if( !(bool)s2 )
|
// if( !(bool)s2 )
|
||||||
// BOOST_CHECK( false );
|
// BOOST_CHECK( false );
|
||||||
//#else
|
//#else
|
||||||
if( !r )
|
if( !r )
|
||||||
BOOST_CHECK( false );
|
BOOST_CHECK( false );
|
||||||
@ -80,13 +77,13 @@ void check_sub_range()
|
|||||||
BOOST_CHECK( false );
|
BOOST_CHECK( false );
|
||||||
if( !s2 )
|
if( !s2 )
|
||||||
BOOST_CHECK( false );
|
BOOST_CHECK( false );
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
std::cout << r << r2 << s << s2;
|
||||||
|
|
||||||
|
std::string res = boost::copy_range<std::string>( r );
|
||||||
|
BOOST_CHECK_EQUAL_COLLECTIONS( res.begin(), res.end(), r.begin(), r.end() );
|
||||||
|
|
||||||
cout << r << r2 << s << s2;
|
|
||||||
|
|
||||||
string res = copy_range<string>( r );
|
|
||||||
BOOST_CHECK( equal( res.begin(), res.end(), r.begin() ) );
|
|
||||||
|
|
||||||
r.empty();
|
r.empty();
|
||||||
s.empty();
|
s.empty();
|
||||||
r.size();
|
r.size();
|
||||||
@ -107,44 +104,43 @@ void check_sub_range()
|
|||||||
//BOOST_CHECK( empty( singular_srange ) );
|
//BOOST_CHECK( empty( singular_srange ) );
|
||||||
//
|
//
|
||||||
|
|
||||||
srange rr = make_iterator_range( str );
|
srange rr = boost::make_iterator_range( str );
|
||||||
BOOST_CHECK( rr.equal( r ) );
|
BOOST_CHECK( rr.equal( r ) );
|
||||||
|
|
||||||
rr = make_iterator_range( str.begin(), str.begin() + 5 );
|
rr = boost::make_iterator_range( str.begin(), str.begin() + 5 );
|
||||||
BOOST_CHECK( rr == as_literal("hello") );
|
BOOST_CHECK( rr == boost::as_literal("hello") );
|
||||||
BOOST_CHECK( rr != as_literal("hell") );
|
BOOST_CHECK( rr != boost::as_literal("hell") );
|
||||||
BOOST_CHECK( rr < as_literal("hello dude") );
|
BOOST_CHECK( rr < boost::as_literal("hello dude") );
|
||||||
BOOST_CHECK( as_literal("hello") == rr );
|
BOOST_CHECK( boost::as_literal("hello") == rr );
|
||||||
BOOST_CHECK( as_literal("hell") != rr );
|
BOOST_CHECK( boost::as_literal("hell") != rr );
|
||||||
BOOST_CHECK( ! (as_literal("hello dude") < rr ) );
|
BOOST_CHECK( ! (boost::as_literal("hello dude") < rr ) );
|
||||||
|
|
||||||
irange rrr = rr;
|
irange rrr = rr;
|
||||||
BOOST_CHECK( rrr == rr );
|
BOOST_CHECK( rrr == rr );
|
||||||
BOOST_CHECK( !( rrr != rr ) );
|
BOOST_CHECK( !( rrr != rr ) );
|
||||||
BOOST_CHECK( !( rrr < rr ) );
|
BOOST_CHECK( !( rrr < rr ) );
|
||||||
|
|
||||||
const irange cr = make_iterator_range( str );
|
const irange cr = boost::make_iterator_range( str );
|
||||||
BOOST_CHECK_EQUAL( cr.front(), 'h' );
|
BOOST_CHECK_EQUAL( cr.front(), 'h' );
|
||||||
BOOST_CHECK_EQUAL( cr.back(), 'd' );
|
BOOST_CHECK_EQUAL( cr.back(), 'd' );
|
||||||
BOOST_CHECK_EQUAL( cr[1], 'e' );
|
BOOST_CHECK_EQUAL( cr[1], 'e' );
|
||||||
BOOST_CHECK_EQUAL( cr(1), 'e' );
|
BOOST_CHECK_EQUAL( cr(1), 'e' );
|
||||||
|
|
||||||
rrr = make_iterator_range( str, 1, -1 );
|
rrr = boost::make_iterator_range( str, 1, -1 );
|
||||||
BOOST_CHECK( rrr == as_literal("ello worl") );
|
BOOST_CHECK( rrr == boost::as_literal("ello worl") );
|
||||||
rrr = make_iterator_range( rrr, -1, 1 );
|
rrr = boost::make_iterator_range( rrr, -1, 1 );
|
||||||
BOOST_CHECK( rrr == str );
|
BOOST_CHECK( rrr == str );
|
||||||
rrr.front() = 'H';
|
rrr.front() = 'H';
|
||||||
rrr.back() = 'D';
|
rrr.back() = 'D';
|
||||||
rrr[1] = 'E';
|
rrr[1] = 'E';
|
||||||
BOOST_CHECK( rrr == as_literal("HEllo worlD") );
|
BOOST_CHECK( rrr == boost::as_literal("HEllo worlD") );
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
using boost::unit_test::test_suite;
|
|
||||||
|
|
||||||
test_suite* init_unit_test_suite( int argc, char* argv[] )
|
boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
test_suite* test = BOOST_TEST_SUITE( "Range Test Suite" );
|
boost::unit_test::test_suite* test = BOOST_TEST_SUITE( "Range Test Suite" );
|
||||||
|
|
||||||
test->add( BOOST_TEST_CASE( &check_sub_range ) );
|
test->add( BOOST_TEST_CASE( &check_sub_range ) );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user