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)
{
auto [buf, len] = EncodeUtf8(c);
this->PutBuffer(buf, len);
this->PutBuffer({buf, len});
}
/**
* 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.
*/
virtual void PutBuffer(const char *str, size_type len) = 0;
/**
* Append span.
*/
void PutBuffer(std::span<const char> str) { this->PutBuffer(str.data(), str.size()); }
virtual void PutBuffer(std::span<const char> str) = 0;
/**
* 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 PutSint8(int8_t value);
@ -60,7 +55,7 @@ public:
auto result = std::to_chars(buf.data(), buf.data() + buf.size(), value, base);
if (result.ec != std::errc{}) return;
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; }
using BaseStringBuilder::PutBuffer;
void PutBuffer(const char *str, size_type len) override;
void PutBuffer(std::span<const char> str) override;
/**
* Append string.

View File

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

View File

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