Sprucing up some of alloy.

This commit is contained in:
Ben Vanik
2014-07-13 21:15:37 -07:00
parent 48425da8ff
commit 9437d0b564
40 changed files with 246 additions and 228 deletions

View File

@@ -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