Sprucing up some of alloy.
This commit is contained in:
@@ -11,20 +11,21 @@
|
||||
|
||||
namespace alloy {
|
||||
|
||||
StringBuffer::StringBuffer(size_t initial_capacity)
|
||||
: buffer_(0), capacity_(0), offset_(0) {
|
||||
capacity_ = MAX(initial_capacity, 1024);
|
||||
buffer_ = (char*)xe_calloc(capacity_);
|
||||
buffer_[0] = 0;
|
||||
StringBuffer::StringBuffer(size_t initial_capacity) : offset_(0) {
|
||||
buffer_.resize(MAX(initial_capacity, 1024));
|
||||
}
|
||||
|
||||
StringBuffer::~StringBuffer() { xe_free(buffer_); }
|
||||
StringBuffer::~StringBuffer() = default;
|
||||
|
||||
void StringBuffer::Reset() {
|
||||
offset_ = 0;
|
||||
buffer_[0] = 0;
|
||||
}
|
||||
|
||||
void StringBuffer::Append(const std::string& value) {
|
||||
Append(value.c_str());
|
||||
}
|
||||
|
||||
void StringBuffer::Append(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
@@ -34,12 +35,10 @@ void StringBuffer::Append(const char* format, ...) {
|
||||
|
||||
void StringBuffer::AppendVarargs(const char* format, va_list args) {
|
||||
while (true) {
|
||||
int len =
|
||||
xevsnprintfa(buffer_ + offset_, capacity_ - offset_ - 1, format, args);
|
||||
int len = vsnprintf(buffer_.data() + offset_, buffer_.size() - offset_ - 1,
|
||||
format, args);
|
||||
if (len == -1) {
|
||||
size_t old_capacity = capacity_;
|
||||
capacity_ = capacity_ * 2;
|
||||
buffer_ = (char*)xe_realloc(buffer_, old_capacity, capacity_);
|
||||
buffer_.resize(buffer_.size() * 2);
|
||||
continue;
|
||||
} else {
|
||||
offset_ += len;
|
||||
@@ -50,18 +49,16 @@ void StringBuffer::AppendVarargs(const char* format, va_list args) {
|
||||
}
|
||||
|
||||
void StringBuffer::AppendBytes(const uint8_t* buffer, size_t length) {
|
||||
if (offset_ + length > capacity_) {
|
||||
size_t old_capacity = capacity_;
|
||||
capacity_ = MAX(capacity_ * 2, capacity_ + length);
|
||||
buffer_ = (char*)xe_realloc(buffer_, old_capacity, capacity_);
|
||||
if (offset_ + length > buffer_.size()) {
|
||||
buffer_.resize(MAX(buffer_.size() * 2, buffer_.size() + length));
|
||||
}
|
||||
xe_copy_memory(buffer_ + offset_, capacity_ - offset_, buffer, length);
|
||||
memcpy(buffer_.data() + offset_, buffer, length);
|
||||
offset_ += length;
|
||||
buffer_[offset_] = 0;
|
||||
}
|
||||
|
||||
const char* StringBuffer::GetString() const { return buffer_; }
|
||||
const char* StringBuffer::GetString() const { return buffer_.data(); }
|
||||
|
||||
char* StringBuffer::ToString() { return xestrdupa(buffer_); }
|
||||
char* StringBuffer::ToString() { return strdup(buffer_.data()); }
|
||||
|
||||
} // namespace alloy
|
||||
|
||||
Reference in New Issue
Block a user