/usr/include/boost/range/adaptor
NameSizeModeActions
adjacent_filtered.hpp81890644editdlrm
argument_fwd.hpp17880644editdlrm
copied.hpp20760644editdlrm
define_adaptor.hpp32960644editdlrm
filtered.hpp42450644editdlrm
formatted.hpp62130644editdlrm
indexed.hpp105920644editdlrm
indirected.hpp29460644editdlrm
map.hpp68000644editdlrm
ref_unwrapped.hpp29590644editdlrm
replaced.hpp50940644editdlrm
replaced_if.hpp53990644editdlrm
reversed.hpp32810644editdlrm
sliced.hpp34070644editdlrm
strided.hpp223440644editdlrm
tokenized.hpp47100644editdlrm
transformed.hpp44980644editdlrm
type_erased.hpp54880644editdlrm
uniqued.hpp27210644editdlrm
Edit: /usr/include/boost/range/adaptor/adjacent_filtered.hpp (8189B)
// Boost.Range library // // Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and // distribution is subject to the Boost Software License, Version // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // For more information, see http://www.boost.org/libs/range/ // #ifndef BOOST_RANGE_ADAPTOR_ADJACENT_FILTER_IMPL_HPP #define BOOST_RANGE_ADAPTOR_ADJACENT_FILTER_IMPL_HPP #include #ifdef BOOST_MSVC #pragma warning( push ) #pragma warning( disable : 4355 ) #endif #include #include #include #include #include #include #include namespace boost { namespace range_detail { template< class Iter, class Pred, bool default_pass > class skip_iterator : public boost::iterator_adaptor< skip_iterator, Iter, BOOST_DEDUCED_TYPENAME std::iterator_traits::value_type, boost::forward_traversal_tag, BOOST_DEDUCED_TYPENAME std::iterator_traits::reference, BOOST_DEDUCED_TYPENAME std::iterator_traits::difference_type > , private Pred { private: typedef boost::iterator_adaptor< skip_iterator, Iter, BOOST_DEDUCED_TYPENAME std::iterator_traits::value_type, boost::forward_traversal_tag, BOOST_DEDUCED_TYPENAME std::iterator_traits::reference, BOOST_DEDUCED_TYPENAME std::iterator_traits::difference_type > base_t; public: typedef Pred pred_t; typedef Iter iter_t; skip_iterator() : m_last() {} skip_iterator(iter_t it, iter_t last, const Pred& pred) : base_t(it) , pred_t(pred) , m_last(last) { } template skip_iterator( const skip_iterator& other ) : base_t(other.base()) , pred_t(other) , m_last(other.m_last) { } void increment() { iter_t& it = this->base_reference(); BOOST_ASSERT( it != m_last ); pred_t& bi_pred = *this; iter_t prev = it; ++it; if (it != m_last) { if (default_pass) { while (it != m_last && !bi_pred(*prev, *it)) { ++it; ++prev; } } else { for (; it != m_last; ++it, ++prev) { if (bi_pred(*prev, *it)) { break; } } } } } iter_t m_last; }; template< class P, class R, bool default_pass > struct adjacent_filtered_range : iterator_range< skip_iterator< BOOST_DEDUCED_TYPENAME range_iterator::type, P, default_pass > > { private: typedef skip_iterator< BOOST_DEDUCED_TYPENAME range_iterator::type, P, default_pass > skip_iter; typedef iterator_range base_range; typedef BOOST_DEDUCED_TYPENAME range_iterator::type raw_iterator; public: adjacent_filtered_range( const P& p, R& r ) : base_range(skip_iter(boost::begin(r), boost::end(r), p), skip_iter(boost::end(r), boost::end(r), p)) { } }; template< class T > struct adjacent_holder : holder { adjacent_holder( T r ) : holder(r) { } }; template< class T > struct adjacent_excl_holder : holder { adjacent_excl_holder( T r ) : holder(r) { } }; template< class ForwardRng, class BinPredicate > inline adjacent_filtered_range operator|( ForwardRng& r, const adjacent_holder& f ) { BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept)); return adjacent_filtered_range( f.val, r ); } template< class ForwardRng, class BinPredicate > inline adjacent_filtered_range operator|( const ForwardRng& r, const adjacent_holder& f ) { BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept)); return adjacent_filtered_range( f.val, r ); } template< class ForwardRng, class BinPredicate > inline adjacent_filtered_range operator|( ForwardRng& r, const adjacent_excl_holder& f ) { BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept)); return adjacent_filtered_range( f.val, r ); } template< class ForwardRng, class BinPredicate > inline adjacent_filtered_range operator|( const ForwardRng& r, const adjacent_excl_holder& f ) { BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept)); return adjacent_filtered_range( f.val, r ); } } // 'range_detail' // Bring adjacent_filter_range into the boost namespace so that users of // this library may specify the return type of the '|' operator and // adjacent_filter() using range_detail::adjacent_filtered_range; namespace adaptors { namespace { const range_detail::forwarder adjacent_filtered = range_detail::forwarder(); const range_detail::forwarder adjacent_filtered_excl = range_detail::forwarder(); } template inline adjacent_filtered_range adjacent_filter(ForwardRng& rng, BinPredicate filter_pred) { BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept)); return adjacent_filtered_range(filter_pred, rng); } template inline adjacent_filtered_range adjacent_filter(const ForwardRng& rng, BinPredicate filter_pred) { BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept)); return adjacent_filtered_range(filter_pred, rng); } } // 'adaptors' } #ifdef BOOST_MSVC #pragma warning( pop ) #endif #endif