From a07999f7436802f15fc21bebd083006c9e681638 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Thu, 19 Feb 2015 19:18:48 +0100 Subject: Introduced `Branch` and `Else` pair aliases for usage in `Cond` * pure _syntax sugar_ to improve readability of `Cond` conditionals --- README.md | 2 +- src/conditional/cond.h | 9 +++++++++ src/function/apply.h | 9 ++++----- test.cc | 14 +++++++------- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index ba07515..92a1c35 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ This library is a expanded reimplementation of my previous attempt at this probl * guaranteed evaluation during compile time * basic math and logic operations -* conditionals +* conditionals such as `If` and `Cond` * `Cons` constructor for `Pair` type * `List` function as helper for `Pair` based list construction * basic list operators such as `Nth`, `Length`, `Take` and `Append` diff --git a/src/conditional/cond.h b/src/conditional/cond.h index c543449..5f8014f 100644 --- a/src/conditional/cond.h +++ b/src/conditional/cond.h @@ -19,6 +19,15 @@ using Cond = Cdr >>; +template < + typename Condition, + typename Result +> +using Branch = Pair; + +template +using Else = Branch, Result>; + } #endif // TYPEASVALUE_SRC_CONDITIONAL_COND_H_ diff --git a/src/function/apply.h b/src/function/apply.h index 591fa8a..553ae7f 100644 --- a/src/function/apply.h +++ b/src/function/apply.h @@ -18,20 +18,19 @@ template < typename... Arguments > struct Apply : Cond< - Pair< + Branch< GreaterThan, Size<2>>, detail::apply_variadic >, - Pair< + Branch< IsEqualValue, Size<2>>, detail::apply_pair >, - Pair< + Branch< IsEqualValue, Size<1>>, detail::apply_single >, - Pair< - Boolean, + Else< detail::apply_none > > { }; diff --git a/test.cc b/test.cc index 5742fb2..7a2e963 100644 --- a/test.cc +++ b/test.cc @@ -239,9 +239,9 @@ static_assert( std::is_same< tav::Int<2>, tav::Cond< - tav::Pair, tav::Int<2>>, tav::Int<1>>, - tav::Pair, tav::Int<2>>, tav::Int<2>>, - tav::Pair, tav::Int<2>>, tav::Int<3>> + tav::Branch, tav::Int<2>>, tav::Int<1>>, + tav::Branch, tav::Int<2>>, tav::Int<2>>, + tav::Branch, tav::Int<2>>, tav::Int<3>> > >::value, "(cond ((= 1 2) 1) ((= 2 2) 2) ((= 3 2) 3)) != 2" @@ -251,10 +251,10 @@ static_assert( std::is_same< tav::Int<-1>, tav::Cond< - tav::Pair, tav::Int<2>>, tav::Int< 1>>, - tav::Pair, tav::Int<3>>, tav::Int< 2>>, - tav::Pair, tav::Int<4>>, tav::Int< 3>>, - tav::Pair, tav::Int<-1>> + tav::Branch, tav::Int<2>>, tav::Int< 1>>, + tav::Branch, tav::Int<3>>, tav::Int< 2>>, + tav::Branch, tav::Int<4>>, tav::Int< 3>>, + tav::Else> > >::value, "(cond ((= 1 2) 1) ((= 2 3) 2) ((= 3 4) 3) (else -1)) != -1" -- cgit v1.2.3