7 #ifndef FMM_OPERATOR_HPP_INCLUDED
8 #define FMM_OPERATOR_HPP_INCLUDED
33 typedef std::tuple<m2m, l2l, m2l, p2m, p2l, l2p, m2p, p2p> op_tag_order;
35 template <
class T,
class Tuple>
38 template <
class T,
class... Types>
39 struct index<T, std::tuple<T, Types...> >
41 static const size_t value = 0;
44 template <
class T,
class U,
class... Types>
45 struct index<T, std::tuple<U, Types...> >
47 static const size_t value = 1 + index<T, std::tuple<Types...>>::value;
51 constexpr
size_t num_tags()
53 return std::tuple_size<internal::op_tag_order>::value;
57 constexpr
size_t tag2idx(Tag
const &tag = Tag())
59 return internal::index<Tag, internal::op_tag_order>::value;
65 typedef typename std::tuple_element<idx, internal::op_tag_order>::type type;
84 template <
class FmmTag>
87 typedef FmmTag fmm_tag;