From 1ee98471ac6806532e1befc8540166137c10e246 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 3 Oct 2024 16:44:59 +0200 Subject: [PATCH] refactor: `unit_symbol_impl` simplified --- src/core/include/mp-units/framework/unit.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/include/mp-units/framework/unit.h b/src/core/include/mp-units/framework/unit.h index e2140b06..233f892c 100644 --- a/src/core/include/mp-units/framework/unit.h +++ b/src/core/include/mp-units/framework/unit.h @@ -855,18 +855,18 @@ constexpr auto unit_symbol_impl(Out out, const power&, const uni return copy_symbol_exponent(fmt.encoding, negative_power, out); } -template Out, DerivedUnitExpr M> -constexpr Out unit_symbol_impl(Out out, M m, std::size_t Idx, const unit_symbol_formatting& fmt, bool negative_power) +template Out, DerivedUnitExpr... Us> +constexpr Out unit_symbol_impl(Out out, const type_list<>&, const unit_symbol_formatting&, bool) { - if (Idx > 0) out = print_separator(out, fmt); - return unit_symbol_impl(out, m, fmt, negative_power); + return out; } -template Out, DerivedUnitExpr... Ms, std::size_t... Idxs> -constexpr Out unit_symbol_impl(Out out, const type_list&, std::index_sequence, - const unit_symbol_formatting& fmt, bool negative_power) +template Out, DerivedUnitExpr U, DerivedUnitExpr... Rest> +constexpr Out unit_symbol_impl(Out out, const type_list&, const unit_symbol_formatting& fmt, + bool negative_power) { - return (..., (out = unit_symbol_impl(out, Ms{}, Idxs, fmt, negative_power))); + return ((out = unit_symbol_impl(out, U{}, fmt, negative_power)), ..., + (print_separator(out, fmt), out = unit_symbol_impl(out, Rest{}, fmt, negative_power))); } template Out, DerivedUnitExpr... Nums, DerivedUnitExpr... Dens> @@ -878,11 +878,11 @@ constexpr Out unit_symbol_impl(Out out, const type_list& nums, const ty return out; } else if constexpr (sizeof...(Dens) == 0) { // no denominator - return unit_symbol_impl(out, nums, std::index_sequence_for(), fmt, false); + return unit_symbol_impl(out, nums, fmt, false); } else { using enum unit_symbol_solidus; if constexpr (sizeof...(Nums) > 0) { - out = unit_symbol_impl(out, nums, std::index_sequence_for(), fmt, false); + out = unit_symbol_impl(out, nums, fmt, false); } if (fmt.solidus == always || (fmt.solidus == one_denominator && sizeof...(Dens) == 1)) { @@ -894,7 +894,7 @@ constexpr Out unit_symbol_impl(Out out, const type_list& nums, const ty if (fmt.solidus == always && sizeof...(Dens) > 1) *out++ = '('; const bool negative_power = fmt.solidus == never || (fmt.solidus == one_denominator && sizeof...(Dens) > 1); - out = unit_symbol_impl(out, dens, std::index_sequence_for(), fmt, negative_power); + out = unit_symbol_impl(out, dens, fmt, negative_power); if (fmt.solidus == always && sizeof...(Dens) > 1) *out++ = ')'; return out; }