aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-01-17 17:28:02 +0100
committerAdrian Kummerlaender2015-01-17 17:28:02 +0100
commit385c51950644121d7b6e04718374b1af63209ac7 (patch)
tree4d386aadebbb4b1e28ac835f4e5e6736c05ed5dd /src
parentd975c2365730644a7eb15b88e02ec0e92b1fe7b1 (diff)
downloadTypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.tar
TypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.tar.gz
TypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.tar.bz2
TypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.tar.lz
TypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.tar.xz
TypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.tar.zst
TypeAsValue-385c51950644121d7b6e04718374b1af63209ac7.zip
Implemented `Length` function
* as its name implies this function returns the length of a given _Cons_ structure * result type is `Size<Length>` which wraps `std::size_t` to match the `sizeof` operator
Diffstat (limited to 'src')
-rw-r--r--src/conditional/if.h8
-rw-r--r--src/list/list.h10
-rw-r--r--src/type.h3
3 files changed, 17 insertions, 4 deletions
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<Cons>;
template <typename Cons>
using Tail = Cdr<Cons>;
+template <typename Cons>
+struct Length {
+ typedef Add<Size<1>, typename Length<Cdr<Cons>>::type> type;
+};
+
+template <>
+struct Length<void> {
+ 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 <int Value>
using Int = typename std::integral_constant<int, Value>::type;
+template <std::size_t Value>
+using Size = typename std::integral_constant<std::size_t, Value>::type;
+
template <bool Value>
using Boolean = typename std::integral_constant<bool, Value>::type;