aboutsummaryrefslogtreecommitdiff
path: root/pages/projects/type_as_value.md
diff options
context:
space:
mode:
Diffstat (limited to 'pages/projects/type_as_value.md')
-rw-r--r--pages/projects/type_as_value.md32
1 files changed, 20 insertions, 12 deletions
diff --git a/pages/projects/type_as_value.md b/pages/projects/type_as_value.md
index e8d2a21..839e691 100644
--- a/pages/projects/type_as_value.md
+++ b/pages/projects/type_as_value.md
@@ -2,9 +2,9 @@
…is a template metaprogramming library intended for compile time computation written in C++.
-As its name implies it follows the overall concept of viewing types as values and templates as functions manipulating those values. This view on template metaprogramming lends itself quite well to a _Scheme_ like way of doing functional programming.
+As its name implies it follows the overall concept of viewing types as values and templates as functions manipulating those values.
-_TypeAsValue_ is currently primarily a reimplementation of my previous attempt at this problem: [ConstList]. As detailed in the appropriate [blog article] the mixed approach between generic lambda expressions, `constexpr` marked functions and template metaprogramming doesn't offer sufficient flexibility which led me to approach compile time computation in a slightly different manner via this new library.
+This library is a expanded reimplementation of my previous attempt at this problem: [ConstList]. As detailed in the appropriate [blog article] the mixed approach between generic lambda expressions, `constexpr` marked functions and template metaprogramming doesn't offer sufficient flexibility which led me to approach compile time computation in a slightly different manner via this new library. As one might notice this boils down to using _Scheme_ as a metaphor for C++ template metaprogramming. In fact all [test cases] and examples are documented by representing their logic in _Scheme_.
Its MIT licensed source code is available on both [Github] and [cgit].
@@ -12,15 +12,19 @@ Its MIT licensed source code is available on both [Github] and [cgit].
* guaranteed evaluation during compile time
* basic math and logic operations
-* conditionals
-* `Cons` structure
-* `List` function as helper for `Cons` construction
+* 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`
+* list generators such as `Iota` and `MakeList`
* higher order list operation `Fold`
* higher order list operations such as `Map` and `Filter` expressed in terms of `Fold`
-* higher order list queries such as `Any`, `All` and `None`
-* list generators such as `Iota` and `ListTabulate`
+* higher order list queries such as `Find`, `Any`, `All` and `None`
+* higher order list generators such as `ListTabulate`
+* higher order list operations such as `TakeWhile`, `Partition` and `Sort`
+* basic partial function application support using `Apply`
* `static_assert` based test cases for all of the above
+* MIT license
## Usage example
@@ -29,15 +33,19 @@ Its MIT licensed source code is available on both [Github] and [cgit].
// 2
const std::size_t count = tav::Length<
- tav::Filter<
- tav::Odd,
- tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>::type
- >::type
->::type::value;
+ tav::Filter<
+ tav::Odd,
+ tav::List<tav::Int<1>, tav::Int<2>, tav::Int<3>>
+ >
+>::value;
~~~
{: .language-cpp}
+Additionally there is a implementation of the _Sieve of Eratosthenes_ available as a more extensive [example].
+
[ConstList]: /page/const_list/
[blog article]: /article/a_look_at_compile_time_computation_in_cpp/
[Github]: https://github.com/KnairdA/TypeAsValue/
[cgit]: http://code.kummerlaender.eu/TypeAsValue/
+[test cases]: https://github.com/KnairdA/TypeAsValue/blob/master/test.cc
+[example]: https://github.com/KnairdA/TypeAsValue/blob/master/example/prime/prime.cc