aboutsummaryrefslogtreecommitdiff
path: root/src/list/generator/detail/generate_nested_structure.h
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-02-16 17:35:38 +0100
committerAdrian Kummerlaender2015-02-16 17:35:38 +0100
commitf81cd736e00c28cf24412a4099bae08ff2e6c493 (patch)
treedc8a8ed7efef0f495adf5573b1fa5a43f6d08333 /src/list/generator/detail/generate_nested_structure.h
parent5a9366307d23b220657629c494827def3544c490 (diff)
downloadTypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.tar
TypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.tar.gz
TypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.tar.bz2
TypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.tar.lz
TypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.tar.xz
TypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.tar.zst
TypeAsValue-f81cd736e00c28cf24412a4099bae08ff2e6c493.zip
Unified `Iota` and `MakeList` using nested structure generator
* `detail::generate_nested_structure` offers a higher order nested structure constructor for procedural list generation * renamed `Fold` implementation details
Diffstat (limited to 'src/list/generator/detail/generate_nested_structure.h')
-rw-r--r--src/list/generator/detail/generate_nested_structure.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/list/generator/detail/generate_nested_structure.h b/src/list/generator/detail/generate_nested_structure.h
new file mode 100644
index 0000000..84db78d
--- /dev/null
+++ b/src/list/generator/detail/generate_nested_structure.h
@@ -0,0 +1,39 @@
+#ifndef TYPEASVALUE_SRC_LIST_GENERATOR_DETAIL_GENERATE_NESTED_STRUCTURE_H_
+#define TYPEASVALUE_SRC_LIST_GENERATOR_DETAIL_GENERATE_NESTED_STRUCTURE_H_
+
+namespace tav {
+
+namespace detail {
+
+template <
+ template <typename, typename> class Structure,
+ template <typename> class Generator,
+ typename Initial,
+ typename Count
+>
+struct generate_nested_structure {
+ typedef Structure<
+ Initial,
+ Eval<generate_nested_structure<
+ Structure,
+ Generator,
+ Generator<Initial>,
+ Substract<Count, Size<1>>
+ >>
+ > type;
+};
+
+template <
+ template <typename, typename> class Structure,
+ template <typename> class Generator,
+ typename Initial
+>
+struct generate_nested_structure<Structure, Generator, Initial, Size<0>> {
+ typedef void type;
+};
+
+}
+
+}
+
+#endif // TYPEASVALUE_SRC_LIST_GENERATOR_DETAIL_GENERATE_NESTED_STRUCTURE_H_