]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/map/aux_/iterator.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
9d472c70de4c4250bfc0bf8f89ea5d20358e9a39
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / map / aux_ / iterator.hpp
1 \r
2 #ifndef BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED\r
3 #define BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED\r
4 \r
5 // Copyright Aleksey Gurtovoy 2003-2004\r
6 // Copyright David Abrahams 2003-2004\r
7 //\r
8 // Distributed under the Boost Software License, Version 1.0. \r
9 // (See accompanying file LICENSE_1_0.txt or copy at \r
10 // http://www.boost.org/LICENSE_1_0.txt)\r
11 //\r
12 // See http://www.boost.org/libs/mpl for documentation.\r
13 \r
14 // $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $\r
15 // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $\r
16 // $Revision: 49267 $\r
17 \r
18 #include <boost/mpl/map/aux_/map0.hpp>\r
19 #include <boost/mpl/map/aux_/at_impl.hpp>\r
20 #include <boost/mpl/map/aux_/tag.hpp>\r
21 #include <boost/mpl/iterator_tags.hpp>\r
22 #include <boost/mpl/if.hpp>\r
23 #include <boost/mpl/next.hpp>\r
24 #include <boost/mpl/deref.hpp>\r
25 #include <boost/mpl/long.hpp>\r
26 #include <boost/mpl/void.hpp>\r
27 #include <boost/mpl/aux_/nttp_decl.hpp>\r
28 #include <boost/mpl/aux_/config/ctps.hpp>\r
29 \r
30 namespace boost { namespace mpl {\r
31 \r
32 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
33 \r
34 template< \r
35       typename Map\r
36     , long order\r
37     , long max_order\r
38     >\r
39 struct next_order\r
40     : if_< \r
41           is_void_< typename item_by_order<Map,order>::type >\r
42         , next_order<Map,(order+1),max_order>\r
43         , long_<order>\r
44         >::type\r
45 {\r
46 };\r
47 \r
48 template< \r
49       typename Map\r
50     , long max_order\r
51     >\r
52 struct next_order<Map,max_order,max_order>\r
53     : long_<max_order>\r
54 {\r
55 };\r
56 \r
57 \r
58 template< typename Map, long order, long max_order >\r
59 struct m_iter\r
60 {\r
61     typedef forward_iterator_tag category;\r
62     typedef typename item_by_order<Map,order>::type type;\r
63 };\r
64 \r
65 template< typename Map, long max_order >\r
66 struct m_iter<Map,max_order,max_order>\r
67 {\r
68     typedef forward_iterator_tag category;\r
69 };\r
70 \r
71 \r
72 template< typename Map, long order, long max_order > \r
73 struct next< m_iter<Map,order,max_order> >\r
74 {\r
75     typedef m_iter<\r
76           Map\r
77         , next_order<Map,order+1,max_order>::value\r
78         , max_order\r
79         > type;\r
80 };\r
81 \r
82 template< typename Map, long max_order > \r
83 struct next< m_iter<Map,max_order,max_order> >\r
84 {\r
85 };\r
86 \r
87 #else\r
88 \r
89 template< \r
90       typename Map\r
91     , BOOST_MPL_AUX_NTTP_DECL(long, order)\r
92     , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\r
93     >\r
94 struct next_order;\r
95 \r
96 template< \r
97       typename Map\r
98     , BOOST_MPL_AUX_NTTP_DECL(long, order)\r
99     , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\r
100     >\r
101 struct next_order_impl\r
102     : if_< \r
103           is_void_< typename item_by_order<Map,order>::type >\r
104         , next_order<Map,(order+1),max_order>\r
105         , long_<order>\r
106         >::type\r
107     {\r
108     };\r
109 \r
110 template< \r
111       typename Map\r
112     , BOOST_MPL_AUX_NTTP_DECL(long, order)\r
113     , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\r
114     >\r
115 struct next_order\r
116     : if_c<\r
117           (order != max_order)\r
118         , next_order_impl<Map,order,max_order>\r
119         , long_<order>\r
120         >::type\r
121 {\r
122 };\r
123 \r
124 \r
125 template<\r
126       typename Map\r
127     , BOOST_MPL_AUX_NTTP_DECL(long, order)\r
128     , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\r
129     >\r
130 struct m_iter;\r
131 \r
132 struct m_iter_empty_base {};\r
133 \r
134 template< \r
135       typename Map\r
136     , BOOST_MPL_AUX_NTTP_DECL(long, order)\r
137     , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\r
138     >\r
139 struct m_iter_base\r
140 {\r
141     typedef typename item_by_order<Map,order>::type type;\r
142     \r
143     typedef m_iter<\r
144           Map\r
145         , next_order<Map,order+1,max_order>::value\r
146         , max_order\r
147         > next;\r
148 };\r
149 \r
150 template<\r
151       typename Map\r
152     , BOOST_MPL_AUX_NTTP_DECL(long, order)\r
153     , BOOST_MPL_AUX_NTTP_DECL(long, max_order)\r
154     >\r
155 struct m_iter\r
156   : if_c<\r
157           (order == max_order)\r
158         , m_iter_empty_base\r
159         , m_iter_base<Map,order,max_order>\r
160         >::type\r
161 {\r
162     typedef forward_iterator_tag category;\r
163 };\r
164 \r
165 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
166 \r
167 }}\r
168 \r
169 #endif // BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED\r