From 246cb31c1e20cdcc21a6a607de4b0095c71315d6 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Thu, 12 Feb 2015 14:32:33 +0100 Subject: 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` --- src/function/apply.h | 26 ++++++++++++++++++-------- src/function/detail/apply.h | 8 ++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) (limited to 'src/function') 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 class Function, typename... Arguments > -struct Apply : If< - (detail::count_placeholders::type::value > 2), - detail::apply_variadic, - typename If< - detail::count_placeholders::type::value == 2, - detail::apply_pair, +struct Apply : Cond< + Pair< + GreaterThan::type, Size<2>>, + detail::apply_variadic + >, + Pair< + IsEqualValue::type, Size<2>>, + detail::apply_pair + >, + Pair< + IsEqualValue::type, Size<1>>, detail::apply_single - >::type + >, + Pair< + Boolean, + detail::apply_none + > >::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 @@ -42,6 +42,14 @@ using count_placeholders = Count< typename List::type >; +template < + template class Function, + typename... Arguments +> +struct apply_none { + using type = Function; +}; + template < template class Function, typename... Arguments -- cgit v1.2.3