forked from bblanchon/ArduinoJson
51 lines
882 B
C++
51 lines
882 B
C++
// ArduinoJson - arduinojson.org
|
|
// Copyright Benoit Blanchon 2014-2019
|
|
// MIT License
|
|
|
|
#pragma once
|
|
|
|
#include "MemoryPool.hpp"
|
|
|
|
namespace ARDUINOJSON_NAMESPACE {
|
|
|
|
class StringBuilder {
|
|
public:
|
|
explicit StringBuilder(MemoryPool* parent) : _parent(parent), _size(0) {
|
|
_slot = _parent->allocExpandableString();
|
|
}
|
|
|
|
void append(const char* s) {
|
|
while (*s) append(*s++);
|
|
}
|
|
|
|
void append(const char* s, size_t n) {
|
|
while (n-- > 0) append(*s++);
|
|
}
|
|
|
|
void append(char c) {
|
|
if (!_slot.value) return;
|
|
|
|
if (_size >= _slot.size) {
|
|
_slot.value = 0;
|
|
return;
|
|
}
|
|
|
|
_slot.value[_size++] = c;
|
|
}
|
|
|
|
char* complete() {
|
|
append('\0');
|
|
if (_slot.value) {
|
|
_parent->freezeString(_slot, _size);
|
|
}
|
|
return _slot.value;
|
|
}
|
|
|
|
private:
|
|
MemoryPool* _parent;
|
|
size_t _size;
|
|
StringSlot _slot;
|
|
};
|
|
|
|
} // namespace ARDUINOJSON_NAMESPACE
|