19 template<
size_t N,
typename Char =
char>
27 template<
size_t N,
typename Char =
char>
34 constexpr static size_t Size = N;
60 std::copy (s2.Data_, s2.Data_ + s2.Size, result.
Data_ +
Size);
67 return *
this +
CtString<N2 - 1, Char> { s2 };
80 constexpr bool EndsWith (Char ch)
const noexcept
86 template<
size_t Count>
88 [[nodiscard]]
constexpr auto Chop ()
const noexcept
103 constexpr operator QStringView () const noexcept
104 requires std::is_same_v<Char,
char16_t>
109 constexpr auto Data () const noexcept
114 template<
typename NewChar>
122 template<Char Needle>
123 constexpr size_t Count () const noexcept
129 template<CtString Source, auto Needle,
size_t N2,
typename Char>
132 constexpr auto repCount = Source.template Count<static_cast<Char> (Needle)> ();
133 constexpr auto newSize = Source.Size + repCount * (N2 - 1);
136 auto out = result.
Data_;
137 for (
auto in = Source.Data_; in < Source.Data_ + Source.Size; ++in)
139 out = std::copy (replacement.Data_, replacement.Data_ + N2, out);
145 template<CtString Str>
148 constexpr static auto terminated = Str +
'\0';
150 return QByteArray { QByteArrayData {
nullptr,
const_cast<char*
> (terminated.Data_), terminated.Size - 1 } };
153 template<CtString Str>
156 if constexpr (std::is_same_v<
typename decltype (Str)::Char_t,
char16_t>)
158 constexpr static auto terminated = Str +
'\0';
160 return QString { QStringPrivate {
nullptr,
const_cast<char16_t*
> (terminated.Data_), terminated.Size - 1 } };
163 return ToString<Str.template CastChars<char16_t> ()> ();
166 template<
size_t N1,
size_t N2,
typename Char>
169 return CtString<N1 - 1, Char> { s1 } + s2;
172 template<
typename Char>
176 while (str [result++])
181 template<
size_t N,
typename Char>
187 template<Util::CtString S>
188 constexpr auto operator""_ct () noexcept
QString ToString() noexcept
constexpr auto ReplaceAll(CtString< N2, Char > replacement) noexcept
QByteArray ToByteArray() noexcept
constexpr size_t StringBufSize(const Char *str) noexcept
CtString(RawStr< N, Char >) -> CtString< N - 1, Char >
constexpr auto operator+(RawStr< N1, Char > s1, CtString< N2, Char > s2) noexcept
static constexpr auto FromUnsized(const Char *s) noexcept
constexpr auto operator+(const CtString< N2, Char > &s2) const noexcept
constexpr size_t Count() const noexcept
constexpr auto Data() const noexcept
constexpr bool EndsWith(Char ch) const noexcept
constexpr auto Chop() const noexcept
constexpr Char & operator[](size_t pos) noexcept
constexpr CtString() noexcept=default
constexpr bool IsEmpty() const noexcept
static constexpr size_t Size
constexpr CtString< N, NewChar > CastChars() const noexcept
constexpr auto operator<=>(const CtString &) const =default