#ifndef PYTHONIC_INCLUDE_UTILS_SEQ_HPP #define PYTHONIC_INCLUDE_UTILS_SEQ_HPP PYTHONIC_NS_BEGIN namespace utils { // make_integer_sequence() = integer_sequence<0, ..., N-1> template struct integer_sequence { }; template using index_sequence = integer_sequence; namespace details { template struct make_integer_sequence : make_integer_sequence(N - 1), S...> { }; template struct make_integer_sequence { using type = integer_sequence; }; } template using make_integer_sequence = typename details::make_integer_sequence::type; template using make_index_sequence = typename details::make_integer_sequence::type; // make_reversed_integer_sequence() = integer_sequence namespace details { template struct make_reversed_integer_sequence : make_reversed_integer_sequence { }; template struct make_reversed_integer_sequence { using type = integer_sequence; }; } template using make_reversed_integer_sequence = typename details::make_reversed_integer_sequence::type; template using make_reversed_index_sequence = typename details::make_reversed_integer_sequence::type; // make_repeated_type() => type_sequence template struct type_sequence { }; namespace details { template struct repeated_type : repeated_type { }; template struct repeated_type { using type = type_sequence; }; } template struct repeated_type : details::repeated_type { }; template using make_repeated_type = typename repeated_type::type; } PYTHONIC_NS_END #endif