blob: a23c25aa2aaa176a13362ad74e0c5f234c7d0174 [file] [log] [blame]
Jeff Thompsonef2d5a42013-08-22 19:09:24 -07001// Boost.Range library
2//
3// Copyright Thorsten Ottosen 2003-2004. 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// For more information, see http://www.boost.org/libs/range/
9//
10
11#ifndef BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP
12#define BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP
13
14#include <ndnboost/range/detail/common.hpp>
15#include <ndnboost/range/detail/remove_extent.hpp>
16
17//////////////////////////////////////////////////////////////////////////////
18// missing partial specialization workaround.
19//////////////////////////////////////////////////////////////////////////////
20
21namespace ndnboost
22{
23 namespace range_detail
24 {
25 template< typename T >
26 struct range_const_iterator_;
27
28 template<>
29 struct range_const_iterator_<std_container_>
30 {
31 template< typename C >
32 struct pts
33 {
34 typedef BOOST_RANGE_DEDUCED_TYPENAME C::const_iterator type;
35 };
36 };
37
38 template<>
39 struct range_const_iterator_<std_pair_>
40 {
41 template< typename P >
42 struct pts
43 {
44 typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type;
45 };
46 };
47
48
49 template<>
50 struct range_const_iterator_<array_>
51 {
52 template< typename T >
53 struct pts
54 {
55 typedef const BOOST_RANGE_DEDUCED_TYPENAME
56 remove_extent<T>::type* type;
57 };
58 };
59 }
60
61 template< typename C >
62 class range_const_iterator
63 {
64 typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
65 public:
66 typedef BOOST_DEDUCED_TYPENAME range_detail::range_const_iterator_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
67 };
68
69}
70
71#endif