50 using type = std::integral_constant< size_t,
sizeof...(T) >;
63 constexpr
static size_t value = 0;
71 constexpr
static size_t value = 1;
89 using current_type =
typename std::tuple_element< 0, std::tuple< T... > >::type;
99 using current_type =
typename std::tuple_element< N, std::tuple< T... > >::type;
100 constexpr
static std::size_t
value =
117 template<
size_t N = 0,
typename XStream,
typename... T >
118 typename std::enable_if< (N >=
sizeof...(T)), XStream& >::type
ostream_tuple(XStream& s,
const std::tuple< T... >&)
134 template<
size_t N = 0,
typename XStream,
typename... T >
135 typename std::enable_if< (N <
sizeof...(T)), XStream& >::type
ostream_tuple(XStream& s,
const std::tuple< T... >&
t)
138 s << std::get< N >(
t);
140 return ostream_tuple< N + 1 >(s,
t);
154 template<
size_t N = 0,
typename XStream,
typename... T >
155 typename std::enable_if< (N >=
sizeof...(T)), XStream& >::type
istream_tuple(XStream& s, std::tuple< T... >&)
171 template<
size_t N = 0,
typename XStream,
typename... T >
172 typename std::enable_if< (N <
sizeof...(T)), XStream& >::type
istream_tuple(XStream& s, std::tuple< T... >&
t)
175 s >> std::get< N >(
t);
177 return istream_tuple< N + 1 >(s,
t);
193 template<
typename XTupleType,
typename XFunctorType >
static void visit(XTupleType& tup, XFunctorType& functor)
196 functor(NTypes - 1, std::get< NTypes - 1 >(tup));
213 template<
typename XTupleType,
typename XFunctorType >
static void visit(XTupleType& tup, XFunctorType& functor) {}
234 template<
typename XTupleType,
typename XFunctorType >
235 static void apply(XTupleType& tup,
size_t index, XFunctorType& functor)
238 if(index == NTypes - 1)
240 functor(std::get< NTypes - 1 >(tup));
266 template<
typename XTupleType,
typename XFunctorType >
267 static void apply(XTupleType& tup,
size_t index, XFunctorType& functor)
280 template<
typename XTupleType,
typename XFunctorType >
void apply_at(
const XTupleType& tup,
size_t index, XFunctorType& functor)
286 template<
typename XTupleType,
typename XFunctorType >
void apply_at(XTupleType& tup,
size_t index, XFunctorType& functor)
299 template<
typename XTupleType,
typename XTupleType2,
typename XFunctorType >
300 static void apply(XTupleType& tup1, XTupleType2& tup2,
size_t index, XFunctorType& functor)
303 if(index == NTypes - 1)
305 functor(std::get< NTypes - 1 >(tup1), std::get< NTypes - 1 >(tup2));
318 template<
typename XTupleType,
typename XTupleType2,
typename XFunctorType >
319 static void apply(XTupleType& tup1, XTupleType2& tup2,
size_t index, XFunctorType& functor)
324 template<
typename XTupleType,
typename XTupleType2,
typename XFunctorType >
325 void apply_at2(
const XTupleType& tup1, XTupleType& tup2,
size_t index, XFunctorType& functor)
331 template<
typename XTupleType,
typename XTupleType2,
typename XFunctorType >
332 void apply_at2(XTupleType& tup1, XTupleType2& tup2,
size_t index, XFunctorType& functor)
340 template<
typename XValueType >
struct is_complex: std::false_type
343 template<>
struct is_complex< std::complex< float > >: std::true_type
346 template<>
struct is_complex< std::complex< double > >: std::true_type
349 template<>
struct is_complex< std::complex< long double > >: std::true_type
358 template<
typename XContainer1,
typename XContainer2 >
359 std::map< typename XContainer1::value_type, typename XContainer2::value_type >
zip_into_map(
const XContainer1& c1,
360 const XContainer2& c2)
362 auto it1 = c1.begin();
363 auto it2 = c2.begin();
364 std::map< typename XContainer1::value_type, typename XContainer2::value_type > zip;
365 while(it1 != c1.end() && it2 != c2.end())
Definition: MHO_Meta.hh:378
Definition: MHO_Meta.hh:387
Definition: MHO_Meta.hh:381
Definition: MHO_Meta.hh:384
t
Definition: picking_aedit.py:14
Definition: MHO_ChannelLabeler.hh:17
std::enable_if<(N >=sizeof...(T)), XStream & >::type istream_tuple(XStream &s, std::tuple< T... > &)
Returns an XStream& without modification for terminating case.
Definition: MHO_Meta.hh:155
void apply_at2(const XTupleType &tup1, XTupleType &tup2, size_t index, XFunctorType &functor)
Definition: MHO_Meta.hh:325
typename MHO_TypelistSizeImpl< L >::type MHO_TypelistSize
Class MHO_TypelistSize - alias to MHO_TypelistSize, retrieve the value itself with value (element of ...
Definition: MHO_Meta.hh:56
std::map< typename XContainer1::value_type, typename XContainer2::value_type > zip_into_map(const XContainer1 &c1, const XContainer2 &c2)
zip elements of two iterable (probably STL) containers (which define a value_type) into a map which t...
Definition: MHO_Meta.hh:359
std::enable_if<(N >=sizeof...(T)), XStream & >::type ostream_tuple(XStream &s, const std::tuple< T... > &)
Terminating case for ostream_tuple, does nothing and returns s.
Definition: MHO_Meta.hh:118
std::integral_constant< size_t, sizeof...(T) > type
Definition: MHO_Meta.hh:50
void apply_at(const XTupleType &tup, size_t index, XFunctorType &functor)
Applies a functor to an element at a specified index in a tuple.
Definition: MHO_Meta.hh:280
Definition: MHO_Meta.hh:21
Class MHO_EmptyType.
Definition: MHO_Meta.hh:27
Class MHO_Typelist.
Definition: MHO_Meta.hh:34
Class MHO_TypelistSizeImpl.
Definition: MHO_Meta.hh:40
static void apply(XTupleType &tup1, XTupleType2 &tup2, size_t index, XFunctorType &functor)
Definition: MHO_Meta.hh:319
Definition: MHO_Meta.hh:298
static void apply(XTupleType &tup1, XTupleType2 &tup2, size_t index, XFunctorType &functor)
Definition: MHO_Meta.hh:300
static void apply(XTupleType &tup, size_t index, XFunctorType &functor)
Applies a functor to an element of a tuple at a given index.
Definition: MHO_Meta.hh:267
Class apply_to_tuple - generic apply functor to tuple element (for runtime-indexed access)
Definition: MHO_Meta.hh:223
static void apply(XTupleType &tup, size_t index, XFunctorType &functor)
Applies a functor to an element of a tuple at a specified index.
Definition: MHO_Meta.hh:235
typename std::tuple_element< 0, std::tuple< T... > >::type current_type
Definition: MHO_Meta.hh:89
Class count_instances_of_type - utility to count the instances of a particular type in a parameter pa...
Definition: MHO_Meta.hh:98
typename std::tuple_element< N, std::tuple< T... > >::type current_type
Definition: MHO_Meta.hh:99
constexpr static std::size_t value
Definition: MHO_Meta.hh:100
static void visit(XTupleType &tup, XFunctorType &functor)
Recursively applies functor to tuple elements and then itself.
Definition: MHO_Meta.hh:213
Class indexed_tuple_visit - generic apply functor (which takes and index value!) to all elements of a...
Definition: MHO_Meta.hh:186
static void visit(XTupleType &tup, XFunctorType &functor)
Applies a functor to all elements of an XTupleType tuple and recursively visits the next type.
Definition: MHO_Meta.hh:193
Definition: MHO_Meta.hh:341
Class is_same_count - utility to return 1 if two types are the same, zero otherwise.
Definition: MHO_Meta.hh:62