brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 17c3dbf Raw
51 lines · c
1//===-- integer_sequence utility --------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIBC_SRC___SUPPORT_CPP_UTILITY_INTEGER_SEQUENCE_H10#define LLVM_LIBC_SRC___SUPPORT_CPP_UTILITY_INTEGER_SEQUENCE_H11 12#include "src/__support/CPP/type_traits/is_integral.h"13#include "src/__support/macros/config.h"14 15#include <stddef.h>16 17namespace LIBC_NAMESPACE_DECL {18namespace cpp {19 20// integer_sequence21template <typename T, T... Ints> struct integer_sequence {22  static_assert(cpp::is_integral_v<T>);23  template <T Next> using append = integer_sequence<T, Ints..., Next>;24};25 26namespace detail {27template <typename T, int N> struct make_integer_sequence {28  using type =29      typename make_integer_sequence<T, N - 1>::type::template append<N>;30};31template <typename T> struct make_integer_sequence<T, -1> {32  using type = integer_sequence<T>;33};34} // namespace detail35 36template <typename T, int N>37using make_integer_sequence =38    typename detail::make_integer_sequence<T, N - 1>::type;39 40// index sequence41template <size_t... Ints>42using index_sequence = integer_sequence<size_t, Ints...>;43template <int N>44using make_index_sequence =45    typename detail::make_integer_sequence<size_t, N - 1>::type;46 47} // namespace cpp48} // namespace LIBC_NAMESPACE_DECL49 50#endif // LLVM_LIBC_SRC___SUPPORT_CPP_UTILITY_INTEGER_SEQUENCE_H51