// -*- C++ -*- #ifndef __tuple_helper_h__ #define __tuple_helper_h__ #include #include #include "base_def.h" namespace MultiArrayTools { template auto make_left_x(const Tuple& tp) -> decltype(std::tuple_cat(make_left(tp), std::make_tuple(get(tp)))) { return std::tuple_cat(make_left(tp), std::make_tuple(get(tp))); } template auto make_left_x(const Tuple& tp) -> decltype(std::make_tuple(get(tp))) { return std::make_tuple(get(tp)); } template auto make_right_x(const Tuple& tp) -> decltype(std::tuple_cat(std::make_tuple(get(tp)), make_left(tp))) { const size_t M = std::tuple_size(tp) - N; return std::tuple_cat(std::make_tuple(get(tp)), make_left(tp)); } template auto make_right_x(const Tuple& tp) -> decltype(std::make_tuple(get(tp))) { const size_t M = std::tuple_size(tp); return std::make_tuple(get(tp)); } template auto make_left(const Tuple& tp) -> decltype(make_left_x(tp)) { return make_left_x(tp); } template auto make_right(const Tuple& tp) -> decltype(make_right_x(tp)) { return make_right_x(tp); } } #include "tuple_helper.cc" #endif