mirror of
https://github.com/boostorg/algorithm.git
synced 2025-07-29 12:07:18 +02:00
Merge pull request #49 from Ben10do/feature/forwarding-references
Use forwarding references in string/split.hpp
This commit is contained in:
@ -71,7 +71,11 @@ namespace boost {
|
|||||||
inline SequenceSequenceT&
|
inline SequenceSequenceT&
|
||||||
iter_find(
|
iter_find(
|
||||||
SequenceSequenceT& Result,
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
RangeT&& Input,
|
||||||
|
#else
|
||||||
RangeT& Input,
|
RangeT& Input,
|
||||||
|
#endif
|
||||||
FinderT Finder )
|
FinderT Finder )
|
||||||
{
|
{
|
||||||
BOOST_CONCEPT_ASSERT((
|
BOOST_CONCEPT_ASSERT((
|
||||||
@ -142,7 +146,11 @@ namespace boost {
|
|||||||
inline SequenceSequenceT&
|
inline SequenceSequenceT&
|
||||||
iter_split(
|
iter_split(
|
||||||
SequenceSequenceT& Result,
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
RangeT&& Input,
|
||||||
|
#else
|
||||||
RangeT& Input,
|
RangeT& Input,
|
||||||
|
#endif
|
||||||
FinderT Finder )
|
FinderT Finder )
|
||||||
{
|
{
|
||||||
BOOST_CONCEPT_ASSERT((
|
BOOST_CONCEPT_ASSERT((
|
||||||
|
@ -61,7 +61,11 @@ namespace boost {
|
|||||||
template< typename SequenceSequenceT, typename Range1T, typename Range2T >
|
template< typename SequenceSequenceT, typename Range1T, typename Range2T >
|
||||||
inline SequenceSequenceT& find_all(
|
inline SequenceSequenceT& find_all(
|
||||||
SequenceSequenceT& Result,
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
Range1T&& Input,
|
||||||
|
#else
|
||||||
Range1T& Input,
|
Range1T& Input,
|
||||||
|
#endif
|
||||||
const Range2T& Search)
|
const Range2T& Search)
|
||||||
{
|
{
|
||||||
return ::boost::algorithm::iter_find(
|
return ::boost::algorithm::iter_find(
|
||||||
@ -96,7 +100,11 @@ namespace boost {
|
|||||||
template< typename SequenceSequenceT, typename Range1T, typename Range2T >
|
template< typename SequenceSequenceT, typename Range1T, typename Range2T >
|
||||||
inline SequenceSequenceT& ifind_all(
|
inline SequenceSequenceT& ifind_all(
|
||||||
SequenceSequenceT& Result,
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
Range1T&& Input,
|
||||||
|
#else
|
||||||
Range1T& Input,
|
Range1T& Input,
|
||||||
|
#endif
|
||||||
const Range2T& Search,
|
const Range2T& Search,
|
||||||
const std::locale& Loc=std::locale() )
|
const std::locale& Loc=std::locale() )
|
||||||
{
|
{
|
||||||
@ -139,7 +147,11 @@ namespace boost {
|
|||||||
template< typename SequenceSequenceT, typename RangeT, typename PredicateT >
|
template< typename SequenceSequenceT, typename RangeT, typename PredicateT >
|
||||||
inline SequenceSequenceT& split(
|
inline SequenceSequenceT& split(
|
||||||
SequenceSequenceT& Result,
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
RangeT&& Input,
|
||||||
|
#else
|
||||||
RangeT& Input,
|
RangeT& Input,
|
||||||
|
#endif
|
||||||
PredicateT Pred,
|
PredicateT Pred,
|
||||||
token_compress_mode_type eCompress=token_compress_off )
|
token_compress_mode_type eCompress=token_compress_off )
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
// See http://www.boost.org for updates, documentation, and revision history.
|
// See http://www.boost.org for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
|
||||||
#include <boost/algorithm/string/split.hpp>
|
#include <boost/algorithm/string/split.hpp>
|
||||||
#include <boost/algorithm/string/classification.hpp>
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
// equals predicate is used for result comparison
|
// equals predicate is used for result comparison
|
||||||
@ -82,6 +84,28 @@ void iterator_test()
|
|||||||
string("xx") );
|
string("xx") );
|
||||||
deep_compare( tokens, vtokens );
|
deep_compare( tokens, vtokens );
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
// If using a compiler that supports forwarding references, we should be able to use rvalues, too
|
||||||
|
find_all(
|
||||||
|
tokens,
|
||||||
|
string("xx-abc--xx-abb"),
|
||||||
|
"xx" );
|
||||||
|
|
||||||
|
BOOST_REQUIRE( tokens.size()==2 );
|
||||||
|
BOOST_CHECK( tokens[0]==string("xx") );
|
||||||
|
BOOST_CHECK( tokens[1]==string("xx") );
|
||||||
|
|
||||||
|
ifind_all(
|
||||||
|
tokens,
|
||||||
|
string("Xx-abc--xX-abb-xx"),
|
||||||
|
"xx" );
|
||||||
|
|
||||||
|
BOOST_REQUIRE( tokens.size()==3 );
|
||||||
|
BOOST_CHECK( tokens[0]==string("Xx") );
|
||||||
|
BOOST_CHECK( tokens[1]==string("xX") );
|
||||||
|
BOOST_CHECK( tokens[2]==string("xx") );
|
||||||
|
#endif
|
||||||
|
|
||||||
// split tests
|
// split tests
|
||||||
split(
|
split(
|
||||||
tokens,
|
tokens,
|
||||||
@ -144,6 +168,21 @@ void iterator_test()
|
|||||||
BOOST_REQUIRE( tokens.size()==1 );
|
BOOST_REQUIRE( tokens.size()==1 );
|
||||||
BOOST_CHECK( tokens[0]==string("") );
|
BOOST_CHECK( tokens[0]==string("") );
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
// If using a compiler that supports forwarding references, we should be able to use rvalues, too
|
||||||
|
split(
|
||||||
|
tokens,
|
||||||
|
string("Xx-abc--xX-abb-xx"),
|
||||||
|
is_any_of("xX"),
|
||||||
|
token_compress_on );
|
||||||
|
|
||||||
|
BOOST_REQUIRE( tokens.size()==4 );
|
||||||
|
BOOST_CHECK( tokens[0]==string("") );
|
||||||
|
BOOST_CHECK( tokens[1]==string("-abc--") );
|
||||||
|
BOOST_CHECK( tokens[2]==string("-abb-") );
|
||||||
|
BOOST_CHECK( tokens[3]==string("") );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
find_iterator<string::iterator> fiter=make_find_iterator(str1, first_finder("xx"));
|
find_iterator<string::iterator> fiter=make_find_iterator(str1, first_finder("xx"));
|
||||||
find_iterator<string::iterator> fiter2;
|
find_iterator<string::iterator> fiter2;
|
||||||
|
Reference in New Issue
Block a user