cnorxz/src/tuple_helper.h

40 lines
1.1 KiB
C
Raw Normal View History

2017-02-16 11:20:40 +01:00
// -*- C++ -*-
#ifndef __tuple_helper_h__
#define __tuple_helper_h__
#include <cstdlib>
#include <tuple>
#include "base_def.h"
namespace MultiArrayTools
{
template <class Tuple, size_t N>
auto make_left_x(const Tuple& tp) -> decltype(std::tuple_cat(make_left<Tuple,N-1>(tp),
2017-02-16 13:12:20 +01:00
std::make_tuple(get<N>(tp))));
2017-02-16 11:20:40 +01:00
template <class Tuple>
2017-02-16 13:12:20 +01:00
auto make_left_x<Tuple, 0>(const Tuple& tp) -> decltype(std::make_tuple(get<N>(tp)));
2017-02-16 11:20:40 +01:00
template <class Tuple, size_t N>
auto make_right_x(const Tuple& tp) -> decltype(std::tuple_cat(std::make_tuple(get<std::tuple_size(tp)-N>(tp)),
2017-02-16 13:12:20 +01:00
make_left<Tuple,std::tuple_size(tp)-N+1>(tp)));
2017-02-16 11:20:40 +01:00
template <class Tuple>
2017-02-16 13:12:20 +01:00
auto make_right_x<Tuple, 0>(const Tuple& tp) -> decltype(std::make_tuple(get<std::tuple_size(tp)>(tp)));
2017-02-16 11:20:40 +01:00
template <class Tuple, size_t N>
2017-02-16 13:12:20 +01:00
auto make_left(const Tuple& tp) -> decltype(make_left_x<Tuple, N>(tp));
2017-02-16 11:20:40 +01:00
template <class Tuple, size_t N>
2017-02-16 13:12:20 +01:00
auto make_right(const Tuple& tp) -> decltype(make_right_x<Tuple, std::tuple_size(Tuple)-N>(tp));
2017-02-16 11:20:40 +01:00
}
#include "tuple_helper.cc"
#endif