12#ifndef STRING_BUILDER_HPP
13#define STRING_BUILDER_HPP
22 using size_type = std::string_view::size_type;
29 virtual void PutBuffer(std::span<const char> str) = 0;
54 std::array<char, 32> buf;
55 auto result = std::to_chars(buf.data(), buf.data() + buf.size(), value, base);
56 if (result.ec != std::errc{})
return;
57 size_type len = result.ptr - buf.data();
77 [[nodiscard]]
bool AnyBytesWritten() const noexcept {
return !this->dest->empty(); }
81 [[nodiscard]] size_type
GetBytesWritten() const noexcept {
return this->dest->size(); }
85 [[nodiscard]]
const std::string &
GetWrittenData() const noexcept {
return *dest; }
89 [[nodiscard]] std::string &
GetString() noexcept {
return *dest; }
91 void PutBuffer(std::span<const char> str)
override;
102 using back_insert_iterator = std::back_insert_iterator<std::string>;
108 return back_insert_iterator(*this->dest);
Compose data into a string / buffer.
virtual void PutBuffer(std::span< const char > str)=0
Append buffer.
void PutUint32LE(uint32_t value)
Append binary uint32 using little endian.
void PutSint8(int8_t value)
Append binary int8.
void PutUint64LE(uint64_t value)
Append binary uint64 using little endian.
void PutSint64LE(int64_t value)
Append binary int64 using little endian.
void PutUtf8(char32_t c)
Append UTF.8 char.
void PutUint16LE(uint16_t value)
Append binary uint16 using little endian.
void PutSint32LE(int32_t value)
Append binary int32 using little endian.
void Put(std::string_view str)
Append string.
void PutIntegerBase(T value, int base)
Append integer 'value' in given number 'base'.
void PutChar(char c)
Append 8-bit char.
void PutSint16LE(int16_t value)
Append binary int16 using little endian.
void PutUint8(uint8_t value)
Append binary uint8.
Compose data into a growing std::string.
const std::string & GetWrittenData() const noexcept
Get already written data.
std::string & GetString() noexcept
Get mutable already written data.
back_insert_iterator back_inserter()
Create a back-insert-iterator.
StringBuilder & operator+=(std::string_view str)
Append string.
void PutBuffer(std::span< const char > str) override
Append buffer.
size_type GetBytesWritten() const noexcept
Get number of already written bytes.
StringBuilder(std::string &dest)
Construct StringBuilder into destination string.
bool AnyBytesWritten() const noexcept
Check whether any bytes have been written.