Chris@16: // Copyright (C) 2012-2013 Vicente J. Botet Escriba Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // 2013/04 Vicente J. Botet Escriba Chris@16: // Provide implementation up to 10 parameters when BOOST_NO_CXX11_VARIADIC_TEMPLATES is defined. Chris@16: // 2012/11 Vicente J. Botet Escriba Chris@16: // Adapt to boost libc++ implementation Chris@16: Chris@16: //===----------------------------------------------------------------------===// Chris@16: // Chris@16: // The LLVM Compiler Infrastructure Chris@16: // Chris@16: // This file is dual licensed under the MIT and the University of Illinois Open Chris@16: // Source Licenses. See LICENSE.TXT for details. Chris@16: // Chris@16: // The make_tuple_indices C++11 code is based on the one from libcxx. Chris@16: //===----------------------------------------------------------------------===// Chris@16: Chris@16: #ifndef BOOST_THREAD_DETAIL_MAKE_TUPLE_INDICES_HPP Chris@16: #define BOOST_THREAD_DETAIL_MAKE_TUPLE_INDICES_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace detail Chris@16: { Chris@16: Chris@16: #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) Chris@16: // make_tuple_indices Chris@16: Chris@16: template struct tuple_indices Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct make_indices_imp; Chris@16: Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct make_tuple_indices Chris@16: { Chris@16: BOOST_STATIC_ASSERT_MSG(Sp <= Ep, "make_tuple_indices input error"); Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: #else Chris@16: Chris@16: // - tuple forward declaration ----------------------------------------------- Chris@16: template < Chris@16: std::size_t T0 = 0, std::size_t T1 = 0, std::size_t T2 = 0, Chris@16: std::size_t T3 = 0, std::size_t T4 = 0, std::size_t T5 = 0, Chris@16: std::size_t T6 = 0, std::size_t T7 = 0, std::size_t T8 = 0, Chris@16: std::size_t T9 = 0> Chris@16: class tuple_indices {}; Chris@16: Chris@16: template Chris@16: struct make_indices_imp; Chris@16: Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: // template Chris@16: // struct make_indices_imp, Ep> Chris@16: // { Chris@16: // typedef typename make_indices_imp, Ep>::type type; Chris@16: // }; Chris@16: Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices<> type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct make_indices_imp, Ep> Chris@16: { Chris@16: typedef tuple_indices type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct make_tuple_indices Chris@16: { Chris@16: BOOST_STATIC_ASSERT_MSG(Sp <= Ep, "make_tuple_indices input error"); Chris@16: typedef typename make_indices_imp, Ep>::type type; Chris@16: }; Chris@16: Chris@16: #endif Chris@16: } Chris@16: } Chris@16: Chris@16: #endif // header