From 1bd10723035a64ff51f3dffd9e5afe8d48016d4c Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Mon, 12 Oct 2026 19:40:19 +0200 Subject: [PATCH 1/4] Reduce the compiled code size for etl::variant (#1623) * Replaced pointer table with a recursive visitor call to reduce compiled code size. * Removed the 32 type limit for visitor and operator visits Deleted variant_select_do_operator and variant_select_do_visitor headers * Restored CMakeLists.txt Applied clang-format * Updated documentation Added guards to 'single index' do_operator_at and do_visitor_at * Unified 'if (Index == index())' order * Merged new tests from PR #1625 --------- Co-authored-by: John Wellbelove --- docs/containers/variadics/variant-variadic.md | 63 +- .../etl/private/variant_select_do_operator.h | 3133 ----------------- .../etl/private/variant_select_do_visitor.h | 3133 ----------------- include/etl/private/variant_variadic.h | 312 +- test/test_variant_variadic.cpp | 34 + test/vs2022/etl.vcxproj | 2 - test/vs2022/etl.vcxproj.filters | 6 - 7 files changed, 271 insertions(+), 6412 deletions(-) delete mode 100644 include/etl/private/variant_select_do_operator.h delete mode 100644 include/etl/private/variant_select_do_visitor.h diff --git a/docs/containers/variadics/variant-variadic.md b/docs/containers/variadics/variant-variadic.md index 62ebd7e9..6ed9de14 100644 --- a/docs/containers/variadics/variant-variadic.md +++ b/docs/containers/variadics/variant-variadic.md @@ -4,19 +4,16 @@ title: "variant" {{< callout type="info">}} Header: `variant.h` - Similar to: `std::variant` + Similar to: `std::variant` + For C++11 and above. {{< /callout >}} -**For C++11 and above.** - ```cpp template class variant ``` A variadic class that can contain one a several specified types in a type safe manner. -C++11 and C++14 support up to 32 types for visitor callback callbacks. -C++17 and above supports any number of visitor callback types. Accepts functors, `etl::overload` and `etl::visitor` types as visitor callbacks. @@ -400,37 +397,42 @@ ETL_CONSTEXPR14 bool holds_alternative(size_t index, const etl::variant}} +### Before: `20.50.0` +- C++11 and C++14: +Supports up to 32 types of functor, `etl::visitor`, or `etl::overload` callback types. +- C++17 and above: +Supports any number of functor or `etl::visitor`, or `etl::overload`callback types. -`etl::variant` provides member functions that support two methods of visitation. +### From: `20.50.0` +- Supports any number of visitor callback types. +- Compiles to smaller object code. +{{< /callout >}} ---- +### etl::visitor ```cpp void accept_visitor(etl::visitor& v) ``` **Description** Accepts an `etl::visitor` derived type. +{{< callout type="warning">}} Deprecated from `20.36.0` +{{< /callout >}} + +--- ```cpp void accept_visitor(etl::visitor& v) const ``` **Description** Accepts `an etl::visitor` derived type. -Deprecated -Since: `20.36.0` +{{< callout type="warning">}} +Deprecated from `20.36.0` +{{< /callout >}} --- @@ -438,7 +440,7 @@ Since: `20.36.0` void accept(etl::visitor& v) ``` **Description** -Accepts an `etl::visitor` derived type. +Accepts an `etl::visitor` derived type. Since: `20.36.0` --- @@ -450,9 +452,9 @@ void accept(etl::visitor& v) const Accepts an `etl::visitor` derived type. Since: `20.36.0` -See `visitor` +[See visitor]({{< relref "../../patterns/visitor.md" >}}) ---- +### Functors ```cpp template @@ -460,7 +462,9 @@ void accept_functor(TVisitor& v) ``` **Description** Accepts a functor that overrides `operator()` for each type. -Deprecated since `20.36.0` +{{< callout type="warning">}} +Deprecated from `20.36.0` +{{< /callout >}} --- @@ -470,7 +474,9 @@ void accept_functor(TVisitor& v) const ``` **Description** Accepts a functor that overrides `operator()` for each type. -Deprecated since `20.36.0` +{{< callout type="warning">}} +Deprecated from `20.36.0` +{{< /callout >}} --- @@ -479,7 +485,7 @@ template void accept(TVisitor& v) ``` **Description** -Accepts a functor that overrides `operator()` for each type. +Accepts a functor that overrides `operator()` for each type. Since: `20.36.0` --- @@ -489,13 +495,14 @@ template void accept(TVisitor& v) const ``` **Description** -Accepts a functor that overrides `operator()` for each type. +Accepts a functor that overrides `operator()` for each type. Since: `20.36.0` See overload -## Visitation -For STL style `etl::visit`. +### etl::visit + +For STL style `etl::visit`. Since: `20.28.0` The ETL implements an STL style visit function. diff --git a/include/etl/private/variant_select_do_operator.h b/include/etl/private/variant_select_do_operator.h deleted file mode 100644 index 42bcb0d0..00000000 --- a/include/etl/private/variant_select_do_operator.h +++ /dev/null @@ -1,3133 +0,0 @@ -/****************************************************************************** -The MIT License(MIT) - -Embedded Template Library. -https://github.com/ETLCPP/etl -https://www.etlcpp.com - -Copyright(c) 2025 John Wellbelove - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files(the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and / or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions : - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -******************************************************************************/ - -//*************************************************************************** -// This file is included in variant_variadic.h for C++11 and C++14, as they -// do not support template fold expressions. -//*************************************************************************** - -namespace private_variant -{ - //*************************************************************************** - // Selects a do_operator implementation that is configured for the number of - // types. - //*************************************************************************** - template - struct select_do_operator; - - //*************************************************************************** - template <> - struct select_do_operator<1> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<2> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<3> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<4> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<5> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<6> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<7> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<8> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - default: break; - } - } - }; -#if !defined(ETL_VARIANT_CPP11_MAX_8_TYPES) - //*************************************************************************** - template <> - struct select_do_operator<9> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<10> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<11> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<12> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<13> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<14> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<15> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<16> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - default: break; - } - } - }; - #if !defined(ETL_VARIANT_CPP11_MAX_16_TYPES) - //*************************************************************************** - template <> - struct select_do_operator<17> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<18> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<19> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<20> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<21> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<22> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<23> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<24> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - default: break; - } - } - }; - #if !defined(ETL_VARIANT_CPP11_MAX_24_TYPES) - //*************************************************************************** - template <> - struct select_do_operator<25> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<26> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<27> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor(etl::get<26>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<28> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor(etl::get<27>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<29> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor(etl::get<28>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<30> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor(etl::get<28>(the_variant)); - break; - } - case 29: - { - visitor(etl::get<29>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<31> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor(etl::get<28>(the_variant)); - break; - } - case 29: - { - visitor(etl::get<29>(the_variant)); - break; - } - case 30: - { - visitor(etl::get<30>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_operator<32> - { - template - static void do_operator(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor(etl::get<28>(the_variant)); - break; - } - case 29: - { - visitor(etl::get<29>(the_variant)); - break; - } - case 30: - { - visitor(etl::get<30>(the_variant)); - break; - } - case 31: - { - visitor(etl::get<31>(the_variant)); - break; - } - default: break; - } - } - }; - #endif - #endif -#endif -} // namespace private_variant diff --git a/include/etl/private/variant_select_do_visitor.h b/include/etl/private/variant_select_do_visitor.h deleted file mode 100644 index 58a6e2d6..00000000 --- a/include/etl/private/variant_select_do_visitor.h +++ /dev/null @@ -1,3133 +0,0 @@ -/****************************************************************************** -The MIT License(MIT) - -Embedded Template Library. -https://github.com/ETLCPP/etl -https://www.etlcpp.com - -Copyright(c) 2025 John Wellbelove - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files(the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and / or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions : - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -******************************************************************************/ - -//*************************************************************************** -// This file is included in variant_variadic.h for C++11 and C++14, as they -// do not support template fold expressions. -//*************************************************************************** - -namespace private_variant -{ - //*************************************************************************** - // Selects a do_visitor implementation that is configured for the number of - // types. - //*************************************************************************** - template - struct select_do_visitor; - - //*************************************************************************** - template <> - struct select_do_visitor<1> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<2> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<3> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<4> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<5> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<6> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<7> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<8> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - default: break; - } - } - }; -#if !defined(ETL_VARIANT_CPP11_MAX_8_TYPES) - //*************************************************************************** - template <> - struct select_do_visitor<9> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<10> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<11> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<12> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<13> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<14> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<15> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<16> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - default: break; - } - } - }; - #if !defined(ETL_VARIANT_CPP11_MAX_16_TYPES) - //*************************************************************************** - template <> - struct select_do_visitor<17> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<18> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<19> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<20> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<21> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<22> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<23> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<24> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - default: break; - } - } - }; - #if !defined(ETL_VARIANT_CPP11_MAX_24_TYPES) - //*************************************************************************** - template <> - struct select_do_visitor<25> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<26> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<27> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor.visit(etl::get<26>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<28> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor.visit(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor.visit(etl::get<27>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<29> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor.visit(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor.visit(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor.visit(etl::get<28>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<30> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor.visit(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor.visit(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor.visit(etl::get<28>(the_variant)); - break; - } - case 29: - { - visitor.visit(etl::get<29>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<31> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor.visit(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor.visit(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor.visit(etl::get<28>(the_variant)); - break; - } - case 29: - { - visitor.visit(etl::get<29>(the_variant)); - break; - } - case 30: - { - visitor.visit(etl::get<30>(the_variant)); - break; - } - default: break; - } - } - }; - - //*************************************************************************** - template <> - struct select_do_visitor<32> - { - template - static void do_visitor(TVariant& the_variant, TVisitor& visitor) - { - switch (the_variant.index()) - { - case 0: - { - visitor.visit(etl::get<0>(the_variant)); - break; - } - case 1: - { - visitor.visit(etl::get<1>(the_variant)); - break; - } - case 2: - { - visitor.visit(etl::get<2>(the_variant)); - break; - } - case 3: - { - visitor.visit(etl::get<3>(the_variant)); - break; - } - case 4: - { - visitor.visit(etl::get<4>(the_variant)); - break; - } - case 5: - { - visitor.visit(etl::get<5>(the_variant)); - break; - } - case 6: - { - visitor.visit(etl::get<6>(the_variant)); - break; - } - case 7: - { - visitor.visit(etl::get<7>(the_variant)); - break; - } - case 8: - { - visitor.visit(etl::get<8>(the_variant)); - break; - } - case 9: - { - visitor.visit(etl::get<9>(the_variant)); - break; - } - case 10: - { - visitor.visit(etl::get<10>(the_variant)); - break; - } - case 11: - { - visitor.visit(etl::get<11>(the_variant)); - break; - } - case 12: - { - visitor.visit(etl::get<12>(the_variant)); - break; - } - case 13: - { - visitor.visit(etl::get<13>(the_variant)); - break; - } - case 14: - { - visitor.visit(etl::get<14>(the_variant)); - break; - } - case 15: - { - visitor.visit(etl::get<15>(the_variant)); - break; - } - case 16: - { - visitor.visit(etl::get<16>(the_variant)); - break; - } - case 17: - { - visitor.visit(etl::get<17>(the_variant)); - break; - } - case 18: - { - visitor.visit(etl::get<18>(the_variant)); - break; - } - case 19: - { - visitor.visit(etl::get<19>(the_variant)); - break; - } - case 20: - { - visitor.visit(etl::get<20>(the_variant)); - break; - } - case 21: - { - visitor.visit(etl::get<21>(the_variant)); - break; - } - case 22: - { - visitor.visit(etl::get<22>(the_variant)); - break; - } - case 23: - { - visitor.visit(etl::get<23>(the_variant)); - break; - } - case 24: - { - visitor.visit(etl::get<24>(the_variant)); - break; - } - case 25: - { - visitor.visit(etl::get<25>(the_variant)); - break; - } - case 26: - { - visitor.visit(etl::get<26>(the_variant)); - break; - } - case 27: - { - visitor.visit(etl::get<27>(the_variant)); - break; - } - case 28: - { - visitor.visit(etl::get<28>(the_variant)); - break; - } - case 29: - { - visitor.visit(etl::get<29>(the_variant)); - break; - } - case 30: - { - visitor.visit(etl::get<30>(the_variant)); - break; - } - case 31: - { - visitor.visit(etl::get<31>(the_variant)); - break; - } - default: break; - } - } - }; - #endif - #endif -#endif -} // namespace private_variant diff --git a/include/etl/private/variant_variadic.h b/include/etl/private/variant_variadic.h index d0d5674b..f99005e1 100644 --- a/include/etl/private/variant_variadic.h +++ b/include/etl/private/variant_variadic.h @@ -403,11 +403,6 @@ namespace etl template ETL_CONSTEXPR14 const T&& get(const etl::variant&& v); - #if ETL_NOT_USING_CPP17 - #include "variant_select_do_operator.h" - #include "variant_select_do_visitor.h" - #endif - constexpr bool operator>(etl::monostate, etl::monostate) ETL_NOEXCEPT { return false; @@ -1571,25 +1566,6 @@ namespace etl { (attempt_visitor(visitor) || ...); } - #else - //*************************************************************************** - /// Call the relevant visitor. - //*************************************************************************** - template - void do_visitor(TVisitor& visitor) - { - etl::private_variant::select_do_visitor::do_visitor(*this, visitor); - } - - //*************************************************************************** - /// Call the relevant visitor. - //*************************************************************************** - template - void do_visitor(TVisitor& visitor) const - { - etl::private_variant::select_do_visitor::do_visitor(*this, visitor); - } - #endif //*************************************************************************** /// Attempt to call a visitor. @@ -1633,6 +1609,81 @@ namespace etl } } + #else + + //*************************************************************************** + /// Call the relevant visitor. + //*************************************************************************** + template + void do_visitor(TVisitor& visitor) + { + do_visitor_at(visitor, etl::make_index_sequence{}); + } + + //*************************************************************************** + /// Call the relevant visitor. + //*************************************************************************** + template + void do_visitor(TVisitor& visitor) const + { + do_visitor_at(visitor, etl::make_index_sequence{}); + } + + //*************************************************************************** + /// Base case: exactly one index remains. + /// Check Index against this->index() to see if it's actually the match. + //*************************************************************************** + template + void do_visitor_at(TVisitor& visitor, etl::index_sequence) + { + if (Index == index()) + { + visitor.visit(etl::get(*this)); + } + } + + template + void do_visitor_at(TVisitor& visitor, etl::index_sequence) const + { + if (Index == index()) + { + visitor.visit(etl::get(*this)); + } + } + + //*************************************************************************** + /// Recursive case: check Index against this->index(), otherwise defer. + //*************************************************************************** + template + void do_visitor_at(TVisitor& visitor, etl::index_sequence) + { + if (Index == index()) + { + visitor.visit(etl::get(*this)); + } + else + { + do_visitor_at(visitor, etl::index_sequence{}); + } + } + + //*************************************************************************** + /// Recursive case: check Index against this->index(), otherwise defer. + //*************************************************************************** + template + void do_visitor_at(TVisitor& visitor, etl::index_sequence) const + { + if (Index == index()) + { + visitor.visit(etl::get(*this)); + } + else + { + do_visitor_at(visitor, etl::index_sequence{}); + } + } + #endif + #if ETL_USING_CPP17 && !defined(ETL_VARIANT_FORCE_CPP11) //*************************************************************************** /// Call the relevant visitor by attempting each one. @@ -1651,53 +1702,6 @@ namespace etl { (attempt_operator(visitor) || ...); } - #else - //*************************************************************************** - /// Call the relevant operator. - //*************************************************************************** - template - void do_operator(TVisitor& visitor) - { - #if defined(ETL_VARIANT_CPP11_MAX_8_TYPES) - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 8U, "ETL_VARIANT_CPP11_MAX_8_TYPES - Only a maximum of 8 types are allowed in this variant"); - #endif - - #if defined(ETL_VARIANT_CPP11_MAX_16_TYPES) - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 16U, "ETL_VARIANT_CPP11_MAX_16_TYPES - Only a maximum of 16 types are allowed in this variant"); - #endif - - #if defined(ETL_VARIANT_CPP11_MAX_24_TYPES) - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 24U, "ETL_VARIANT_CPP11_MAX_24_TYPES - Only a maximum of 24 types are allowed in this variant"); - #endif - - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 32U, "A maximum of 32 types are allowed in this variant"); - - etl::private_variant::select_do_operator::do_operator(*this, visitor); - } - - //*************************************************************************** - /// Call the relevant operator. - //*************************************************************************** - template - void do_operator(TVisitor& visitor) const - { - #if defined(ETL_VARIANT_CPP11_MAX_8_TYPES) - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 8U, "ETL_VARIANT_CPP11_MAX_8_TYPES - Only a maximum of 8 types are allowed in this variant"); - #endif - - #if defined(ETL_VARIANT_CPP11_MAX_16_TYPES) - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 16U, "ETL_VARIANT_CPP11_MAX_16_TYPES - Only a maximum of 16 types are allowed in this variant"); - #endif - - #if defined(ETL_VARIANT_CPP11_MAX_24_TYPES) - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 24U, "ETL_VARIANT_CPP11_MAX_24_TYPES - Only a maximum of 24 types are allowed in this variant"); - #endif - - ETL_STATIC_ASSERT(sizeof...(TTypes) <= 32U, "A maximum of 32 types are allowed in this variant"); - - etl::private_variant::select_do_operator::do_operator(*this, visitor); - } - #endif //*************************************************************************** /// Attempt to call a visitor. @@ -1735,6 +1739,81 @@ namespace etl } } + #else + + //*************************************************************************** + /// Call the relevant visitor. + //*************************************************************************** + template + void do_operator(TVisitor& visitor) + { + do_operator_at(visitor, etl::make_index_sequence{}); + } + + //*************************************************************************** + /// Call the relevant visitor. + //*************************************************************************** + template + void do_operator(TVisitor& visitor) const + { + do_operator_at(visitor, etl::make_index_sequence{}); + } + + //*************************************************************************** + /// Base case: exactly one index remains. + /// Check Index against this->index() to see if it's actually the match. + //*************************************************************************** + template + void do_operator_at(TVisitor& visitor, etl::index_sequence) + { + if (Index == index()) + { + visitor(etl::get(*this)); + } + } + + template + void do_operator_at(TVisitor& visitor, etl::index_sequence) const + { + if (Index == index()) + { + visitor(etl::get(*this)); + } + } + + //*************************************************************************** + /// Recursive case: check Index against this->index(), otherwise defer. + //*************************************************************************** + template + void do_operator_at(TVisitor& visitor, etl::index_sequence) + { + if (Index == index()) + { + visitor(etl::get(*this)); + } + else + { + do_operator_at(visitor, etl::index_sequence{}); + } + } + + //*************************************************************************** + /// Recursive case: check Index against this->index(), otherwise defer. + //*************************************************************************** + template + void do_operator_at(TVisitor& visitor, etl::index_sequence) const + { + if (Index == index()) + { + visitor(etl::get(*this)); + } + else + { + do_operator_at(visitor, etl::index_sequence{}); + } + } + #endif + //*************************************************************************** /// Get a reference to the stored value by index. /// For trivially destructible types, accesses the variadic_union directly. @@ -2091,8 +2170,8 @@ namespace etl //*************************************************************************** namespace private_variant { - template - static ETL_CONSTEXPR14 TRet do_visit_single(TCallable&& f, TVariant&& v, TNext&&, TVariants&&... vs); + template + static ETL_CONSTEXPR14 TReturn do_visit_single(TCallable&& f, TVariant&& v, TNext&&, TVariants&&... vs); //*************************************************************************** /// Dummy-struct used to indicate that the return type should be auto-deduced @@ -2143,8 +2222,8 @@ namespace etl using type = common_type_t >...>; }; - template