mimic++ v9.2.1
Loading...
Searching...
No Matches
StaticString.hpp
Go to the documentation of this file.
1// Copyright Dominic (DNKpp) Koepke 2024 - 2025.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// https://www.boost.org/LICENSE_1_0.txt)
5
6#ifndef MIMICPP_UTILITIES_STATIC_STRING_HPP
7#define MIMICPP_UTILITIES_STATIC_STRING_HPP
8
9#include "mimic++/Fwd.hpp"
11
12#ifndef MIMICPP_DETAIL_IS_MODULE
13 #include <algorithm>
14 #include <cstddef>
15 #include <iterator>
16#endif
17
19{
20 template <typename Char, std::size_t length>
22 {
23 public:
24 Char data[length];
25
26 [[nodiscard]] //
27 explicit(false) consteval StaticString(Char const (&arr)[length + 1]) noexcept
28 {
29 std::ranges::copy_n(arr, length, std::ranges::begin(data));
30 }
31
32 [[nodiscard]]
33 static constexpr bool empty() noexcept
34 {
35 return false;
36 }
37
38 [[nodiscard]]
39 static constexpr std::size_t size() noexcept
40 {
41 return length;
42 }
43
44 [[nodiscard]]
45 constexpr auto begin() const noexcept
46 {
47 return std::ranges::begin(data);
48 }
49
50 [[nodiscard]]
51 constexpr auto end() const noexcept
52 {
53 return std::ranges::end(data);
54 }
55 };
56
57 template <typename Char>
58 class StaticString<Char, 0u>
59 {
60 public:
61 [[nodiscard]] //
62 explicit(false) consteval StaticString([[maybe_unused]] Char const (&arr)[1]) noexcept
63 {
64 }
65
66 [[nodiscard]]
67 static constexpr bool empty() noexcept
68 {
69 return true;
70 }
71
72 [[nodiscard]]
73 static constexpr std::size_t size() noexcept
74 {
75 return 0u;
76 }
77
78 [[nodiscard]]
79 static constexpr Char const* begin() noexcept
80 {
81 return nullptr;
82 }
83
84 [[nodiscard]]
85 static constexpr Char const* end() noexcept
86 {
87 return nullptr;
88 }
89 };
90
91 template <typename Char, std::size_t length>
92 StaticString(Char const(&)[length]) -> StaticString<Char, length - 1u>;
93}
94
95#endif
#define MIMICPP_DETAIL_MODULE_EXPORT
Definition Config.hpp:19
static constexpr Char const * begin() noexcept
Definition StaticString.hpp:79
static constexpr bool empty() noexcept
Definition StaticString.hpp:67
static constexpr Char const * end() noexcept
Definition StaticString.hpp:85
static constexpr std::size_t size() noexcept
Definition StaticString.hpp:73
Definition StaticString.hpp:22
static constexpr bool empty() noexcept
Definition StaticString.hpp:33
constexpr auto end() const noexcept
Definition StaticString.hpp:51
constexpr auto begin() const noexcept
Definition StaticString.hpp:45
Char data[length]
Definition StaticString.hpp:24
static constexpr std::size_t size() noexcept
Definition StaticString.hpp:39
Definition Fwd.hpp:445
StaticString(Char const(&)[length]) -> StaticString< Char, length - 1u >