1
0
Fork 0

Codechange: use std::span over char* for writing the buffers

pull/14211/head
Rubidium 2025-05-04 11:10:32 +02:00 committed by rubidium42
parent 6817f52d9b
commit 4255a94779
4 changed files with 12 additions and 19 deletions

View File

@ -113,13 +113,13 @@ void BaseStringBuilder::PutChar(char c)
void BaseStringBuilder::PutUtf8(char32_t c) void BaseStringBuilder::PutUtf8(char32_t c)
{ {
auto [buf, len] = EncodeUtf8(c); auto [buf, len] = EncodeUtf8(c);
this->PutBuffer(buf, len); this->PutBuffer({buf, len});
} }
/** /**
* Append buffer. * Append buffer.
*/ */
void StringBuilder::PutBuffer(const char *str, size_type len) void StringBuilder::PutBuffer(std::span<const char> str)
{ {
this->dest->append(str, len); this->dest->append(str.data(), str.size());
} }

View File

@ -26,17 +26,12 @@ public:
/** /**
* Append buffer. * Append buffer.
*/ */
virtual void PutBuffer(const char *str, size_type len) = 0; virtual void PutBuffer(std::span<const char> str) = 0;
/**
* Append span.
*/
void PutBuffer(std::span<const char> str) { this->PutBuffer(str.data(), str.size()); }
/** /**
* Append string. * Append string.
*/ */
void Put(std::string_view str) { this->PutBuffer(str.data(), str.size()); } void Put(std::string_view str) { this->PutBuffer(str); }
void PutUint8(uint8_t value); void PutUint8(uint8_t value);
void PutSint8(int8_t value); void PutSint8(int8_t value);
@ -60,7 +55,7 @@ public:
auto result = std::to_chars(buf.data(), buf.data() + buf.size(), value, base); auto result = std::to_chars(buf.data(), buf.data() + buf.size(), value, base);
if (result.ec != std::errc{}) return; if (result.ec != std::errc{}) return;
size_type len = result.ptr - buf.data(); size_type len = result.ptr - buf.data();
this->PutBuffer(buf.data(), len); this->PutBuffer({buf.data(), len});
} }
}; };
@ -93,8 +88,7 @@ public:
*/ */
[[nodiscard]] std::string &GetString() noexcept { return *dest; } [[nodiscard]] std::string &GetString() noexcept { return *dest; }
using BaseStringBuilder::PutBuffer; void PutBuffer(std::span<const char> str) override;
void PutBuffer(const char *str, size_type len) override;
/** /**
* Append string. * Append string.

View File

@ -32,12 +32,12 @@
/** /**
* Append buffer. * Append buffer.
*/ */
void InPlaceBuilder::PutBuffer(const char *str, size_type len) void InPlaceBuilder::PutBuffer(std::span<const char> str)
{ {
auto unused = this->GetBytesUnused(); auto unused = this->GetBytesUnused();
if (len > unused) NOT_REACHED(); if (str.size() > unused) NOT_REACHED();
std::copy(str, str + len, this->dest.data() + this->position); std::ranges::copy(str, this->dest.data() + this->position);
this->position += len; this->position += str.size();
} }
/** /**

View File

@ -47,8 +47,7 @@ public:
[[nodiscard]] bool AnyBytesUnused() const noexcept; [[nodiscard]] bool AnyBytesUnused() const noexcept;
[[nodiscard]] size_type GetBytesUnused() const noexcept; [[nodiscard]] size_type GetBytesUnused() const noexcept;
using BaseStringBuilder::PutBuffer; void PutBuffer(std::span<const char> str) override;
void PutBuffer(const char *str, size_type len) override;
/** /**
* Implementation of std::back_insert_iterator for non-growing destination buffer. * Implementation of std::back_insert_iterator for non-growing destination buffer.