aboutsummaryrefslogtreecommitdiff
path: root/source/00_content/pages/projects/type_as_value.md
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-01-23 20:53:17 +0100
committerAdrian Kummerlaender2015-01-23 20:53:17 +0100
commitc79be7a3c697399c2aa8994b214dda26a1bd9c19 (patch)
treeaac1d1ea1222b6014838bb1e64a2bae178107070 /source/00_content/pages/projects/type_as_value.md
parent810a9c1549f978aa14dd091d80def81aa16137d4 (diff)
downloadblog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.tar
blog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.tar.gz
blog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.tar.bz2
blog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.tar.lz
blog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.tar.xz
blog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.tar.zst
blog.kummerlaender.eu-c79be7a3c697399c2aa8994b214dda26a1bd9c19.zip
Added _TypeAsValue_ project page
* fixed grammar of _StaticXSLT_ page
Diffstat (limited to 'source/00_content/pages/projects/type_as_value.md')
-rw-r--r--source/00_content/pages/projects/type_as_value.md43
1 files changed, 43 insertions, 0 deletions
diff --git a/source/00_content/pages/projects/type_as_value.md b/source/00_content/pages/projects/type_as_value.md
new file mode 100644
index 0000000..e8d2a21
--- /dev/null
+++ b/source/00_content/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<1>, 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/