From 34530d8532e22afe0026b956ae395ddc666351b3 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Thu, 26 Feb 2015 19:06:34 +0100 Subject: Enabled `Concatenate` to concatenate a variadic pack of lists * analogously to arbitrary list count concatenation in Scheme's `append` ** implemented for `Concatenate` instead as it fits better with the structure between `Append` and `Concatenate` --- src/conditional/cond.h | 12 +++++++----- src/list/operation/concatenate.h | 13 ++++++++++--- src/list/operation/higher/sort.h | 8 +++----- 3 files changed, 20 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/conditional/cond.h b/src/conditional/cond.h index ca5e46d..4def611 100644 --- a/src/conditional/cond.h +++ b/src/conditional/cond.h @@ -9,12 +9,14 @@ namespace tav { namespace detail { -template -using cond_predicate = IsTrue>; - template -struct select_cond_branch { - using type = Eval>; +class select_cond_branch { + private: + template + using predicate = IsTrue>; + + public: + using type = Eval>; static_assert( IsPair::value, diff --git a/src/list/operation/concatenate.h b/src/list/operation/concatenate.h index a5cbaa6..cf680c1 100644 --- a/src/list/operation/concatenate.h +++ b/src/list/operation/concatenate.h @@ -2,16 +2,23 @@ #define TYPEASVALUE_SRC_LIST_OPERATION_CONCATENATE_H_ #include "append.h" -#include "higher/remove.h" #include "higher/fold.h" +#include "conditional/if.h" namespace tav { -template +template < + typename Head, + typename... Tail +> using Concatenate = Fold< Append, void, - ListOfLists + If< + Boolean, + Head, + List + > >; } diff --git a/src/list/operation/higher/sort.h b/src/list/operation/higher/sort.h index 925ab89..51317fa 100644 --- a/src/list/operation/higher/sort.h +++ b/src/list/operation/higher/sort.h @@ -29,11 +29,9 @@ class quick_sort { public: using type = Concatenate< - List< - Eval>, - List, - Eval> - > + Eval>, + List, + Eval> >; }; -- cgit v1.2.3