aboutsummaryrefslogtreecommitdiff
path: root/src/function
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-02-12 14:32:33 +0100
committerAdrian Kummerlaender2015-02-12 14:32:33 +0100
commit246cb31c1e20cdcc21a6a607de4b0095c71315d6 (patch)
tree0301c23d9c09b0a578413019a2d27f75cf69a374 /src/function
parent4bb200de716891ed6c9fc182311c02685c8bdfd4 (diff)
downloadTypeAsValue-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.h26
-rw-r--r--src/function/detail/apply.h8
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<