diff options
author | Adrian Kummerlaender | 2015-02-16 17:35:38 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2015-02-16 17:35:38 +0100 |
commit | f81cd736e00c28cf24412a4099bae08ff2e6c493 (patch) | |
tree | dc8a8ed7efef0f495adf5573b1fa5a43f6d08333 /src/list/generator/detail | |
parent | 5a9366307d23b220657629c494827def3544c490 (diff) | |
download | TypeAsValue-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')
-rw-r--r-- | src/list/generator/detail/generate_nested_structure.h | 39 |
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_ |