diff options
author | Adrian Kummerlaender | 2015-02-12 14:32:33 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2015-02-12 14:32:33 +0100 |
commit | 246cb31c1e20cdcc21a6a607de4b0095c71315d6 (patch) | |
tree | 0301c23d9c09b0a578413019a2d27f75cf69a374 /src/function | |
parent | 4bb200de716891ed6c9fc182311c02685c8bdfd4 (diff) | |
download | TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.tar TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.tar.gz TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.tar.bz2 TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.tar.lz TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.tar.xz TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.tar.zst TypeAsValue-246cb31c1e20cdcc21a6a607de4b0095c71315d6.zip |
Implemented `Cond` conditional
* returns the `CDR` of the first true `CAR` in a given list of pairs
* reimplemented `Apply` base class selection in terms of `Cond`
Diffstat (limited to 'src/function')
-rw-r--r-- | src/function/apply.h | 26 | ||||
-rw-r--r-- | src/function/detail/apply.h | 8 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/function/apply.h b/src/function/apply.h index 21364a8..5a2105c 100644 --- a/src/function/apply.h +++ b/src/function/apply.h @@ -1,7 +1,8 @@ #ifndef TYPEASVALUE_SRC_FUNCTION_APPLY_H_ #define TYPEASVALUE_SRC_FUNCTION_APPLY_H_ -#include "conditional/if.h" +#include "operation/math.h" +#include "conditional/cond.h" #include "detail/apply.h" @@ -16,14 +17,23 @@ template < template<typename...> class Function, typename... Arguments > -struct Apply : If< - (detail::count_placeholders<Arguments...>::type::value > 2), - detail::apply_variadic<Function, Arguments...>, - typename If< - detail::count_placeholders<Arguments...>::type::value == 2, - detail::apply_pair<Function, Arguments...>, +struct Apply : Cond< + Pair< + GreaterThan<typename detail::count_placeholders<Arguments...>::type, Size<2>>, + detail::apply_variadic<Function, Arguments...> + >, + Pair< + IsEqualValue<typename detail::count_placeholders<Arguments...>::type, Size<2>>, + detail::apply_pair<Function, Arguments...> + >, + Pair< + IsEqualValue<typename detail::count_placeholders<Arguments...>::type, Size<1>>, detail::apply_single<Function, Arguments...> - >::type + >, + Pair< + Boolean<true>, + detail::apply_none<Function, Arguments...> + > >::type { }; } diff --git a/src/function/detail/apply.h b/src/function/detail/apply.h index bf60be1..d9f058a 100644 --- a/src/function/detail/apply.h +++ b/src/function/detail/apply.h @@ -46,6 +46,14 @@ template < template<typename...> class Function, typename... Arguments > +struct apply_none { + using type = Function<Arguments...>; +}; + +template < + template<typename...> class Function, + typename... Arguments +> struct apply_variadic { template <typename... Partials> using type = Function< |