From b1d5bf3aed57f38958fa6757b036d75d01217d18 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Thu, 19 Feb 2015 19:37:51 +0100 Subject: Updated _TypeAsValue_ and _ConstList_ project pages --- pages/projects/type_as_value.md | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'pages/projects/type_as_value.md') 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<2>, tav::Int<3>>::type - >::type ->::type::value; + tav::Filter< + tav::Odd, + tav::List, 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 -- cgit v1.2.3