From 97d5bb569b866a7e3119ee1b4896fca41228d8ab Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 30 Nov 2023 09:23:13 +0100 Subject: [PATCH] refactor: more type members added to `fixed_string` definition --- .../mp-units/bits/external/fixed_string.h | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/core/include/mp-units/bits/external/fixed_string.h b/src/core/include/mp-units/bits/external/fixed_string.h index 5bc1fae5..025d1c60 100644 --- a/src/core/include/mp-units/bits/external/fixed_string.h +++ b/src/core/include/mp-units/bits/external/fixed_string.h @@ -46,7 +46,15 @@ template struct basic_fixed_string { CharT data_[N + 1] = {}; + using value_type = CharT; + using pointer = CharT*; + using const_pointer = const CharT*; + using reference = CharT&; + using const_reference = const CharT&; using const_iterator = const CharT*; + using iterator = const_iterator; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; constexpr explicit(false) basic_fixed_string(CharT ch) noexcept requires(N == 1) @@ -67,13 +75,15 @@ struct basic_fixed_string { } [[nodiscard]] constexpr bool empty() const noexcept { return N == 0; } - [[nodiscard]] constexpr std::size_t size() const noexcept { return N; } - [[nodiscard]] constexpr const CharT* data() const noexcept { return data_; } + [[nodiscard]] constexpr size_type size() const noexcept { return N; } + [[nodiscard]] constexpr const_pointer data() const noexcept { return data_; } [[nodiscard]] constexpr const CharT* c_str() const noexcept { return data(); } - [[nodiscard]] constexpr const CharT& operator[](std::size_t index) const noexcept { return data()[index]; } + [[nodiscard]] constexpr const_reference operator[](size_type index) const noexcept { return data()[index]; } [[nodiscard]] constexpr const_iterator begin() const noexcept { return data(); } + [[nodiscard]] constexpr const_iterator cbegin() const noexcept { return data(); } [[nodiscard]] constexpr const_iterator end() const noexcept { return data() + size(); } + [[nodiscard]] constexpr const_iterator cend() const noexcept { return data() + size(); } template [[nodiscard]] constexpr friend basic_fixed_string operator+( @@ -108,15 +118,15 @@ struct basic_fixed_string { } }; +template +basic_fixed_string(CharT) -> basic_fixed_string; + template basic_fixed_string(const CharT (&str)[N]) -> basic_fixed_string; template basic_fixed_string(const CharT* ptr, std::integral_constant) -> basic_fixed_string; -template -basic_fixed_string(CharT) -> basic_fixed_string; - template using fixed_string = basic_fixed_string;