From 376c524f965674de8649267bad20937d6c0f9cd9 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Fri, 23 Jan 2015 20:53:17 +0100 Subject: Added _TypeAsValue_ project page * fixed grammar of _StaticXSLT_ page --- pages/projects/static_xslt.md | 2 +- pages/projects/type_as_value.md | 43 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 pages/projects/type_as_value.md diff --git a/pages/projects/static_xslt.md b/pages/projects/static_xslt.md index 3615244..8644a6b 100644 --- a/pages/projects/static_xslt.md +++ b/pages/projects/static_xslt.md @@ -2,7 +2,7 @@ …is the XSLT based static site generation framework especially developed to generate this website. -Its MIT licensed source code is available both [Github] and [cgit]. +Its MIT licensed source code is available on both [Github] and [cgit]. The implementation of a pure[^1] XSLT solution to the problem of static site generation required the development of a collection of external functions enabling access to the filesystem, external applications and other transformations from inside XSLT. These external functions are not part of this project and were developed separately as [InputXSLT]. Additionally a basic XSLT build system was developed to make _StaticXSLT_ usable for different projects which is available as [BuildXSLT]. diff --git a/pages/projects/type_as_value.md b/pages/projects/type_as_value.md new file mode 100644 index 0000000..e8d2a21 --- /dev/null +++ b/pages/projects/type_as_value.md @@ -0,0 +1,43 @@ +# TypeAsValue + +…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. + +_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. + +Its MIT licensed source code is available on both [Github] and [cgit]. + +## Current features + +* guaranteed evaluation during compile time +* basic math and logic operations +* conditionals +* `Cons` structure +* `List` function as helper for `Cons` construction +* basic list operators such as `Nth`, `Length`, `Take` and `Append` +* 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` +* `static_assert` based test cases for all of the above + +## Usage example + +~~~ +// λ (length (filter odd? (list 1 2 3))) +// 2 + +const std::size_t count = tav::Length< + tav::Filter< + tav::Odd, + tav::List, tav::Int<2>, tav::Int<3>>::type + >::type +>::type::value; +~~~ +{: .language-cpp} + +[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/ -- cgit v1.2.3