Lumiera 0.pre.04
»edit your freedom«
Loading...
Searching...
No Matches
typeseq-util.hpp File Reference

Some basic facilities for manipulating type sequences. More...

Go to the source code of this file.

Description

Some basic facilities for manipulating type sequences.

While typelist.hpp provides the foundation of metaprogramming with typelists, manipulating the type sequences themselves (i.e. Types<T1,T2,...> instances) requires some additional helper templates supplemented here.

  • prepending to a type sequence
  • dissecting a type sequence
  • shifting a type sequence
  • re-generating a type sequence from a typelist.
See also
typeseq-manip-test.cpp
typelist.hpp
typelist-util.hpp
tuple-helper.hpp
function.hpp
generator.hpp

Definition in file typeseq-util.hpp.

Namespaces

namespace  lib
 Implementation namespace for support and library code.
 
namespace  lib::meta
 

Classes

struct  count< TYPES >
 Metafunction counting the number of Types in the collection. More...
 
struct  count< Types< TYPES... > >
 
struct  Prepend< T, Types< TYPES... > >
 
struct  Types< Node< H, T > >
 Additional specialisation of the basic type sequence type, allowing to re-create a (flat) type sequence from a typelist. More...
 
struct  Types< Nil >
 
struct  Types< NilNode >
 
struct  Split< Types< T1, TS... > >
 
struct  Split< Types<> >
 
class  Shifted< TYPES, i >
 Helper: generate a type sequence left shifted by i steps, filling in Nil at the end. More...
 
struct  Shifted< TYPES, 0 >
 
struct  Pick< Types< TYPES... >, i >
 specialisation: pick n-th element from a type sequence More...
 
struct  Repeat< T, N >
 Generate a type-sequence filled with N times the same type T. More...
 
struct  Repeat< T, 0 >
 

Functions

template<class X >
constexpr size_t indexOfType ()
 Find the index of the first incidence of a type in a type-sequence.
 
template<class X , class T , class... TYPES>
constexpr size_t indexOfType ()
 

Class Documentation

◆ lib::meta::Prepend< T, Types< TYPES... > >

struct lib::meta::Prepend< T, Types< TYPES... > >
Class Members
typedef Types< T, TYPES... > Seq
typedef List List
+ Collaboration diagram for Prepend< T, Types< TYPES... > >:

◆ lib::meta::Types< Node< H, T > >

struct lib::meta::Types< Node< H, T > >
Class Members
typedef Node< H, T > List
typedef Seq >::Seq Seq
+ Collaboration diagram for Types< Node< H, T > >:

◆ lib::meta::Split< Types< T1, TS... > >

struct lib::meta::Split< Types< T1, TS... > >
Class Members
typedef List List
typedef T1 Head
typedef Types< T1 > First
typedef Types< TS... > Tail
typedef List PrefixList
typedef List TailList
typedef Seq Prefix
typedef Type End
typedef Types< End > Last
+ Collaboration diagram for Split< Types< T1, TS... > >:

◆ lib::meta::Split< Types<> >

struct lib::meta::Split< Types<> >
Class Members
typedef Nil List
typedef Nil Head
typedef Types<> First
typedef Types<> Tail
typedef Nil PrefixList
typedef Nil TailList
typedef Types<> Prefix
typedef Types<> Last
typedef Nil End
+ Collaboration diagram for Split< Types<> >:

◆ lib::meta::Shifted< TYPES, 0 >

struct lib::meta::Shifted< TYPES, 0 >
Class Members
typedef TYPES Type
typedef Head Head
Warning
may be Nil in case of an empty list
+ Collaboration diagram for Shifted< TYPES, 0 >:

◆ lib::meta::Pick< Types< TYPES... >, i >

struct lib::meta::Pick< Types< TYPES... >, i >
Class Members
typedef Shifted< Types< TYPES... >, i >::Head Type
+ Collaboration diagram for Pick< Types< TYPES... >, i >:

◆ lib::meta::Repeat

struct lib::meta::Repeat
Class Members
typedef Seq Rem
typedef Seq Seq
+ Collaboration diagram for Repeat< T, N >:

◆ lib::meta::Repeat< T, 0 >

struct lib::meta::Repeat< T, 0 >
Class Members
typedef Types<> Seq
+ Collaboration diagram for Repeat< T, 0 >: