14class ConstStringBuilder {
16 ConstStringBuilder(
char *buf, std::size_t buf_len) : buf_(buf), buf_len_(buf_len) {}
23 ConstStringBuilder &
AddString(
const std::string_view &str) {
24 for (std::size_t i = 0U; i < str.length(); ++i) {
25 if (act_pos_ >= (buf_len_ - 1U)) {
28 buf_[act_pos_] = str[i];
35 if (act_pos_ >= (buf_len_ - 1U)) {
42 ConstStringBuilder &AddInt(i32 no) {
43 if (act_pos_ >= (buf_len_ - 1U)) {
46 std::size_t left_space = buf_len_ -
static_cast<size_t>(act_pos_) -
49 act_pos_ += IntToString(&buf_[act_pos_], left_space - 1U, no);
53 ConstStringBuilder &AddUInt(u32 no) {
54 if (act_pos_ >= (buf_len_ - 1U)) {
57 std::size_t left_space = buf_len_ -
static_cast<size_t>(act_pos_) -
60 act_pos_ += UIntToString(&buf_[act_pos_], left_space - 1U, no);
64 ConstStringBuilder &Terminate() {
65 buf_[act_pos_] =
'\0';
73 u32 IntToString(
char *buf, std::size_t len, i32 number) {
74 std::size_t index = 0U;
84 if (index >= len - 1U) {
87 buf[index++] = (char)((number % 10) +
'0');
97 ReverseString(buf, index);
108 u32 UIntToString(
char *buf, std::size_t len, u32 number) {
109 std::size_t index = 0U;
115 buf[index++] = (char)((number % 10) +
'0');
117 }
while (number > 0);
118 ReverseString(buf, index);
122 void ReverseString(
char *str,
size_t len) {
123 std::size_t start = 0;
124 std::size_t end = len - 1;
125 while (start < end) {
126 char temp = str[start];
127 str[start] = str[end];
136 std::size_t buf_len_;