annotate DEPENDENCIES/generic/include/boost/range/join.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Boost.Range library
Chris@16 2 //
Chris@16 3 // Copyright Neil Groves 2009. Use, modification and
Chris@16 4 // distribution is subject to the Boost Software License, Version
Chris@16 5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //
Chris@16 8 //
Chris@16 9 // For more information, see http://www.boost.org/libs/range/
Chris@16 10 //
Chris@16 11 #ifndef BOOST_RANGE_JOIN_HPP_INCLUDED
Chris@16 12 #define BOOST_RANGE_JOIN_HPP_INCLUDED
Chris@16 13
Chris@16 14 #include <boost/config.hpp>
Chris@16 15 #include <boost/range/detail/join_iterator.hpp>
Chris@16 16 #include <boost/range/concepts.hpp>
Chris@16 17 #include <boost/range/iterator_range.hpp>
Chris@16 18
Chris@16 19 namespace boost
Chris@16 20 {
Chris@16 21 namespace range_detail
Chris@16 22 {
Chris@16 23
Chris@16 24 template<class SinglePassRange1, class SinglePassRange2>
Chris@16 25 class joined_type
Chris@16 26 {
Chris@16 27 public:
Chris@16 28 typedef iterator_range<
Chris@16 29 range_detail::join_iterator<
Chris@16 30 BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,
Chris@16 31 BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type,
Chris@16 32 BOOST_DEDUCED_TYPENAME range_value<SinglePassRange1>::type
Chris@16 33 >
Chris@16 34 > type;
Chris@16 35 };
Chris@16 36
Chris@16 37 } // namespace range_detail
Chris@16 38
Chris@16 39 namespace range
Chris@16 40 {
Chris@16 41
Chris@16 42 template<class SinglePassRange1, class SinglePassRange2>
Chris@16 43 class joined_range
Chris@16 44 : public range_detail::joined_type<SinglePassRange1, SinglePassRange2>::type
Chris@16 45 {
Chris@16 46 typedef range_detail::join_iterator<
Chris@16 47 BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,
Chris@16 48 BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type,
Chris@16 49 BOOST_DEDUCED_TYPENAME range_value<SinglePassRange1>::type
Chris@16 50 > iterator_t;
Chris@16 51
Chris@16 52 typedef BOOST_DEDUCED_TYPENAME range_detail::joined_type<
Chris@16 53 SinglePassRange1, SinglePassRange2>::type base_t;
Chris@16 54 public:
Chris@16 55 joined_range(SinglePassRange1& rng1, SinglePassRange2& rng2)
Chris@16 56 : base_t(
Chris@16 57 iterator_t(rng1, rng2, range_detail::join_iterator_begin_tag()),
Chris@16 58 iterator_t(rng1, rng2, range_detail::join_iterator_end_tag())
Chris@16 59 )
Chris@16 60 {
Chris@16 61 }
Chris@16 62 };
Chris@16 63
Chris@16 64 template<class SinglePassRange1, class SinglePassRange2>
Chris@16 65 joined_range<const SinglePassRange1, const SinglePassRange2>
Chris@16 66 join(const SinglePassRange1& r1, const SinglePassRange2& r2)
Chris@16 67 {
Chris@16 68 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
Chris@16 69 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));
Chris@16 70
Chris@16 71 return joined_range<const SinglePassRange1, const SinglePassRange2>(r1, r2);
Chris@16 72 }
Chris@16 73
Chris@16 74 template<class SinglePassRange1, class SinglePassRange2>
Chris@16 75 joined_range<SinglePassRange1, SinglePassRange2>
Chris@16 76 join(SinglePassRange1& r1, SinglePassRange2& r2)
Chris@16 77 {
Chris@16 78 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
Chris@16 79 BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));
Chris@16 80
Chris@16 81 return joined_range<SinglePassRange1, SinglePassRange2>(r1, r2);
Chris@16 82 }
Chris@16 83
Chris@16 84 } // namespace range
Chris@16 85
Chris@16 86 using ::boost::range::joined_range;
Chris@16 87 using ::boost::range::join;
Chris@16 88
Chris@16 89 } // namespace boost
Chris@16 90
Chris@16 91 #endif // include guard