* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include "basictypes/StringBuilder.h"
StringBuilder::StringBuilder()
{
value.reserve(INIT_SIZE);
}
StringBuilder::StringBuilder(std::string str)
{
value.reserve(str.length() + 16);
this->append(str);
}
StringBuilder::StringBuilder(int size)
{
value.reserve(size);
}
StringBuilder::~StringBuilder()
{
value.clear();
}
StringBuilder* StringBuilder::append(String *input)
{
if (input == nullptr) {
return append("null");
}
const auto val = input->getValue();
if (val.empty()) return this;
value.insert(value.end(), val.begin(), val.end());
return this;
}
StringBuilder* StringBuilder::append(int32_t input)
{
std::string num2Str = std::to_string(input);
if (num2Str.empty()) return this;
value.insert(value.end(), num2Str.begin(), num2Str.end());
return this;
}
StringBuilder* StringBuilder::append(int64_t input)
{
std::string num2Str = std::to_string(input);
if (num2Str.empty()) return this;
value.insert(value.end(), num2Str.begin(), num2Str.end());
return this;
}
int32_t StringBuilder::length()
{
return value.size();
}
StringBuilder* StringBuilder::deleteCharAt(int32_t idx)
{
if (idx >= 0 && idx < value.size()) {
value.erase(value.begin() + idx);
} else {
THROW_LOGIC_EXCEPTION("index of bounds");
}
return this;
}
StringBuilder* StringBuilder::append(Object *input)
{
if (input == nullptr) {
return append("null");
}
auto value = input->toString();
return this->append(value);
}
StringBuilder* StringBuilder::append(const std::string &input)
{
if (input.empty()) return this;
value.insert(value.end(), input.begin(), input.end());
return this;
}
std::string StringBuilder::toString()
{
return std::string(value.data(), value.size());
}