source: vendor/nemo/current/NEMOGCM/EXTERNAL/XIOS/extern/boost/include/boost/range/join.hpp @ 44

Last change on this file since 44 was 44, checked in by cholod, 12 years ago

Load NEMO_TMP into vendor/nemo/current.

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