From 811f90da2fc947adbe9c7363a02727f6eb16b22a Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 29 Sep 2023 13:13:56 +0300 Subject: [PATCH] Add StringBuilder::append_char. --- tdutils/td/utils/StringBuilder.cpp | 18 +++++++++++++++++- tdutils/td/utils/StringBuilder.h | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/tdutils/td/utils/StringBuilder.cpp b/tdutils/td/utils/StringBuilder.cpp index 941394e19..2d86f1118 100644 --- a/tdutils/td/utils/StringBuilder.cpp +++ b/tdutils/td/utils/StringBuilder.cpp @@ -8,7 +8,6 @@ #include "td/utils/misc.h" #include "td/utils/port/thread_local.h" -#include "td/utils/Slice.h" #include #include @@ -51,6 +50,23 @@ StringBuilder &StringBuilder::operator<<(Slice slice) { return *this; } +void StringBuilder::append_char(size_t count, char c) { + if (unlikely(!reserve(count))) { + if (end_ptr_ < current_ptr_) { + on_error(); + return; + } + auto available_size = static_cast(end_ptr_ + RESERVED_SIZE - 1 - current_ptr_); + if (count > available_size) { + error_flag_ = true; + count = available_size; + } + } + + MutableSlice(current_ptr_, count).fill(c); + current_ptr_ += count; +} + template static char *print_uint(char *current_ptr, T x) { if (x < 100) { diff --git a/tdutils/td/utils/StringBuilder.h b/tdutils/td/utils/StringBuilder.h index 3431a01ab..ce82bd990 100644 --- a/tdutils/td/utils/StringBuilder.h +++ b/tdutils/td/utils/StringBuilder.h @@ -44,6 +44,8 @@ class StringBuilder { *current_ptr_++ = c; } + void append_char(size_t count, char c); + MutableCSlice as_cslice() { if (current_ptr_ >= end_ptr_ + RESERVED_SIZE) { std::abort(); // shouldn't happen