Honeycomb
0.1
Component-Model Framework
|
Meta-programming and compile-time util. More...
Classes | |
struct | conditional_int |
Variant of std::conditional for integers, stores result in value More... | |
struct | conditional_int< true, t, f > |
struct | elemOf |
Get range element type. More... | |
struct | Funcptr |
struct | Funcptr< R(Args...)> |
Holds a function pointer so that a functor can be called non-virtually. The functor must inherit from FuncptrBase. More... | |
struct | Funcptr< void(Args...)> |
Specialization for void return type. More... | |
struct | FuncptrBase |
Inherit to enable non-virtual functor calling. More... | |
class | funcTraits |
Get function type traits. More... | |
struct | gcd |
Calc greatest common divisor of a and b. More... | |
struct | gcd< 0, b > |
struct | gcd< a, 0 > |
struct | identity |
Returns type T unchanged. More... | |
struct | is_base_of |
Version of std::is_base_of that removes reference qualifiers before testing. More... | |
class | isCallable |
Check if functor is callable with arguments. More... | |
class | isRange |
Check if type is a range or a reference to one. A range is a type where std::begin(range) is a valid call. More... | |
struct | isSpecializationOf |
Check if T is a specialization of Template. More... | |
struct | isSpecializationOf< Template< Param... >, Template > |
struct | iter_endOf |
Get range iterator end type. More... | |
struct | iterOf |
Get range iterator begin type. More... | |
struct | log2Floor |
Calc log base 2 of unsigned integer, rounded down to nearest integer. Returns -1 if x is zero. More... | |
struct | log2Floor< 0 > |
class | max |
Get maximum of all arguments. More... | |
struct | max< val > |
struct | max< val, vals... > |
class | min |
Get minimum of all arguments. More... | |
struct | min< val > |
struct | min< val, vals... > |
struct | NoCopy |
Inherit to declare that class is not copyable. More... | |
struct | tag |
Use to differentiate an overloaded function by type. Accepts dummy parameter default value: func(tag<0> = 0) More... | |
struct | True |
Always returns true. Can be used to force a clause to be type dependent. More... | |
struct | True_int |
Variant of True for integers. More... | |
struct | Void |
Special void type, use where void is intended but implicit members are required (default ctor, copyable, etc.) More... | |
Typedefs | |
template<class T , T val> | |
using | Value = std::integral_constant< T, val > |
Holds a constant integral value. More... | |
template<class T > | |
using | isTrue = Value< bool, std::is_same< T, std::true_type >::value > |
Check if type is std::true_type. More... | |
template<class T > | |
using | addRef = std::add_lvalue_reference< T > |
Add reference to type. More... | |
template<class T > | |
using | removeRef = std::remove_reference< T > |
Remove reference from type. More... | |
template<class T > | |
using | addPtr = std::add_pointer< T > |
Add pointer to type. More... | |
template<class T > | |
using | removePtr = std::remove_pointer< T > |
Remove pointer from type. More... | |
template<class T > | |
using | addConstRef = addRef< typename std::add_const< T >::type > |
Add top-level const qualifier and reference to type. Use std::decay to remove top-level const/ref. More... | |
template<class T > | |
using | isLref = Value< bool, std::is_lvalue_reference< T >::value > |
Check if type is an lvalue reference. More... | |
template<class T > | |
using | isRref = Value< bool, std::is_rvalue_reference< T >::value > |
Check if type is an rvalue reference. More... | |
template<class T > | |
using | isRef = Value< bool, std::is_reference< T >::value > |
Check if type is a reference. More... | |
template<class T > | |
using | isPtr = Value< bool, std::is_pointer< T >::value > |
Check if type is a pointer. More... | |
template<bool b, class T = void> | |
using | disable_if = std::enable_if<!b, T > |
Opposite of std::enable_if. More... | |
template<class T > | |
using | isTuple = isSpecializationOf< typename std::decay< T >::type, tuple > |
Check if type is a tuple or a reference to one. More... | |
template<int I, class... Ts> | |
using | typeAt = typename priv::typeAt< 0, I, Ts... >::type |
Get type at index of parameter pack. More... | |
template<class Match , class... Ts> | |
using | typeIndex = priv::typeIndex< 0, Match, Ts... > |
Get index of first matching type in parameter pack, returns -1 if not found. More... | |
template<szt... Ints> | |
using | idxseq = std::index_sequence< Ints... > |
Shorthand for std::index_sequence. More... | |
template<szt N> | |
using | make_idxseq = std::make_index_sequence< N > |
Shorthand for std::make_index_sequence. More... | |
template<class Array > | |
using | arraySize = Value< szt, sizeof(Array)/sizeof(typename Array::value_type)> |
Get size (number of elements) of a std::array. More... | |
template<class T > | |
using | isIterator = priv::isIterator< typename removeRef< T >::type > |
Check if type is an iterator or a reference to one. An iterator is a type that has member iterator_category or is a pointer. More... | |
template<int64 val> | |
using | abs = Value< int64,(val< 0)?-val:val > |
Get the absolute value of a number. More... | |
template<int64 val> | |
using | sign = Value< int64,(val< 0)?-1:1 > |
Get the sign of a number. More... | |
Functions | |
template<class... Args> | |
void | pass (Args...) |
Do nothing, can be used to evaluate an unpack expression. More... | |
template<class Func , class Tuple > | |
auto | applyTuple (Func &&f, Tuple &&t) |
Call a function with arguments from an unpacked tuple. ie. f(get<Indices>(t)...) More... | |
template<class T , class... Ts> | |
auto | make_array (T &&t, Ts &&...ts) -> array< T, sizeof...(Ts)+1 > |
Create an array of deduced type initialized with values. More... | |
void | exec () |
template<class Func , class... Funcs> | |
void | exec (Func &&f, Funcs &&...fs) |
Execute a list of functions. Use to expand parameter packs in arbitrary statements: exec([&]() { accum += get<Seq>(tuple); }...) . More... | |
template<int64 begin, int64 end, int64 step = 1, class Func , class... Args, typename std::enable_if< begin==end, int >::type = 0> | |
void | for_ (Func &&f, Args &&...args) |
Unroll a loop calling f(counter, args...) at each iteration. More... | |
template<class F , class Sig = typename funcTraits<typename removeRef<F>::type>::Sig> | |
Funcptr< Sig > | FuncptrCreate (F &&f) |
Convenient method to create a Funcptr from a functor that inherits from FuncptrBase. More... | |
template<class Result = void, class... Ts> | |
std::conditional< std::is_same< Result, void >::value, mt::typeAt< 0, Ts... >, Result >::type | valAt (int i, Ts &&...ts) |
Get value at index of parameter pack. All types must be convertible to Result , which defaults to the first type in Ts . More... | |
template<class Val , class... Ts> | |
int | valIndex (Val &&val, Ts &&...ts) |
Get index of first matching value in parameter pack, returns -1 if not found. More... | |
Meta-programming and compile-time util.
std::conditional<std::is_same<Result, void>::value, mt::typeAt<0, Ts...>, Result>::type honey::mt::valAt | ( | int | i, |
Ts &&... | ts | ||
) |
Get value at index of parameter pack. All types must be convertible to Result
, which defaults to the first type in Ts
.
int honey::mt::valIndex | ( | Val && | val, |
Ts &&... | ts | ||
) |
Get index of first matching value in parameter pack, returns -1 if not found.