From 385c51950644121d7b6e04718374b1af63209ac7 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sat, 17 Jan 2015 17:28:02 +0100 Subject: Implemented `Length` function * as its name implies this function returns the length of a given _Cons_ structure * result type is `Size` which wraps `std::size_t` to match the `sizeof` operator --- src/conditional/if.h | 8 ++++---- src/list/list.h | 10 ++++++++++ src/type.h | 3 +++ 3 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/conditional/if.h b/src/conditional/if.h index 29aa6f0..b9568f6 100644 --- a/src/conditional/if.h +++ b/src/conditional/if.h @@ -7,13 +7,13 @@ namespace tav { template < bool Condition, - typename IfBranch, - typename ElseBranch + typename TrueBranch, + typename FalseBranch > using If = typename std::conditional< Condition, - IfBranch, - ElseBranch + TrueBranch, + FalseBranch >::type; } diff --git a/src/list/list.h b/src/list/list.h index edd46e8..f21d0fc 100644 --- a/src/list/list.h +++ b/src/list/list.h @@ -27,6 +27,16 @@ using Head = Car; template using Tail = Cdr; +template +struct Length { + typedef Add, typename Length>::type> type; +}; + +template <> +struct Length { + typedef Size<0> type; +}; + template < typename Primary, typename Secondary diff --git a/src/type.h b/src/type.h index 304bff4..74e0650 100644 --- a/src/type.h +++ b/src/type.h @@ -8,6 +8,9 @@ namespace tav { template using Int = typename std::integral_constant::type; +template +using Size = typename std::integral_constant::type; + template using Boolean = typename std::integral_constant::type; -- cgit v1.2.3