diff --git a/sprout/algorithm/fixed/clamp_range_copy.hpp b/sprout/algorithm/fixed/clamp_range_copy.hpp index afe8d93c..3c49c71b 100644 --- a/sprout/algorithm/fixed/clamp_range_copy.hpp +++ b/sprout/algorithm/fixed/clamp_range_copy.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/copy.hpp b/sprout/algorithm/fixed/copy.hpp index d5492058..8acbe50e 100644 --- a/sprout/algorithm/fixed/copy.hpp +++ b/sprout/algorithm/fixed/copy.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/copy_backward.hpp b/sprout/algorithm/fixed/copy_backward.hpp index 48c0b4c7..cffb2694 100644 --- a/sprout/algorithm/fixed/copy_backward.hpp +++ b/sprout/algorithm/fixed/copy_backward.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/fill.hpp b/sprout/algorithm/fixed/fill.hpp index d3d8b55e..f6667434 100644 --- a/sprout/algorithm/fixed/fill.hpp +++ b/sprout/algorithm/fixed/fill.hpp @@ -2,7 +2,7 @@ #define SPROUT_ALGORITHM_FIXED_FILL_HPP #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/fill_n.hpp b/sprout/algorithm/fixed/fill_n.hpp index 8b9ae33b..1f32abe3 100644 --- a/sprout/algorithm/fixed/fill_n.hpp +++ b/sprout/algorithm/fixed/fill_n.hpp @@ -2,7 +2,7 @@ #define SPROUT_ALGORITHM_FIXED_FILL_N_HPP #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/replace_copy.hpp b/sprout/algorithm/fixed/replace_copy.hpp index 86611c49..7924b724 100644 --- a/sprout/algorithm/fixed/replace_copy.hpp +++ b/sprout/algorithm/fixed/replace_copy.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/replace_copy_if.hpp b/sprout/algorithm/fixed/replace_copy_if.hpp index 41c24b01..9c8f0cb3 100644 --- a/sprout/algorithm/fixed/replace_copy_if.hpp +++ b/sprout/algorithm/fixed/replace_copy_if.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/reverse_copy.hpp b/sprout/algorithm/fixed/reverse_copy.hpp index 2a877383..338d3211 100644 --- a/sprout/algorithm/fixed/reverse_copy.hpp +++ b/sprout/algorithm/fixed/reverse_copy.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/rotate_copy.hpp b/sprout/algorithm/fixed/rotate_copy.hpp index 4ca6257f..fcb71b11 100644 --- a/sprout/algorithm/fixed/rotate_copy.hpp +++ b/sprout/algorithm/fixed/rotate_copy.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/shuffle.hpp b/sprout/algorithm/fixed/shuffle.hpp index 8a923abe..421643ae 100644 --- a/sprout/algorithm/fixed/shuffle.hpp +++ b/sprout/algorithm/fixed/shuffle.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/shuffle_result.hpp b/sprout/algorithm/fixed/shuffle_result.hpp index 0fa334b8..d79ce00e 100644 --- a/sprout/algorithm/fixed/shuffle_result.hpp +++ b/sprout/algorithm/fixed/shuffle_result.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/swap_element_copy.hpp b/sprout/algorithm/fixed/swap_element_copy.hpp index 606fec5c..e1ed53ed 100644 --- a/sprout/algorithm/fixed/swap_element_copy.hpp +++ b/sprout/algorithm/fixed/swap_element_copy.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/fixed/transform.hpp b/sprout/algorithm/fixed/transform.hpp index caaabb45..1b04598c 100644 --- a/sprout/algorithm/fixed/transform.hpp +++ b/sprout/algorithm/fixed/transform.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/algorithm/string/join.hpp b/sprout/algorithm/string/join.hpp index b0350cf1..8ad1e491 100644 --- a/sprout/algorithm/string/join.hpp +++ b/sprout/algorithm/string/join.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/array/array.hpp b/sprout/array/array.hpp index 96ba8a79..232ddf48 100644 --- a/sprout/array/array.hpp +++ b/sprout/array/array.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/array/make_array.hpp b/sprout/array/make_array.hpp index d5208ecd..4a10636f 100644 --- a/sprout/array/make_array.hpp +++ b/sprout/array/make_array.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/breed/detail/deduce_domain.hpp b/sprout/breed/detail/deduce_domain.hpp index e80afc4c..f10b9a38 100644 --- a/sprout/breed/detail/deduce_domain.hpp +++ b/sprout/breed/detail/deduce_domain.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include diff --git a/sprout/breed/generate.hpp b/sprout/breed/generate.hpp index c8237cfd..48b246c3 100644 --- a/sprout/breed/generate.hpp +++ b/sprout/breed/generate.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/breed/transform/pass_through.hpp b/sprout/breed/transform/pass_through.hpp index ce6ad919..7e8ee58a 100644 --- a/sprout/breed/transform/pass_through.hpp +++ b/sprout/breed/transform/pass_through.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/container/indexes.hpp b/sprout/container/indexes.hpp index 93c181d6..313a5863 100644 --- a/sprout/container/indexes.hpp +++ b/sprout/container/indexes.hpp @@ -2,8 +2,8 @@ #define SPROUT_CONTAINER_INDEXES_HPP #include -#include -#include +#include +#include #include namespace sprout { @@ -13,7 +13,7 @@ namespace sprout { // template struct container_indexes - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< sprout::make_index_tuple::static_size> > {}; diff --git a/sprout/darkroom/lights/light_list.hpp b/sprout/darkroom/lights/light_list.hpp index 2bfc9fe1..56650be1 100644 --- a/sprout/darkroom/lights/light_list.hpp +++ b/sprout/darkroom/lights/light_list.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/darkroom/pixels/generate.hpp b/sprout/darkroom/pixels/generate.hpp index 973409bd..41cf6dd0 100644 --- a/sprout/darkroom/pixels/generate.hpp +++ b/sprout/darkroom/pixels/generate.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/functional/bind/bind.hpp b/sprout/functional/bind/bind.hpp index 069c8416..038c1f4f 100644 --- a/sprout/functional/bind/bind.hpp +++ b/sprout/functional/bind/bind.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/index_tuple.hpp b/sprout/index_tuple.hpp index f62b3236..34329b66 100644 --- a/sprout/index_tuple.hpp +++ b/sprout/index_tuple.hpp @@ -2,15 +2,9 @@ #define SPROUT_INDEX_TUPLE_HPP #include -#include -#include +#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include #endif // #ifndef SPROUT_INDEX_TUPLE_HPP diff --git a/sprout/index_tuple/class.hpp b/sprout/index_tuple/class.hpp new file mode 100644 index 00000000..b846f6a2 --- /dev/null +++ b/sprout/index_tuple/class.hpp @@ -0,0 +1,8 @@ +#ifndef SPROUT_INDEX_TUPLE_CLASS_HPP +#define SPROUT_INDEX_TUPLE_CLASS_HPP + +#include +#include +#include + +#endif // #ifndef SPROUT_INDEX_TUPLE_CLASS_HPP diff --git a/sprout/index_tuple/detail/make_indexes_helper.hpp b/sprout/index_tuple/detail/make_indexes_helper.hpp deleted file mode 100644 index 37c48f9d..00000000 --- a/sprout/index_tuple/detail/make_indexes_helper.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef SPROUT_INDEX_TUPLE_DETAIL_MAKE_INDEXES_HELPER_HPP -#define SPROUT_INDEX_TUPLE_DETAIL_MAKE_INDEXES_HELPER_HPP - -#include - -namespace sprout { - namespace detail { - template - struct make_indexes_helper - : public IndexTupleType::type - { - public: - typedef typename IndexTupleType::type type; - public: - static SPROUT_CONSTEXPR type make() { - return type(); - } - }; - } // namespace detail -} // namespace sprout - -#endif // #ifndef SPROUT_INDEX_TUPLE_DETAIL_MAKE_INDEXES_HELPER_HPP diff --git a/sprout/index_tuple/enable_make_indexes.hpp b/sprout/index_tuple/enable_make_indexes.hpp new file mode 100644 index 00000000..d5ce36b1 --- /dev/null +++ b/sprout/index_tuple/enable_make_indexes.hpp @@ -0,0 +1,23 @@ +#ifndef SPROUT_INDEX_TUPLE_ENABLE_MAKE_INDEXES_HPP +#define SPROUT_INDEX_TUPLE_ENABLE_MAKE_INDEXES_HPP + +#include + +namespace sprout { + // + // enable_make_indexes + // + template + struct enable_make_indexes + : public IndexTupleType::type + { + public: + typedef typename IndexTupleType::type type; + public: + static SPROUT_CONSTEXPR type make() { + return type(); + } + }; +} // namespace sprout + +#endif // #ifndef SPROUT_INDEX_TUPLE_ENABLE_MAKE_INDEXES_HPP diff --git a/sprout/index_tuple/index_n.hpp b/sprout/index_tuple/index_n.hpp index 19eea94d..ea8fc2fa 100644 --- a/sprout/index_tuple/index_n.hpp +++ b/sprout/index_tuple/index_n.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace sprout { // @@ -12,9 +12,9 @@ namespace sprout { // template struct index_n - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< typename sprout::integer_n::type - ::template transfer >::type + ::template transfer > > {}; // @@ -22,9 +22,9 @@ namespace sprout { // template struct uindex_n - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< typename sprout::integer_n::type - ::template transfer >::type + ::template transfer > > {}; } // namespace sprout diff --git a/sprout/index_tuple/index_range.hpp b/sprout/index_tuple/index_range.hpp index 21f11640..2e5650ff 100644 --- a/sprout/index_tuple/index_range.hpp +++ b/sprout/index_tuple/index_range.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace sprout { // @@ -15,9 +15,9 @@ namespace sprout { typename std::make_signed::type Step = sprout::detail::integer_range_default_step::value > struct index_range - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< typename sprout::integer_range::type - ::template transfer >::type + ::template transfer > > {}; // @@ -28,9 +28,9 @@ namespace sprout { typename std::make_signed::type Step = sprout::detail::integer_range_default_step::value > struct uindex_range - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< typename sprout::integer_range::type - ::template transfer >::type + ::template transfer > > {}; } // namespace sprout diff --git a/sprout/index_tuple/integer_n.hpp b/sprout/index_tuple/integer_n.hpp index 43a5a91d..783af0ca 100644 --- a/sprout/index_tuple/integer_n.hpp +++ b/sprout/index_tuple/integer_n.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include namespace sprout { // @@ -64,7 +64,7 @@ namespace sprout { } // namespace detail template struct integer_n - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< sprout::detail::integer_n_impl > {}; diff --git a/sprout/index_tuple/integer_range.hpp b/sprout/index_tuple/integer_range.hpp index 7e3238b5..3e6aaddc 100644 --- a/sprout/index_tuple/integer_range.hpp +++ b/sprout/index_tuple/integer_range.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace sprout { namespace detail { @@ -86,7 +86,7 @@ namespace sprout { typename std::make_signed::type Step = sprout::detail::integer_range_default_step::value > struct integer_range - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< sprout::detail::integer_range > { diff --git a/sprout/index_tuple/make_index_tuple.hpp b/sprout/index_tuple/make_index_tuple.hpp index 056af9c8..28e0d4a2 100644 --- a/sprout/index_tuple/make_index_tuple.hpp +++ b/sprout/index_tuple/make_index_tuple.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include namespace sprout { // @@ -13,7 +13,7 @@ namespace sprout { // template struct make_index_tuple - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< typename sprout::make_integer_seq::type ::template transfer >::type > @@ -23,7 +23,7 @@ namespace sprout { // template struct make_uindex_tuple - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< typename sprout::make_integer_seq::type ::template transfer >::type > diff --git a/sprout/index_tuple/make_integer_seq.hpp b/sprout/index_tuple/make_integer_seq.hpp index 2d3519eb..cb1cbd88 100644 --- a/sprout/index_tuple/make_integer_seq.hpp +++ b/sprout/index_tuple/make_integer_seq.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include namespace sprout { // @@ -11,7 +11,7 @@ namespace sprout { // template struct make_integer_seq - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< sprout::integer_range > {}; diff --git a/sprout/index_tuple/metafunction.hpp b/sprout/index_tuple/metafunction.hpp new file mode 100644 index 00000000..02eaaea0 --- /dev/null +++ b/sprout/index_tuple/metafunction.hpp @@ -0,0 +1,12 @@ +#ifndef SPROUT_INDEX_TUPLE_METAFUNCTION_HPP +#define SPROUT_INDEX_TUPLE_METAFUNCTION_HPP + +#include +#include +#include +#include +#include +#include +#include + +#endif // #ifndef SPROUT_INDEX_TUPLE_METAFUNCTION_HPP diff --git a/sprout/index_tuple/tuple.hpp b/sprout/index_tuple/tuple.hpp index ca6c2ae4..b3117956 100644 --- a/sprout/index_tuple/tuple.hpp +++ b/sprout/index_tuple/tuple.hpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace std { #if defined(__clang__) @@ -27,7 +28,7 @@ namespace std { struct tuple_element > { static_assert(I < sizeof...(Is), "tuple_element<>: index out of range"); public: - typedef T type; + typedef typename sprout::tppack_c_at::type type; }; // @@ -64,4 +65,39 @@ namespace std { #endif } // namespace std +namespace sprout { + // + // tuple_get + // + template + inline SPROUT_CONSTEXPR typename std::tuple_element >::type + tuple_get(sprout::integer_seq) SPROUT_NOEXCEPT { + static_assert(I < sizeof...(Is), "tuple_get: index out of range"); + typedef typename std::tuple_element >::type type; + return type(); + } + + // + // tuple_get + // + template + inline SPROUT_CONSTEXPR typename std::tuple_element >::type + tuple_get(sprout::index_tuple) SPROUT_NOEXCEPT { + static_assert(I < sizeof...(Indexes), "tuple_get: index out of range"); + typedef typename std::tuple_element >::type type; + return type(); + } + + // + // tuple_get + // + template + inline SPROUT_CONSTEXPR typename std::tuple_element >::type + tuple_get(sprout::uindex_tuple) SPROUT_NOEXCEPT { + static_assert(I < sizeof...(Indexes), "tuple_get: index out of range"); + typedef typename std::tuple_element >::type type; + return type(); + } +} // namespace sprout + #endif // #ifndef SPROUT_INDEX_TUPLE_TUPLE_HPP diff --git a/sprout/index_tuple/utility.hpp b/sprout/index_tuple/utility.hpp new file mode 100644 index 00000000..26165edd --- /dev/null +++ b/sprout/index_tuple/utility.hpp @@ -0,0 +1,8 @@ +#ifndef SPROUT_INDEX_TUPLE_UTILITY_HPP +#define SPROUT_INDEX_TUPLE_UTILITY_HPP + +#include +#include +#include + +#endif // #ifndef SPROUT_INDEX_TUPLE_UTILITY_HPP diff --git a/sprout/io.hpp b/sprout/io.hpp index 1f2b6fd7..10362c24 100644 --- a/sprout/io.hpp +++ b/sprout/io.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/amplitude_spectrum.hpp b/sprout/numeric/dft/fixed/amplitude_spectrum.hpp index 2cebc8bc..39201ce0 100644 --- a/sprout/numeric/dft/fixed/amplitude_spectrum.hpp +++ b/sprout/numeric/dft/fixed/amplitude_spectrum.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/dft.hpp b/sprout/numeric/dft/fixed/dft.hpp index 91cdeec0..935a5e8b 100644 --- a/sprout/numeric/dft/fixed/dft.hpp +++ b/sprout/numeric/dft/fixed/dft.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/idft.hpp b/sprout/numeric/dft/fixed/idft.hpp index c66555a3..b5d14c8d 100644 --- a/sprout/numeric/dft/fixed/idft.hpp +++ b/sprout/numeric/dft/fixed/idft.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/phase_spectrum.hpp b/sprout/numeric/dft/fixed/phase_spectrum.hpp index 6016a181..a4012f5c 100644 --- a/sprout/numeric/dft/fixed/phase_spectrum.hpp +++ b/sprout/numeric/dft/fixed/phase_spectrum.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/sawtooth.hpp b/sprout/numeric/dft/fixed/sawtooth.hpp index 4ce0112e..bf3c7ef7 100644 --- a/sprout/numeric/dft/fixed/sawtooth.hpp +++ b/sprout/numeric/dft/fixed/sawtooth.hpp @@ -2,7 +2,7 @@ #define SPROUT_NUMERIC_DFT_FIXED_SAWTOOTH_HPP #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/sinusoid.hpp b/sprout/numeric/dft/fixed/sinusoid.hpp index 92ab2901..d3112880 100644 --- a/sprout/numeric/dft/fixed/sinusoid.hpp +++ b/sprout/numeric/dft/fixed/sinusoid.hpp @@ -2,7 +2,7 @@ #define SPROUT_NUMERIC_DFT_FIXED_SINUSOID_HPP #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/square.hpp b/sprout/numeric/dft/fixed/square.hpp index a52b4ec8..db78497d 100644 --- a/sprout/numeric/dft/fixed/square.hpp +++ b/sprout/numeric/dft/fixed/square.hpp @@ -2,7 +2,7 @@ #define SPROUT_NUMERIC_DFT_FIXED_SQUARE_HPP #include -#include +#include #include #include #include diff --git a/sprout/numeric/dft/fixed/triangle.hpp b/sprout/numeric/dft/fixed/triangle.hpp index c9a5e050..b4e0bd25 100644 --- a/sprout/numeric/dft/fixed/triangle.hpp +++ b/sprout/numeric/dft/fixed/triangle.hpp @@ -2,7 +2,7 @@ #define SPROUT_NUMERIC_DFT_FIXED_TRINAGLE_HPP #include -#include +#include #include #include #include diff --git a/sprout/numeric/fft/fixed/bitrev_table.hpp b/sprout/numeric/fft/fixed/bitrev_table.hpp index e75ead6d..d26592fc 100644 --- a/sprout/numeric/fft/fixed/bitrev_table.hpp +++ b/sprout/numeric/fft/fixed/bitrev_table.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/numeric/fixed/iota.hpp b/sprout/numeric/fixed/iota.hpp index bf0ab97d..4c850be9 100644 --- a/sprout/numeric/fixed/iota.hpp +++ b/sprout/numeric/fixed/iota.hpp @@ -2,7 +2,7 @@ #define SPROUT_NUMERIC_FIXED_IOTA_HPP #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/append.hpp b/sprout/operation/fixed/append.hpp index fec5b797..a2dfae65 100644 --- a/sprout/operation/fixed/append.hpp +++ b/sprout/operation/fixed/append.hpp @@ -2,7 +2,7 @@ #define SPROUT_OPERATION_FIXED_APPEND_HPP #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/append_back.hpp b/sprout/operation/fixed/append_back.hpp index 65192567..5c7e643b 100644 --- a/sprout/operation/fixed/append_back.hpp +++ b/sprout/operation/fixed/append_back.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/append_front.hpp b/sprout/operation/fixed/append_front.hpp index 98517766..df7b237d 100644 --- a/sprout/operation/fixed/append_front.hpp +++ b/sprout/operation/fixed/append_front.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/erase.hpp b/sprout/operation/fixed/erase.hpp index 0c105760..a66805b1 100644 --- a/sprout/operation/fixed/erase.hpp +++ b/sprout/operation/fixed/erase.hpp @@ -2,7 +2,7 @@ #define SPROUT_OPERATION_FIXED_ERASE_HPP #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/erase_n.hpp b/sprout/operation/fixed/erase_n.hpp index 4dd0eb64..49b43ee6 100644 --- a/sprout/operation/fixed/erase_n.hpp +++ b/sprout/operation/fixed/erase_n.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/insert.hpp b/sprout/operation/fixed/insert.hpp index ca6b114d..4545c63c 100644 --- a/sprout/operation/fixed/insert.hpp +++ b/sprout/operation/fixed/insert.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/insert_n.hpp b/sprout/operation/fixed/insert_n.hpp index 6ea6e4aa..d62e0a08 100644 --- a/sprout/operation/fixed/insert_n.hpp +++ b/sprout/operation/fixed/insert_n.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/pop_back.hpp b/sprout/operation/fixed/pop_back.hpp index dda3ef02..5642841b 100644 --- a/sprout/operation/fixed/pop_back.hpp +++ b/sprout/operation/fixed/pop_back.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/pop_back_n.hpp b/sprout/operation/fixed/pop_back_n.hpp index 98cc0458..9f5be852 100644 --- a/sprout/operation/fixed/pop_back_n.hpp +++ b/sprout/operation/fixed/pop_back_n.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/pop_front.hpp b/sprout/operation/fixed/pop_front.hpp index 25d24bab..639a79d0 100644 --- a/sprout/operation/fixed/pop_front.hpp +++ b/sprout/operation/fixed/pop_front.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/pop_front_n.hpp b/sprout/operation/fixed/pop_front_n.hpp index bee36742..e8d788f8 100644 --- a/sprout/operation/fixed/pop_front_n.hpp +++ b/sprout/operation/fixed/pop_front_n.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/push_back.hpp b/sprout/operation/fixed/push_back.hpp index 2cbaa0e4..ce1bd68d 100644 --- a/sprout/operation/fixed/push_back.hpp +++ b/sprout/operation/fixed/push_back.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/push_back_n.hpp b/sprout/operation/fixed/push_back_n.hpp index 26be9e77..c0e10c19 100644 --- a/sprout/operation/fixed/push_back_n.hpp +++ b/sprout/operation/fixed/push_back_n.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/push_front.hpp b/sprout/operation/fixed/push_front.hpp index 59f77eae..df40b360 100644 --- a/sprout/operation/fixed/push_front.hpp +++ b/sprout/operation/fixed/push_front.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/push_front_n.hpp b/sprout/operation/fixed/push_front_n.hpp index 8666a6fd..5cf3d1da 100644 --- a/sprout/operation/fixed/push_front_n.hpp +++ b/sprout/operation/fixed/push_front_n.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/realign.hpp b/sprout/operation/fixed/realign.hpp index 48f9cd6f..cc912891 100644 --- a/sprout/operation/fixed/realign.hpp +++ b/sprout/operation/fixed/realign.hpp @@ -2,7 +2,7 @@ #define SPROUT_OPERATION_FIXED_REALIGN_HPP #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/realign_to.hpp b/sprout/operation/fixed/realign_to.hpp index 6373d4b9..450622f5 100644 --- a/sprout/operation/fixed/realign_to.hpp +++ b/sprout/operation/fixed/realign_to.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/resize.hpp b/sprout/operation/fixed/resize.hpp index 149e5585..35651214 100644 --- a/sprout/operation/fixed/resize.hpp +++ b/sprout/operation/fixed/resize.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/resize_backward.hpp b/sprout/operation/fixed/resize_backward.hpp index 767c4380..b516af79 100644 --- a/sprout/operation/fixed/resize_backward.hpp +++ b/sprout/operation/fixed/resize_backward.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/operation/fixed/set.hpp b/sprout/operation/fixed/set.hpp index afa4df8f..90a1969b 100644 --- a/sprout/operation/fixed/set.hpp +++ b/sprout/operation/fixed/set.hpp @@ -2,7 +2,7 @@ #define SPROUT_OPERATION_FIXED_SET_HPP #include -#include +#include #include #include #include diff --git a/sprout/range/adaptor/piped.hpp b/sprout/range/adaptor/piped.hpp index 91ef8b69..9bff1a79 100644 --- a/sprout/range/adaptor/piped.hpp +++ b/sprout/range/adaptor/piped.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/string/concat.hpp b/sprout/string/concat.hpp index 1b2c64a7..281b1508 100644 --- a/sprout/string/concat.hpp +++ b/sprout/string/concat.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include diff --git a/sprout/string/float_to_string.hpp b/sprout/string/float_to_string.hpp index ecfbe461..52073d81 100644 --- a/sprout/string/float_to_string.hpp +++ b/sprout/string/float_to_string.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/string/int_to_string.hpp b/sprout/string/int_to_string.hpp index 23277615..48c30abd 100644 --- a/sprout/string/int_to_string.hpp +++ b/sprout/string/int_to_string.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/string/shrink.hpp b/sprout/string/shrink.hpp index 57cd9ddc..effc333e 100644 --- a/sprout/string/shrink.hpp +++ b/sprout/string/shrink.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/string/string.hpp b/sprout/string/string.hpp index 4daa13f5..244e526d 100644 --- a/sprout/string/string.hpp +++ b/sprout/string/string.hpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/sub_array/sub_array.hpp b/sprout/sub_array/sub_array.hpp index e702224f..c36b6304 100644 --- a/sprout/sub_array/sub_array.hpp +++ b/sprout/sub_array/sub_array.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/tuple/algorithm/copy.hpp b/sprout/tuple/algorithm/copy.hpp index 34d05fff..51b6450d 100644 --- a/sprout/tuple/algorithm/copy.hpp +++ b/sprout/tuple/algorithm/copy.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/tuple/fused.hpp b/sprout/tuple/fused.hpp index 8d2f7fe1..466b9443 100644 --- a/sprout/tuple/fused.hpp +++ b/sprout/tuple/fused.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/tuple/indexes.hpp b/sprout/tuple/indexes.hpp index 5648483d..fba325a1 100644 --- a/sprout/tuple/indexes.hpp +++ b/sprout/tuple/indexes.hpp @@ -2,8 +2,8 @@ #define SPROUT_TUPLE_INDEXES_HPP #include -#include -#include +#include +#include #include #include @@ -14,7 +14,7 @@ namespace sprout { // template struct tuple_indexes - : public sprout::detail::make_indexes_helper< + : public sprout::enable_make_indexes< sprout::make_index_tuple::value> > {}; diff --git a/sprout/tuple/operation/append_back.hpp b/sprout/tuple/operation/append_back.hpp index c72a8a09..398b4479 100644 --- a/sprout/tuple/operation/append_back.hpp +++ b/sprout/tuple/operation/append_back.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_OPERATION_APPEND_BACK_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/operation/append_front.hpp b/sprout/tuple/operation/append_front.hpp index 3e2bb140..10a6e167 100644 --- a/sprout/tuple/operation/append_front.hpp +++ b/sprout/tuple/operation/append_front.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_OPERATION_APPEND_FRONT_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/operation/pop_back.hpp b/sprout/tuple/operation/pop_back.hpp index 485f9d57..875eaa9d 100644 --- a/sprout/tuple/operation/pop_back.hpp +++ b/sprout/tuple/operation/pop_back.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_OPERATION_POP_BACK_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/operation/pop_front.hpp b/sprout/tuple/operation/pop_front.hpp index 7aa525b7..191c84e4 100644 --- a/sprout/tuple/operation/pop_front.hpp +++ b/sprout/tuple/operation/pop_front.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_OPERATION_POP_FRONT_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/operation/push_back.hpp b/sprout/tuple/operation/push_back.hpp index 9e450d4c..40f0e4ec 100644 --- a/sprout/tuple/operation/push_back.hpp +++ b/sprout/tuple/operation/push_back.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_OPERATION_PUSH_BACK_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/operation/push_front.hpp b/sprout/tuple/operation/push_front.hpp index 1478a197..1fba0e4e 100644 --- a/sprout/tuple/operation/push_front.hpp +++ b/sprout/tuple/operation/push_front.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_OPERATION_PUSH_FRONT_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/traits.hpp b/sprout/tuple/traits.hpp index 12283377..c6c47622 100644 --- a/sprout/tuple/traits.hpp +++ b/sprout/tuple/traits.hpp @@ -2,7 +2,7 @@ #define SPROUT_TUPLE_TRAITS_HPP #include -#include +#include #include #include #include diff --git a/sprout/tuple/tuple/hash.hpp b/sprout/tuple/tuple/hash.hpp index 32c54b00..4edc7bcd 100644 --- a/sprout/tuple/tuple/hash.hpp +++ b/sprout/tuple/tuple/hash.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/tuple/tuple/make_tuple.hpp b/sprout/tuple/tuple/make_tuple.hpp index 55817d1b..51ecf7e4 100644 --- a/sprout/tuple/tuple/make_tuple.hpp +++ b/sprout/tuple/tuple/make_tuple.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/tuple/tuple/tuple_decl.hpp b/sprout/tuple/tuple/tuple_decl.hpp index c4882e0d..ff802f4e 100644 --- a/sprout/tuple/tuple/tuple_decl.hpp +++ b/sprout/tuple/tuple/tuple_decl.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/type/integral_array.hpp b/sprout/type/integral_array.hpp index 5d78e797..5cdc24d2 100644 --- a/sprout/type/integral_array.hpp +++ b/sprout/type/integral_array.hpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace sprout { namespace types { @@ -49,4 +50,17 @@ namespace std { #endif } // namespace std +namespace sprout { + // + // tuple_get + // + template + inline SPROUT_CONSTEXPR typename std::tuple_element >::type + tuple_get(sprout::types::integral_array) SPROUT_NOEXCEPT { + static_assert(I < sizeof...(Values), "tuple_get: index out of range"); + typedef typename std::tuple_element >::type type; + return type(); + } +} // namespace sprout + #endif // #ifndef SPROUT_TYPE_INTEGRAL_ARRAY_HPP diff --git a/sprout/type/operation/append_back.hpp b/sprout/type/operation/append_back.hpp index 2ba30298..f813b568 100644 --- a/sprout/type/operation/append_back.hpp +++ b/sprout/type/operation/append_back.hpp @@ -2,7 +2,7 @@ #define SPROUT_TYPE_OPERATION_APPEND_BACK_HPP #include -#include +#include #include #include #include diff --git a/sprout/type/operation/append_front.hpp b/sprout/type/operation/append_front.hpp index ef2675b4..0694ec06 100644 --- a/sprout/type/operation/append_front.hpp +++ b/sprout/type/operation/append_front.hpp @@ -2,7 +2,7 @@ #define SPROUT_TYPE_OPERATION_APPEND_FRONT_HPP #include -#include +#include #include #include #include diff --git a/sprout/type/operation/pop_back.hpp b/sprout/type/operation/pop_back.hpp index 4894c65a..5daa2f7a 100644 --- a/sprout/type/operation/pop_back.hpp +++ b/sprout/type/operation/pop_back.hpp @@ -2,7 +2,7 @@ #define SPROUT_TYPE_OPERATION_POP_BACK_HPP #include -#include +#include #include #include diff --git a/sprout/type/operation/pop_front.hpp b/sprout/type/operation/pop_front.hpp index 976ccb46..32c49839 100644 --- a/sprout/type/operation/pop_front.hpp +++ b/sprout/type/operation/pop_front.hpp @@ -2,7 +2,7 @@ #define SPROUT_TYPE_OPERATION_POP_FRONT_HPP #include -#include +#include #include #include diff --git a/sprout/type/operation/push_back.hpp b/sprout/type/operation/push_back.hpp index 9e327a5a..21eafef7 100644 --- a/sprout/type/operation/push_back.hpp +++ b/sprout/type/operation/push_back.hpp @@ -2,7 +2,7 @@ #define SPROUT_TYPE_OPERATION_PUSH_BACK_HPP #include -#include +#include #include #include #include diff --git a/sprout/type/operation/push_front.hpp b/sprout/type/operation/push_front.hpp index a772b594..920540dd 100644 --- a/sprout/type/operation/push_front.hpp +++ b/sprout/type/operation/push_front.hpp @@ -2,7 +2,7 @@ #define SPROUT_TYPE_OPERATION_PUSH_FRONT_HPP #include -#include +#include #include #include #include diff --git a/sprout/type/string/to_string.hpp b/sprout/type/string/to_string.hpp index ca8fe324..194b7989 100644 --- a/sprout/type/string/to_string.hpp +++ b/sprout/type/string/to_string.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/type/string/to_string_constant.hpp b/sprout/type/string/to_string_constant.hpp index 9f504c56..aa127e75 100644 --- a/sprout/type/string/to_string_constant.hpp +++ b/sprout/type/string/to_string_constant.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/sprout/utility/pack.hpp b/sprout/utility/pack.hpp index aa2d5586..19dc84c5 100644 --- a/sprout/utility/pack.hpp +++ b/sprout/utility/pack.hpp @@ -12,25 +12,33 @@ namespace sprout { // tppack_at // namespace detail { - template + template struct tppack_at_impl_1 - : public sprout::detail::tppack_at_impl_1 + : public sprout::detail::tppack_at_impl_1 {}; template struct tppack_at_impl_1<0, Head, Tail...> { public: typedef Head type; }; - template + template struct tppack_at_impl - : public sprout::detail::tppack_at_impl_1 + : public sprout::detail::tppack_at_impl_1 { - static_assert(N < sizeof...(Args), "N < sizeof...(Args)"); + static_assert(I < sizeof...(Args), "I < sizeof...(Args)"); }; } // namespace detail - template + template struct tppack_at - : public sprout::detail::tppack_at_impl + : public sprout::detail::tppack_at_impl + {}; + + // + // tppack_c_at + // + template + struct tppack_c_at + : public sprout::tppack_at...>::type {}; // @@ -38,28 +46,28 @@ namespace sprout { // namespace detail { template< - std::size_t N, typename R, typename Head, typename... Tail, - typename sprout::enabler_if::type = sprout::enabler + std::size_t I, typename R, typename Head, typename... Tail, + typename sprout::enabler_if::type = sprout::enabler > inline SPROUT_CONSTEXPR R fppack_at_impl(Head&& head, Tail&&... tail) { return sprout::forward(head); } template< - std::size_t N, typename R, typename Head, typename... Tail, - typename sprout::enabler_if::type = sprout::enabler + std::size_t I, typename R, typename Head, typename... Tail, + typename sprout::enabler_if::type = sprout::enabler > inline SPROUT_CONSTEXPR R fppack_at_impl(Head&& head, Tail&&... tail) { - return sprout::detail::fppack_at_impl(sprout::forward(tail)...); + return sprout::detail::fppack_at_impl(sprout::forward(tail)...); } } // namespace detail - template - inline SPROUT_CONSTEXPR typename sprout::tppack_at::type + template + inline SPROUT_CONSTEXPR typename sprout::tppack_at::type fppack_at(Args&&... args) { return sprout::detail::fppack_at_impl< - N, - typename sprout::tppack_at::type + I, + typename sprout::tppack_at::type >(sprout::forward(args)...); } } // namespace sprout diff --git a/sprout/utility/pair/pair.hpp b/sprout/utility/pair/pair.hpp index 2f13d19d..cc640725 100644 --- a/sprout/utility/pair/pair.hpp +++ b/sprout/utility/pair/pair.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/utility/pair/pair_decl.hpp b/sprout/utility/pair/pair_decl.hpp index 07cb5192..88a8cfa4 100644 --- a/sprout/utility/pair/pair_decl.hpp +++ b/sprout/utility/pair/pair_decl.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sprout/variant/variant.hpp b/sprout/variant/variant.hpp index b83d50f6..33bc7c40 100644 --- a/sprout/variant/variant.hpp +++ b/sprout/variant/variant.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include