Example #1
0
        inline typename range_value<SequenceSequenceT>::type 
        join(
            const SequenceSequenceT& Input,
            const Range1T& Separator)
        {
            // Define working types
            typedef typename range_value<SequenceSequenceT>::type ResultT;
            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;

            // Parse input
            InputIteratorT itBegin=::boost::begin(Input);
            InputIteratorT itEnd=::boost::end(Input);

            // Construct container to hold the result
            ResultT Result;
            
            // Append first element
            if(itBegin!=itEnd)
            {
                detail::insert(Result, ::boost::end(Result), *itBegin);
                ++itBegin;
            }

            for(;itBegin!=itEnd; ++itBegin)
            {
                // Add separator
                detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                // Add element
                detail::insert(Result, ::boost::end(Result), *itBegin);
            }

            return Result;
        }
Example #2
0
 inline detail::is_any_ofF<
     BOOST_STRING_TYPENAME range_value<RangeT>::type> 
 is_any_of( const RangeT& Set )
 {
     return detail::is_any_ofF<
         BOOST_STRING_TYPENAME range_value<RangeT>::type>(as_literal(Set)); 
 }
Example #3
0
 inline detail::const_formatF<
     iterator_range<
         BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >
 const_formatter(const RangeT& Format)
 {
     return detail::const_formatF<
         iterator_range<
             BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >(as_literal(Format));
 }
Example #4
0
 inline detail::last_finderF<
     BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
     PredicateT>
 last_finder( const RangeT& Search, PredicateT Comp )
 {
     return 
         detail::last_finderF<
             BOOST_STRING_TYPENAME 
                 range_const_iterator<RangeT>::type,
             PredicateT>( as_literal(Search), Comp ) ;
 }
Example #5
0
 inline detail::last_finderF<
     BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
     is_equal>
 last_finder( const RangeT& Search )
 {
     return 
         detail::last_finderF<
             BOOST_STRING_TYPENAME 
                 range_const_iterator<RangeT>::type,
             is_equal>( as_literal(Search), is_equal() );
 }
        inline typename range_value<SequenceSequenceT>::type 
        join_if_regex(
            const SequenceSequenceT& Input,
            const Range1T& Separator,
            const basic_regex<CharT, RegexTraitsT>& Rx,
            match_flag_type Flags=match_default )
        {
            // Define working types
            typedef typename range_value<SequenceSequenceT>::type ResultT;
            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;

            // Parse input
            InputIteratorT itBegin=::boost::begin(Input);
            InputIteratorT itEnd=::boost::end(Input);

            // Construct container to hold the result
            ResultT Result;


            // Roll to the first element that will be added
            while(
                itBegin!=itEnd && 
                !regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags)) ++itBegin;

            // Add this element
            if(itBegin!=itEnd)
            {
                detail::insert(Result, ::boost::end(Result), *itBegin);
                ++itBegin;
            }

            for(;itBegin!=itEnd; ++itBegin)
            {
                if(regex_match(::boost::begin(*itBegin), ::boost::end(*itBegin), Rx, Flags))
                {
                    // Add separator
                    detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                    // Add element
                    detail::insert(Result, ::boost::end(Result), *itBegin);
                }
            }

            return Result;
        }
Example #7
0
inline SequenceSequenceT&
iter_find(
    SequenceSequenceT& Result,
    RangeT& Input,
    FinderT Finder )
{
    function_requires<
    FinderConcept<FinderT,
                  BOOST_STRING_TYPENAME range_iterator<RangeT>::type> >();

    iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));

    typedef BOOST_STRING_TYPENAME
    range_iterator<RangeT>::type input_iterator_type;
    typedef find_iterator<input_iterator_type> find_iterator_type;
    typedef detail::copy_iterator_rangeF<
    BOOST_STRING_TYPENAME
    range_value<SequenceSequenceT>::type,
                input_iterator_type> copy_range_type;

    input_iterator_type InputEnd=end(lit_input);

    typedef transform_iterator<copy_range_type, find_iterator_type>
    transform_iter_type;

    transform_iter_type itBegin=
        make_transform_iterator(
            find_iterator_type( begin(lit_input), InputEnd, Finder ),
            copy_range_type());

    transform_iter_type itEnd=
        make_transform_iterator(
            find_iterator_type(),
            copy_range_type());

    SequenceSequenceT Tmp(itBegin, itEnd);

    Result.swap(Tmp);
    return Result;
}
Example #8
0
        inline typename range_value<SequenceSequenceT>::type 
        join_if(
            const SequenceSequenceT& Input,
            const Range1T& Separator,
            PredicateT Pred)
        {
            // Define working types
            typedef typename range_value<SequenceSequenceT>::type ResultT;
            typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;

            // Parse input
            InputIteratorT itBegin=::boost::begin(Input);
            InputIteratorT itEnd=::boost::end(Input);

            // Construct container to hold the result
            ResultT Result;

            // Roll to the first element that will be added
            while(itBegin!=itEnd && !Pred(*itBegin)) ++itBegin;
            // Add this element
            if(itBegin!=itEnd)
            {
                detail::insert(Result, ::boost::end(Result), *itBegin);
                ++itBegin;
            }

            for(;itBegin!=itEnd; ++itBegin)
            {
                if(Pred(*itBegin))
                {
                    // Add separator
                    detail::insert(Result, ::boost::end(Result), as_literal(Separator));
                    // Add element
                    detail::insert(Result, ::boost::end(Result), *itBegin);
                }
            }

            return Result;
        }
Example #9
0
            inline bool starts_with( 
            const Range1T& Input, 
            const Range2T& Test,
            PredicateT Comp)
        {
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));

            typedef BOOST_STRING_TYPENAME 
                range_const_iterator<Range1T>::type Iterator1T;
            typedef BOOST_STRING_TYPENAME 
                range_const_iterator<Range2T>::type Iterator2T;

            Iterator1T InputEnd=end(lit_input);
            Iterator2T TestEnd=end(lit_test);

            Iterator1T it=begin(lit_input);
            Iterator2T pit=begin(lit_test);
            for(;
                it!=InputEnd && pit!=TestEnd;
                ++it,++pit)
            {
                if( !(Comp(*it,*pit)) )
                    return false;
            }

            return pit==TestEnd;
        }
Example #10
0
        inline iterator_range< 
            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
        find( 
            RangeT& Input, 
            const FinderT& Finder)
        {
            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));

            return Finder(begin(lit_input),end(lit_input));
        }
Example #11
0
            split_iterator(
                    RangeT& Col,
                    FinderT Finder ) :
                detail::find_iterator_base<IteratorT>(Finder,0),
                m_bEof(false)
            {
                iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(as_literal(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();
            }
Example #12
0
        inline iterator_range< 
            BOOST_STRING_TYPENAME range_iterator<RangeT>::type >
        find_regex( 
            RangeT& Input, 
            const basic_regex<CharT, RegexTraitsT>& Rx,
            match_flag_type Flags=match_default )
        {
            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(as_literal(Input));

            return regex_finder(Rx,Flags)(
                ::boost::begin(lit_input), ::boost::end(lit_input) );
        }
Example #13
0
inline OutputIteratorT trim_left_copy_if(
    OutputIteratorT Output,
    const RangeT& Input,
    PredicateT IsSpace)
{
    iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(as_literal(Input));

    std::copy(
        ::boost::algorithm::detail::trim_begin(
            ::boost::begin(lit_range),
            ::boost::end(lit_range),
            IsSpace ),
        ::boost::end(lit_range),
        Output);

    return Output;
}
Example #14
0
        inline bool all( 
            const RangeT& Input, 
            PredicateT Pred)
        {
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_input(as_literal(Input));

            typedef BOOST_STRING_TYPENAME 
                range_const_iterator<RangeT>::type Iterator1T;

            Iterator1T InputEnd=end(lit_input);
            for( Iterator1T It=begin(lit_input); It!=InputEnd; ++It)
            {
                if (!Pred(*It))
                    return false;
            }
            
            return true;
        }
Example #15
0
        inline bool lexicographical_compare(
            const Range1T& Arg1,
            const Range2T& Arg2,
            PredicateT Pred)
        {
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_arg1(as_literal(Arg1));
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_arg2(as_literal(Arg2));

            return std::lexicographical_compare(
                begin(lit_arg1),
                end(lit_arg1),
                begin(lit_arg2),
                end(lit_arg2),
                Pred);
        }
Example #16
0
        inline bool contains( 
            const Range1T& Input, 
            const Range2T& Test,
            PredicateT Comp)
        {
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));

            if (empty(lit_test))
            {
                // Empty range is contained always
                return true;
            }
            
            // Use the temporary variable to make VACPP happy
            bool bResult=(first_finder(lit_test,Comp)(begin(lit_input), end(lit_input)));
            return bResult;
        }
Example #17
0
        inline bool ends_with( 
            const Range1T& Input, 
            const Range2T& Test,
            PredicateT Comp)
        {
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range1T>::type> lit_input(as_literal(Input));
            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<Range2T>::type> lit_test(as_literal(Test));

            typedef BOOST_STRING_TYPENAME 
                range_const_iterator<Range1T>::type Iterator1T;
            typedef BOOST_STRING_TYPENAME boost::detail::
                iterator_traits<Iterator1T>::iterator_category category;

            return detail::
                ends_with_iter_select( 
                    begin(lit_input), 
                    end(lit_input), 
                    begin(lit_test), 
                    end(lit_test), 
                    Comp,
                    category());
        }