From 29c83c0d84f1b5bd1e34a931b2cc6ccefbe4bac4 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 30 Nov 2023 09:25:29 +0100 Subject: [PATCH] feat: :boom: `symbol_text` definition simplified --- src/core/include/mp-units/bits/magnitude.h | 14 ++-- src/core/include/mp-units/bits/symbol_text.h | 67 +++----------------- src/core/include/mp-units/bits/text_tools.h | 2 +- src/core/include/mp-units/unit.h | 4 +- test/unit_test/static/symbol_text_test.cpp | 20 ++---- 5 files changed, 24 insertions(+), 83 deletions(-) diff --git a/src/core/include/mp-units/bits/magnitude.h b/src/core/include/mp-units/bits/magnitude.h index 195fa746..f75cc4c6 100644 --- a/src/core/include/mp-units/bits/magnitude.h +++ b/src/core/include/mp-units/bits/magnitude.h @@ -869,23 +869,23 @@ template if constexpr (num_value == 1 && den_value == 1 && exp10 != 0) { return base_multiplier + superscript(); } else if constexpr (num_value != 1 || den_value != 1 || exp10 != 0) { - auto txt = basic_fixed_string("[") + regular(); + auto txt = basic_symbol_text("[") + regular(); if constexpr (den_value == 1) { if constexpr (exp10 == 0) { - return txt + basic_fixed_string("]"); + return txt + basic_symbol_text("]"); } else { - return txt + " " + base_multiplier + superscript() + basic_fixed_string("]"); + return txt + basic_symbol_text(" ") + base_multiplier + superscript() + basic_symbol_text("]"); } } else { if constexpr (exp10 == 0) { - return txt + basic_fixed_string("/") + regular() + basic_fixed_string("]"); + return txt + basic_symbol_text("/") + regular() + basic_symbol_text("]"); } else { - return txt + basic_fixed_string("/") + regular() + " " + base_multiplier + superscript() + - basic_fixed_string("]"); + return txt + basic_symbol_text("/") + regular() + basic_symbol_text(" ") + base_multiplier + + superscript() + basic_symbol_text("]"); } } } else { - return basic_fixed_string(""); + return basic_symbol_text(""); } } diff --git a/src/core/include/mp-units/bits/symbol_text.h b/src/core/include/mp-units/bits/symbol_text.h index 4a27f82b..05315ec9 100644 --- a/src/core/include/mp-units/bits/symbol_text.h +++ b/src/core/include/mp-units/bits/symbol_text.h @@ -66,88 +66,44 @@ struct basic_symbol_text { basic_fixed_string unicode_; basic_fixed_string ascii_; - constexpr explicit(false) basic_symbol_text(char txt) noexcept : unicode_(txt), ascii_(txt) + constexpr explicit(false) basic_symbol_text(char txt) : unicode_(txt), ascii_(txt) { detail::validate_ascii_char(txt); } - constexpr basic_symbol_text(UnicodeCharT u, char a) noexcept : unicode_(u), ascii_(a) - { - detail::validate_ascii_char(a); - } - constexpr explicit(false) basic_symbol_text(const char (&txt)[N + 1]) noexcept : unicode_(txt), ascii_(txt) + + constexpr explicit(false) basic_symbol_text(const char (&txt)[N + 1]) : unicode_(txt), ascii_(txt) { detail::validate_ascii_string(txt); } - constexpr explicit(false) basic_symbol_text(const basic_fixed_string& txt) noexcept : - unicode_(txt), ascii_(txt) + + constexpr explicit(false) basic_symbol_text(const basic_fixed_string& txt) : unicode_(txt), ascii_(txt) { detail::validate_ascii_string(txt.data_); } - constexpr basic_symbol_text(const UnicodeCharT (&u)[N + 1], const char (&a)[M + 1]) noexcept : unicode_(u), ascii_(a) + + constexpr basic_symbol_text(const UnicodeCharT (&u)[N + 1], const char (&a)[M + 1]) : unicode_(u), ascii_(a) { detail::validate_ascii_string(a); } - constexpr basic_symbol_text(const basic_fixed_string& u, - const basic_fixed_string& a) noexcept : + + constexpr basic_symbol_text(const basic_fixed_string& u, const basic_fixed_string& a) : unicode_(u), ascii_(a) { detail::validate_ascii_string(a.data_); } - [[nodiscard]] constexpr auto& unicode() { return unicode_; } [[nodiscard]] constexpr const auto& unicode() const { return unicode_; } - [[nodiscard]] constexpr auto& ascii() { return ascii_; } [[nodiscard]] constexpr const auto& ascii() const { return ascii_; } [[nodiscard]] constexpr bool empty() const { return unicode().empty() && ascii().empty(); } template [[nodiscard]] constexpr friend basic_symbol_text operator+( - const basic_symbol_text& lhs, const basic_symbol_text& rhs) noexcept + const basic_symbol_text& lhs, const basic_symbol_text& rhs) { return basic_symbol_text(lhs.unicode() + rhs.unicode(), lhs.ascii() + rhs.ascii()); } - template - [[nodiscard]] constexpr friend basic_symbol_text operator+( - const basic_symbol_text& lhs, const basic_fixed_string& rhs) noexcept - { - return lhs + basic_symbol_text(rhs); - } - - template - [[nodiscard]] constexpr friend basic_symbol_text operator+( - const basic_fixed_string& lhs, const basic_symbol_text& rhs) noexcept - { - return basic_symbol_text(lhs) + rhs; - } - - template - [[nodiscard]] constexpr friend basic_symbol_text operator+( - const basic_symbol_text& lhs, const UnicodeCharT (&rhs)[N2]) noexcept - { - return lhs + basic_symbol_text(rhs); - } - - template - [[nodiscard]] constexpr friend basic_symbol_text operator+( - const UnicodeCharT (&lhs)[N2], const basic_symbol_text& rhs) noexcept - { - return basic_symbol_text(lhs) + rhs; - } - - [[nodiscard]] constexpr friend basic_symbol_text operator+(const basic_symbol_text& lhs, - UnicodeCharT rhs) noexcept - { - return lhs + basic_symbol_text(rhs); - } - - [[nodiscard]] constexpr friend basic_symbol_text operator+( - UnicodeCharT lhs, const basic_symbol_text& rhs) noexcept - { - return basic_symbol_text(lhs) + rhs; - } - template [[nodiscard]] friend constexpr auto operator<=>(const basic_symbol_text& lhs, const basic_symbol_text& rhs) noexcept @@ -169,9 +125,6 @@ struct basic_symbol_text { basic_symbol_text(char) -> basic_symbol_text; -template -basic_symbol_text(UnicodeCharT, char) -> basic_symbol_text; - template basic_symbol_text(const char (&)[N]) -> basic_symbol_text; diff --git a/src/core/include/mp-units/bits/text_tools.h b/src/core/include/mp-units/bits/text_tools.h index 11fd2b51..9a17f3a3 100644 --- a/src/core/include/mp-units/bits/text_tools.h +++ b/src/core/include/mp-units/bits/text_tools.h @@ -77,7 +77,7 @@ template [[nodiscard]] consteval auto regular() { if constexpr (Value < 0) - return basic_fixed_string("-") + superscript_helper<-Value>(); + return basic_symbol_text("-") + superscript_helper<-Value>(); else if constexpr (Value < 10) return basic_symbol_text(static_cast('0' + Value)); else diff --git a/src/core/include/mp-units/unit.h b/src/core/include/mp-units/unit.h index c5542597..dbd8dc22 100644 --- a/src/core/include/mp-units/unit.h +++ b/src/core/include/mp-units/unit.h @@ -720,8 +720,8 @@ constexpr auto unit_symbol_impl(Out out, const power&, unit_symb constexpr ratio r = power::exponent; if constexpr (r.den != 1) { // add root part - constexpr auto txt = basic_fixed_string("^(") + regular() + basic_fixed_string("/") + regular() + - basic_fixed_string(")"); + constexpr auto txt = + basic_symbol_text("^(") + regular() + basic_symbol_text("/") + regular() + basic_symbol_text(")"); return copy(txt, fmt.encoding, out); } else if constexpr (r.num != 1) { // add exponent part diff --git a/test/unit_test/static/symbol_text_test.cpp b/test/unit_test/static/symbol_text_test.cpp index 0cfa2b4e..1eb4700b 100644 --- a/test/unit_test/static/symbol_text_test.cpp +++ b/test/unit_test/static/symbol_text_test.cpp @@ -39,12 +39,6 @@ static_assert(sym1 >= 'a'); static_assert(sym1.unicode() == "b"); static_assert(sym1.ascii() == "b"); -constexpr basic_symbol_text sym2('a', 'b'); -static_assert(sym2 == basic_symbol_text('a', 'b')); -static_assert(sym2 != 'b'); -static_assert(sym2.unicode() == 'a'); -static_assert(sym2.ascii() == 'b'); - constexpr basic_symbol_text sym3("ab"); static_assert(sym3.unicode() == "ab"); static_assert(sym3.ascii() == "ab"); @@ -77,19 +71,13 @@ static_assert(sym6 >= basic_symbol_text("bc")); static_assert(basic_symbol_text("a") + sym4 == basic_symbol_text("abc")); static_assert(sym4 + basic_symbol_text("f") == basic_symbol_text("bcf")); -static_assert(basic_fixed_string("a") + sym4 == basic_symbol_text("abc")); -static_assert(sym4 + basic_fixed_string("f") == basic_symbol_text("bcf")); - static_assert(basic_symbol_text("a", "f") + sym6 == basic_symbol_text("abc", "fde")); static_assert(sym6 + basic_symbol_text("a", "f") == basic_symbol_text("bca", "def")); -static_assert('a' + sym6 == basic_symbol_text("abc", "ade")); -static_assert(sym6 + 'f' == basic_symbol_text("bcf", "def")); +static_assert(basic_symbol_text('a') + sym6 == basic_symbol_text("abc", "ade")); +static_assert(sym6 + basic_symbol_text('f') == basic_symbol_text("bcf", "def")); -static_assert(basic_fixed_string("a") + sym6 == basic_symbol_text("abc", "ade")); -static_assert(sym6 + basic_fixed_string("f") == basic_symbol_text("bcf", "def")); - -static_assert("a" + sym6 == basic_symbol_text("abc", "ade")); -static_assert(sym6 + "f" == basic_symbol_text("bcf", "def")); +static_assert(basic_symbol_text("a") + sym6 == basic_symbol_text("abc", "ade")); +static_assert(sym6 + basic_symbol_text("f") == basic_symbol_text("bcf", "def")); } // namespace