annotate DEPENDENCIES/generic/include/boost/thread/detail/make_tuple_indices.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 // Copyright (C) 2012-2013 Vicente J. Botet Escriba
Chris@16 2 //
Chris@16 3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5
Chris@16 6 // 2013/04 Vicente J. Botet Escriba
Chris@16 7 // Provide implementation up to 10 parameters when BOOST_NO_CXX11_VARIADIC_TEMPLATES is defined.
Chris@16 8 // 2012/11 Vicente J. Botet Escriba
Chris@16 9 // Adapt to boost libc++ implementation
Chris@16 10
Chris@16 11 //===----------------------------------------------------------------------===//
Chris@16 12 //
Chris@16 13 // The LLVM Compiler Infrastructure
Chris@16 14 //
Chris@16 15 // This file is dual licensed under the MIT and the University of Illinois Open
Chris@16 16 // Source Licenses. See LICENSE.TXT for details.
Chris@16 17 //
Chris@16 18 // The make_tuple_indices C++11 code is based on the one from libcxx.
Chris@16 19 //===----------------------------------------------------------------------===//
Chris@16 20
Chris@16 21 #ifndef BOOST_THREAD_DETAIL_MAKE_TUPLE_INDICES_HPP
Chris@16 22 #define BOOST_THREAD_DETAIL_MAKE_TUPLE_INDICES_HPP
Chris@16 23
Chris@16 24 #include <boost/config.hpp>
Chris@16 25 #include <boost/static_assert.hpp>
Chris@16 26
Chris@16 27 namespace boost
Chris@16 28 {
Chris@16 29 namespace detail
Chris@16 30 {
Chris@16 31
Chris@16 32 #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
Chris@16 33 // make_tuple_indices
Chris@16 34
Chris@16 35 template <std::size_t...> struct tuple_indices
Chris@16 36 {};
Chris@16 37
Chris@16 38 template <std::size_t Sp, class IntTuple, std::size_t Ep>
Chris@16 39 struct make_indices_imp;
Chris@16 40
Chris@16 41 template <std::size_t Sp, std::size_t ...Indices, std::size_t Ep>
Chris@16 42 struct make_indices_imp<Sp, tuple_indices<Indices...>, Ep>
Chris@16 43 {
Chris@16 44 typedef typename make_indices_imp<Sp+1, tuple_indices<Indices..., Sp>, Ep>::type type;
Chris@16 45 };
Chris@16 46
Chris@16 47 template <std::size_t Ep, std::size_t ...Indices>
Chris@16 48 struct make_indices_imp<Ep, tuple_indices<Indices...>, Ep>
Chris@16 49 {
Chris@16 50 typedef tuple_indices<Indices...> type;
Chris@16 51 };
Chris@16 52
Chris@16 53 template <std::size_t Ep, std::size_t Sp = 0>
Chris@16 54 struct make_tuple_indices
Chris@16 55 {
Chris@16 56 BOOST_STATIC_ASSERT_MSG(Sp <= Ep, "make_tuple_indices input error");
Chris@16 57 typedef typename make_indices_imp<Sp, tuple_indices<>, Ep>::type type;
Chris@16 58 };
Chris@16 59 #else
Chris@16 60
Chris@16 61 // - tuple forward declaration -----------------------------------------------
Chris@16 62 template <
Chris@16 63 std::size_t T0 = 0, std::size_t T1 = 0, std::size_t T2 = 0,
Chris@16 64 std::size_t T3 = 0, std::size_t T4 = 0, std::size_t T5 = 0,
Chris@16 65 std::size_t T6 = 0, std::size_t T7 = 0, std::size_t T8 = 0,
Chris@16 66 std::size_t T9 = 0>
Chris@16 67 class tuple_indices {};
Chris@16 68
Chris@16 69 template <std::size_t Sp, class IntTuple, std::size_t Ep>
Chris@16 70 struct make_indices_imp;
Chris@16 71
Chris@16 72 template <std::size_t Sp, std::size_t Ep>
Chris@16 73 struct make_indices_imp<Sp, tuple_indices<>, Ep>
Chris@16 74 {
Chris@16 75 typedef typename make_indices_imp<Sp+1, tuple_indices<Sp>, Ep>::type type;
Chris@16 76 };
Chris@16 77 template <std::size_t Sp, std::size_t I0, std::size_t Ep>
Chris@16 78 struct make_indices_imp<Sp, tuple_indices<I0>, Ep>
Chris@16 79 {
Chris@16 80 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, Sp>, Ep>::type type;
Chris@16 81 };
Chris@16 82 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t Ep>
Chris@16 83 struct make_indices_imp<Sp, tuple_indices<I0, I1>, Ep>
Chris@16 84 {
Chris@16 85 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, Sp>, Ep>::type type;
Chris@16 86 };
Chris@16 87 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t Ep>
Chris@16 88 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2>, Ep>
Chris@16 89 {
Chris@16 90 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, Sp>, Ep>::type type;
Chris@16 91 };
Chris@16 92 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t Ep>
Chris@16 93 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3>, Ep>
Chris@16 94 {
Chris@16 95 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, Sp>, Ep>::type type;
Chris@16 96 };
Chris@16 97 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t Ep>
Chris@16 98 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3, I4>, Ep>
Chris@16 99 {
Chris@16 100 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, I4, Sp>, Ep>::type type;
Chris@16 101 };
Chris@16 102 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5, std::size_t Ep>
Chris@16 103 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3, I4, I5>, Ep>
Chris@16 104 {
Chris@16 105 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, I4, I5, Sp>, Ep>::type type;
Chris@16 106 };
Chris@16 107 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 108 , std::size_t I6
Chris@16 109 , std::size_t Ep>
Chris@16 110 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3, I4, I5, I6>, Ep>
Chris@16 111 {
Chris@16 112 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, I4, I5, I6, Sp>, Ep>::type type;
Chris@16 113 };
Chris@16 114 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 115 , std::size_t I6
Chris@16 116 , std::size_t I7
Chris@16 117 , std::size_t Ep>
Chris@16 118 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3, I4, I5, I6, I7>, Ep>
Chris@16 119 {
Chris@16 120 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, Sp>, Ep>::type type;
Chris@16 121 };
Chris@16 122 template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 123 , std::size_t I6
Chris@16 124 , std::size_t I7
Chris@16 125 , std::size_t I8
Chris@16 126 , std::size_t Ep>
Chris@16 127 struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3, I4, I5, I6, I7, I8>, Ep>
Chris@16 128 {
Chris@16 129 typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, I8, Sp>, Ep>::type type;
Chris@16 130 };
Chris@16 131 // template <std::size_t Sp, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 132 // , std::size_t I6
Chris@16 133 // , std::size_t I7
Chris@16 134 // , std::size_t I8
Chris@16 135 // , std::size_t I9
Chris@16 136 // , std::size_t Ep>
Chris@16 137 // struct make_indices_imp<Sp, tuple_indices<I0, I1 , I2, I3, I4, I5, I6, I7, I8, I9>, Ep>
Chris@16 138 // {
Chris@16 139 // typedef typename make_indices_imp<Sp+1, tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, I8, I9, Sp>, Ep>::type type;
Chris@16 140 // };
Chris@16 141
Chris@16 142 template <std::size_t Ep>
Chris@16 143 struct make_indices_imp<Ep, tuple_indices<>, Ep>
Chris@16 144 {
Chris@16 145 typedef tuple_indices<> type;
Chris@16 146 };
Chris@16 147 template <std::size_t Ep, std::size_t I0>
Chris@16 148 struct make_indices_imp<Ep, tuple_indices<I0>, Ep>
Chris@16 149 {
Chris@16 150 typedef tuple_indices<I0> type;
Chris@16 151 };
Chris@16 152 template <std::size_t Ep, std::size_t I0, std::size_t I1>
Chris@16 153 struct make_indices_imp<Ep, tuple_indices<I0, I1>, Ep>
Chris@16 154 {
Chris@16 155 typedef tuple_indices<I0, I1> type;
Chris@16 156 };
Chris@16 157 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2>
Chris@16 158 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2>, Ep>
Chris@16 159 {
Chris@16 160 typedef tuple_indices<I0, I1, I2> type;
Chris@16 161 };
Chris@16 162 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3>
Chris@16 163 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3>, Ep>
Chris@16 164 {
Chris@16 165 typedef tuple_indices<I0, I1, I2, I3> type;
Chris@16 166 };
Chris@16 167 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4>
Chris@16 168 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3, I4>, Ep>
Chris@16 169 {
Chris@16 170 typedef tuple_indices<I0, I1, I2, I3, I4> type;
Chris@16 171 };
Chris@16 172 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5>
Chris@16 173 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3, I4, I5>, Ep>
Chris@16 174 {
Chris@16 175 typedef tuple_indices<I0, I1, I2, I3, I4, I5> type;
Chris@16 176 };
Chris@16 177 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 178 , std::size_t I6
Chris@16 179 >
Chris@16 180 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3, I4, I5, I6>, Ep>
Chris@16 181 {
Chris@16 182 typedef tuple_indices<I0, I1, I2, I3, I4, I5, I6> type;
Chris@16 183 };
Chris@16 184 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 185 , std::size_t I6
Chris@16 186 , std::size_t I7
Chris@16 187 >
Chris@16 188 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7>, Ep>
Chris@16 189 {
Chris@16 190 typedef tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7> type;
Chris@16 191 };
Chris@16 192 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 193 , std::size_t I6
Chris@16 194 , std::size_t I7
Chris@16 195 , std::size_t I8
Chris@16 196 >
Chris@16 197 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, I8>, Ep>
Chris@16 198 {
Chris@16 199 typedef tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, I8> type;
Chris@16 200 };
Chris@16 201
Chris@16 202 template <std::size_t Ep, std::size_t I0, std::size_t I1, std::size_t I2, std::size_t I3, std::size_t I4, std::size_t I5
Chris@16 203 , std::size_t I6
Chris@16 204 , std::size_t I7
Chris@16 205 , std::size_t I8
Chris@16 206 , std::size_t I9
Chris@16 207 >
Chris@16 208 struct make_indices_imp<Ep, tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, I8, I9>, Ep>
Chris@16 209 {
Chris@16 210 typedef tuple_indices<I0, I1, I2, I3, I4, I5, I6, I7, I8, I9> type;
Chris@16 211 };
Chris@16 212
Chris@16 213 template <std::size_t Ep, std::size_t Sp = 0>
Chris@16 214 struct make_tuple_indices
Chris@16 215 {
Chris@16 216 BOOST_STATIC_ASSERT_MSG(Sp <= Ep, "make_tuple_indices input error");
Chris@16 217 typedef typename make_indices_imp<Sp, tuple_indices<>, Ep>::type type;
Chris@16 218 };
Chris@16 219
Chris@16 220 #endif
Chris@16 221 }
Chris@16 222 }
Chris@16 223
Chris@16 224 #endif // header