CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::MPL Namespace Reference

Classes

struct  AllHelper
 All base case: return true. More...
 
struct  AllHelper< TTypePred, T, Ts... >
 All recursive case: test multiple types. More...
 
struct  BoundAll
 Bind All's predicate to TMF. More...
 
struct  ConcatHelper
 Concat base case: empty lists. More...
 
struct  ConcatHelper< TypeList< Ts... > >
 Concat base case: single non-empty list. More...
 
struct  ConcatHelper< TypeList< Ts0... >, TypeList< Ts1... >, TRest... >
 Concat recursive case: multiple lists. More...
 
struct  ContainsAllHelper
 
struct  ContainsAllHelper< TypeList< T, TRest... >, TTypeList >
 
struct  ContainsAllHelper< TypeList<>, TTypeList >
 
struct  CountHelper
 Count base case: 0. More...
 
struct  CountHelper< T, TypeList< T0, Ts... > >
 Count recursive case. More...
 
struct  ExpandT
 
struct  FilterHelper
 Filter base case: empty list. More...
 
struct  FilterHelper< TTypePred, TypeList< T, Ts... > >
 Filter recursive case: concat matching types. More...
 
struct  IndexOfHelper
 
struct  IndexOfHelper< T, TypeList< T, Ts... > >
 IndexOf base case: found the type we're looking for. More...
 
struct  IndexOfHelper< T, TypeList< TOther, Ts... > >
 IndexOf recursive case: 1 + IndexOf the rest of the types. More...
 
struct  MapHelper
 Map base case: empty list. More...
 
struct  MapHelper< TTypeFn, TypeList< T, Ts... > >
 Map recursive case: non-empty list. More...
 
struct  RenameHelper
 
struct  RenameHelper< TNewName, TOldName< Ts... > >
 "Renames" TOldName<Ts...> to TNewName<Ts...>. More...
 
struct  RepeatHelper
 Repeat recursive case: TTimes repetitions left. More...
 
struct  RepeatHelper< 0, T >
 Repeat base case: 0 repetitions left. More...
 
struct  Type
 Simple wrapper for types that can be instantiated. More...
 
struct  TypeList
 Compile-time list of types. More...
 
struct  UniqueHelper
 
struct  UniqueHelper< TypeList< T, Ts... > >
 

Typedefs

template<typename... TTypeLists>
using Concat = typename ConcatHelper< TTypeLists... >::type
 Interface type alias.
 
template<template< typename > class TTypePred, typename TTypeList >
using Filter = typename FilterHelper< TTypePred, TTypeList >::type
 Interface type alias.
 
template<template< typename > class TTypeFn, typename TTypeList >
using Map = typename MapHelper< TTypeFn, TTypeList >::type
 Interface type alias.
 
template<template< typename... > class TNewName, typename T >
using Rename = typename RenameHelper< TNewName, T >::type
 
template<std::size_t TTimes, typename T >
using Repeat = typename RepeatHelper< TTimes, T >::type
 Interface type alias.
 
template<typename TTypeList >
using Tuple = Rename< std::tuple, TTypeList >
 Type list as a tuple.
 
template<typename TTypeList >
using TypeTuple = Tuple< Map< Type, TTypeList > >
 Type list as a tuple of Type<T>.
 
template<std::size_t TIndex, typename TTypeList >
using Nth = std::tuple_element_t< TIndex, Tuple< TTypeList > >
 "Nth" element of a type list.
 
template<typename T , typename TTypeList >
using PushBack = Concat< TTypeList, TypeList< T > >
 Adds a type to the back of a type list.
 
template<typename T , typename TTypeList >
using PushFront = Concat< TypeList< T >, TTypeList >
 Adds a type to the front of a type list.
 
template<typename TTypeList >
using Head = Nth< 0, TTypeList >
 First type of a type list.
 
template<typename TTypeList >
using Tail = Nth< size< TTypeList >() - 1, TTypeList >
 Last type of a type list.
 

Functions

template<typename TFunction , typename TTuple , std::size_t... TIndices>
constexpr decltype(autotupleApplyImpl (TFunction &&function, TTuple &&tuple, std::index_sequence< TIndices... >)
 
template<typename TFunction , typename TTuple >
constexpr decltype(autotupleApply (TFunction &&function, TTuple &&tuple)
 
template<typename TFunction , typename... Ts>
constexpr decltype(autoforArgs (TFunction &&function, Ts &&... args)
 
template<typename TFunction , typename TTuple >
constexpr decltype(autoforTuple (TFunction &&function, TTuple &&tuple)
 
template<typename TTypeList >
constexpr auto size () noexcept
 Size of a type list.
 
template<typename TTypeList , typename TFunction >
constexpr void forTypes (TFunction &&mFunction) noexcept
 Execute a function for every type in a type list, wrapped in a Type<T>.
 

Variables

template<template< typename > class TTypePred, typename... Ts>
constexpr bool All = AllHelper<TTypePred, Ts...>::value
 
template<template< typename > class TMF, typename TL >
constexpr bool AllTypes = Rename<BoundAll<TMF>::template type, TL>::value
 Unpack a type list into All.
 
template<typename TCheckTypeList , typename TTypeList >
constexpr bool ContainsAll = ContainsAllHelper<TCheckTypeList, TTypeList>::value
 
template<typename T , typename TTypeList >
constexpr size_t Count = CountHelper<T, TTypeList>::value
 Interface type alias.
 
template<typename T , typename TTypeList >
constexpr bool Contains = Count<T, TTypeList> > 0
 Alias for Count > 0.
 
template<typename T , typename TTypeList >
constexpr size_t IndexOf = IndexOfHelper<T, TTypeList>::value
 Interface alias.
 
template<typename... Ts>
constexpr bool Unique = UniqueHelper<TypeList<Ts...>>::value
 

Typedef Documentation

◆ Concat

template<typename... TTypeLists>
using CeresEngine::MPL::Concat = typedef typename ConcatHelper<TTypeLists...>::type

Interface type alias.

◆ Filter

◆ Head

First type of a type list.

◆ Map

◆ Nth

template<std::size_t TIndex, typename TTypeList >
using CeresEngine::MPL::Nth = typedef std::tuple_element_t<TIndex, Tuple<TTypeList> >

"Nth" element of a type list.

◆ PushBack

Adds a type to the back of a type list.

◆ PushFront

Adds a type to the front of a type list.

◆ Rename

template<template< typename... > class TNewName, typename T >
using CeresEngine::MPL::Rename = typedef typename RenameHelper<TNewName, T>::type

◆ Repeat

template<std::size_t TTimes, typename T >
using CeresEngine::MPL::Repeat = typedef typename RepeatHelper<TTimes, T>::type

Interface type alias.

◆ Tail

Last type of a type list.

◆ Tuple

Type list as a tuple.

◆ TypeTuple

Type list as a tuple of Type<T>.

Function Documentation

◆ forArgs()

template<typename TFunction , typename... Ts>
constexpr decltype(auto) CeresEngine::MPL::forArgs ( TFunction &&  function,
Ts &&...  args 
)
constexpr

◆ forTuple()

constexpr decltype(auto) CeresEngine::MPL::forTuple ( TFunction &&  function,
TTuple &&  tuple 
)
constexpr

◆ forTypes()

constexpr void CeresEngine::MPL::forTypes ( TFunction &&  mFunction)
constexprnoexcept

Execute a function for every type in a type list, wrapped in a Type<T>.

◆ size()

template<typename TTypeList >
constexpr auto CeresEngine::MPL::size ( )
constexprnoexcept

Size of a type list.

◆ tupleApply()

constexpr decltype(auto) CeresEngine::MPL::tupleApply ( TFunction &&  function,
TTuple &&  tuple 
)
constexpr

◆ tupleApplyImpl()

template<typename TFunction , typename TTuple , std::size_t... TIndices>
constexpr decltype(auto) CeresEngine::MPL::tupleApplyImpl ( TFunction &&  function,
TTuple &&  tuple,
std::index_sequence< TIndices... >   
)
constexpr

Variable Documentation

◆ All

template<template< typename > class TTypePred, typename... Ts>
constexpr bool CeresEngine::MPL::All = AllHelper<TTypePred, Ts...>::value
inlineconstexpr

◆ AllTypes

template<template< typename > class TMF, typename TL >
constexpr bool CeresEngine::MPL::AllTypes = Rename<BoundAll<TMF>::template type, TL>::value
inlineconstexpr

Unpack a type list into All.

◆ Contains

template<typename T , typename TTypeList >
constexpr bool CeresEngine::MPL::Contains = Count<T, TTypeList> > 0
inlineconstexpr

Alias for Count > 0.

◆ ContainsAll

constexpr bool CeresEngine::MPL::ContainsAll = ContainsAllHelper<TCheckTypeList, TTypeList>::value
inlineconstexpr

◆ Count

template<typename T , typename TTypeList >
constexpr size_t CeresEngine::MPL::Count = CountHelper<T, TTypeList>::value
inlineconstexpr

Interface type alias.

◆ IndexOf

template<typename T , typename TTypeList >
constexpr size_t CeresEngine::MPL::IndexOf = IndexOfHelper<T, TTypeList>::value
inlineconstexpr

Interface alias.

◆ Unique

template<typename... Ts>
constexpr bool CeresEngine::MPL::Unique = UniqueHelper<TypeList<Ts...>>::value
inlineconstexpr