annotate DEPENDENCIES/generic/include/boost/mpl/vector/aux_/numbered.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1
Chris@16 2 // NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
Chris@16 3
Chris@16 4 #if defined(BOOST_PP_IS_ITERATING)
Chris@16 5
Chris@16 6 // Copyright Aleksey Gurtovoy 2000-2004
Chris@16 7 //
Chris@16 8 // Distributed under the Boost Software License, Version 1.0.
Chris@16 9 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 10 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 11 //
Chris@16 12 // See http://www.boost.org/libs/mpl for documentation.
Chris@16 13
Chris@101 14 // $Id$
Chris@101 15 // $Date$
Chris@101 16 // $Revision$
Chris@16 17
Chris@16 18 #include <boost/preprocessor/enum_params.hpp>
Chris@16 19 #include <boost/preprocessor/enum_shifted_params.hpp>
Chris@16 20 #include <boost/preprocessor/comma_if.hpp>
Chris@16 21 #include <boost/preprocessor/repeat.hpp>
Chris@16 22 #include <boost/preprocessor/dec.hpp>
Chris@16 23 #include <boost/preprocessor/cat.hpp>
Chris@16 24
Chris@16 25 #define i_ BOOST_PP_FRAME_ITERATION(1)
Chris@16 26
Chris@16 27 #if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
Chris@16 28
Chris@16 29 # define AUX778076_VECTOR_TAIL(vector, i_, T) \
Chris@16 30 BOOST_PP_CAT(vector,i_)< \
Chris@16 31 BOOST_PP_ENUM_PARAMS(i_, T) \
Chris@16 32 > \
Chris@16 33 /**/
Chris@16 34
Chris@16 35 #if i_ > 0
Chris@16 36 template<
Chris@16 37 BOOST_PP_ENUM_PARAMS(i_, typename T)
Chris@16 38 >
Chris@16 39 struct BOOST_PP_CAT(vector,i_)
Chris@16 40 : v_item<
Chris@16 41 BOOST_PP_CAT(T,BOOST_PP_DEC(i_))
Chris@16 42 , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),T)
Chris@16 43 >
Chris@16 44 {
Chris@16 45 typedef BOOST_PP_CAT(vector,i_) type;
Chris@16 46 };
Chris@16 47 #endif
Chris@16 48
Chris@16 49 # undef AUX778076_VECTOR_TAIL
Chris@16 50
Chris@16 51 #else // "brute force" implementation
Chris@16 52
Chris@16 53 # if i_ > 0
Chris@16 54
Chris@16 55 template<
Chris@16 56 BOOST_PP_ENUM_PARAMS(i_, typename T)
Chris@16 57 >
Chris@16 58 struct BOOST_PP_CAT(vector,i_)
Chris@16 59 {
Chris@16 60 typedef aux::vector_tag<i_> tag;
Chris@16 61 typedef BOOST_PP_CAT(vector,i_) type;
Chris@16 62
Chris@16 63 # define AUX778076_VECTOR_ITEM(unused, i_, unused2) \
Chris@16 64 typedef BOOST_PP_CAT(T,i_) BOOST_PP_CAT(item,i_); \
Chris@16 65 /**/
Chris@16 66
Chris@16 67 BOOST_PP_REPEAT(i_, AUX778076_VECTOR_ITEM, unused)
Chris@16 68 # undef AUX778076_VECTOR_ITEM
Chris@16 69 typedef void_ BOOST_PP_CAT(item,i_);
Chris@16 70 typedef BOOST_PP_CAT(T,BOOST_PP_DEC(i_)) back;
Chris@16 71
Chris@16 72 // Borland forces us to use 'type' here (instead of the class name)
Chris@16 73 typedef v_iter<type,0> begin;
Chris@16 74 typedef v_iter<type,i_> end;
Chris@16 75 };
Chris@16 76
Chris@16 77 template<>
Chris@16 78 struct push_front_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >
Chris@16 79 {
Chris@16 80 template< typename Vector, typename T > struct apply
Chris@16 81 {
Chris@16 82 typedef BOOST_PP_CAT(vector,i_)<
Chris@16 83 T
Chris@16 84 BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))
Chris@16 85 BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
Chris@16 86 > type;
Chris@16 87 };
Chris@16 88 };
Chris@16 89
Chris@16 90 template<>
Chris@16 91 struct pop_front_impl< aux::vector_tag<i_> >
Chris@16 92 {
Chris@16 93 template< typename Vector > struct apply
Chris@16 94 {
Chris@16 95 typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<
Chris@16 96 BOOST_PP_ENUM_SHIFTED_PARAMS(i_, typename Vector::item)
Chris@16 97 > type;
Chris@16 98 };
Chris@16 99 };
Chris@16 100
Chris@16 101
Chris@16 102 template<>
Chris@16 103 struct push_back_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >
Chris@16 104 {
Chris@16 105 template< typename Vector, typename T > struct apply
Chris@16 106 {
Chris@16 107 typedef BOOST_PP_CAT(vector,i_)<
Chris@16 108 BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
Chris@16 109 BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))
Chris@16 110 T
Chris@16 111 > type;
Chris@16 112 };
Chris@16 113 };
Chris@16 114
Chris@16 115 template<>
Chris@16 116 struct pop_back_impl< aux::vector_tag<i_> >
Chris@16 117 {
Chris@16 118 template< typename Vector > struct apply
Chris@16 119 {
Chris@16 120 typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<
Chris@16 121 BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
Chris@16 122 > type;
Chris@16 123 };
Chris@16 124 };
Chris@16 125
Chris@16 126 # endif // i_ > 0
Chris@16 127
Chris@16 128 # if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
Chris@16 129 && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
Chris@16 130
Chris@16 131 template< typename V >
Chris@16 132 struct v_at<V,i_>
Chris@16 133 {
Chris@16 134 typedef typename V::BOOST_PP_CAT(item,i_) type;
Chris@16 135 };
Chris@16 136
Chris@16 137 # else
Chris@16 138
Chris@16 139 namespace aux {
Chris@16 140 template<> struct v_at_impl<i_>
Chris@16 141 {
Chris@16 142 template< typename V_ > struct result_
Chris@16 143 {
Chris@16 144 typedef typename V_::BOOST_PP_CAT(item,i_) type;
Chris@16 145 };
Chris@16 146 };
Chris@16 147 }
Chris@16 148
Chris@16 149 template<>
Chris@16 150 struct at_impl< aux::vector_tag<i_> >
Chris@16 151 {
Chris@16 152 template< typename V_, typename N > struct apply
Chris@16 153 {
Chris@16 154 typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
Chris@16 155 ::template result_<V_>::type type;
Chris@16 156 };
Chris@16 157 };
Chris@16 158
Chris@16 159 #if i_ > 0
Chris@16 160 template<>
Chris@16 161 struct front_impl< aux::vector_tag<i_> >
Chris@16 162 {
Chris@16 163 template< typename Vector > struct apply
Chris@16 164 {
Chris@16 165 typedef typename Vector::item0 type;
Chris@16 166 };
Chris@16 167 };
Chris@16 168
Chris@16 169 template<>
Chris@16 170 struct back_impl< aux::vector_tag<i_> >
Chris@16 171 {
Chris@16 172 template< typename Vector > struct apply
Chris@16 173 {
Chris@16 174 typedef typename Vector::back type;
Chris@16 175 };
Chris@16 176 };
Chris@16 177
Chris@16 178 template<>
Chris@16 179 struct empty_impl< aux::vector_tag<i_> >
Chris@16 180 {
Chris@16 181 template< typename Vector > struct apply
Chris@16 182 : false_
Chris@16 183 {
Chris@16 184 };
Chris@16 185 };
Chris@16 186 #endif
Chris@16 187
Chris@16 188 template<>
Chris@16 189 struct size_impl< aux::vector_tag<i_> >
Chris@16 190 {
Chris@16 191 template< typename Vector > struct apply
Chris@16 192 : long_<i_>
Chris@16 193 {
Chris@16 194 };
Chris@16 195 };
Chris@16 196
Chris@16 197 template<>
Chris@16 198 struct O1_size_impl< aux::vector_tag<i_> >
Chris@16 199 : size_impl< aux::vector_tag<i_> >
Chris@16 200 {
Chris@16 201 };
Chris@16 202
Chris@16 203 template<>
Chris@16 204 struct clear_impl< aux::vector_tag<i_> >
Chris@16 205 {
Chris@16 206 template< typename Vector > struct apply
Chris@16 207 {
Chris@16 208 typedef vector0<> type;
Chris@16 209 };
Chris@16 210 };
Chris@16 211
Chris@16 212 # endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Chris@16 213
Chris@16 214 #endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
Chris@16 215
Chris@16 216 #undef i_
Chris@16 217
Chris@16 218 #endif // BOOST_PP_IS_ITERATING