forked from bblanchon/ArduinoJson
Remove unused MemoryPool::_left
This commit is contained in:
@ -36,14 +36,6 @@ constexpr size_t sizeofString(size_t n) {
|
|||||||
return n + 1 + offsetof(StringNode, data);
|
return n + 1 + offsetof(StringNode, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// _begin _end
|
|
||||||
// v v
|
|
||||||
// +-------------+--------------+--------------+
|
|
||||||
// | strings... | (free) | ...variants |
|
|
||||||
// +-------------+--------------+--------------+
|
|
||||||
// ^ ^
|
|
||||||
// _left _right
|
|
||||||
|
|
||||||
class MemoryPool {
|
class MemoryPool {
|
||||||
public:
|
public:
|
||||||
MemoryPool(size_t capa, Allocator* allocator = DefaultAllocator::instance())
|
MemoryPool(size_t capa, Allocator* allocator = DefaultAllocator::instance())
|
||||||
@ -65,10 +57,9 @@ class MemoryPool {
|
|||||||
_allocator = src._allocator;
|
_allocator = src._allocator;
|
||||||
_begin = src._begin;
|
_begin = src._begin;
|
||||||
_end = src._end;
|
_end = src._end;
|
||||||
_left = src._left;
|
|
||||||
_right = src._right;
|
_right = src._right;
|
||||||
_overflowed = src._overflowed;
|
_overflowed = src._overflowed;
|
||||||
src._begin = src._end = src._left = src._right = nullptr;
|
src._begin = src._end = src._right = nullptr;
|
||||||
_strings = src._strings;
|
_strings = src._strings;
|
||||||
src._strings = nullptr;
|
src._strings = nullptr;
|
||||||
return *this;
|
return *this;
|
||||||
@ -97,7 +88,7 @@ class MemoryPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const {
|
size_t size() const {
|
||||||
size_t total = size_t(_left - _begin + _end - _right);
|
size_t total = size_t(_end - _right);
|
||||||
for (auto node = _strings; node; node = node->next)
|
for (auto node = _strings; node; node = node->next)
|
||||||
total += sizeofString(node->length);
|
total += sizeofString(node->length);
|
||||||
return total;
|
return total;
|
||||||
@ -177,14 +168,13 @@ class MemoryPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
_left = _begin;
|
|
||||||
_right = _end;
|
_right = _end;
|
||||||
_overflowed = false;
|
_overflowed = false;
|
||||||
deallocAllStrings();
|
deallocAllStrings();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool canAlloc(size_t bytes) const {
|
bool canAlloc(size_t bytes) const {
|
||||||
return _left + bytes <= _right;
|
return _begin + bytes <= _right;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool owns(void* p) const {
|
bool owns(void* p) const {
|
||||||
@ -213,19 +203,8 @@ class MemoryPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Squash the free space between strings and variants
|
|
||||||
//
|
|
||||||
// _begin _end
|
|
||||||
// v v
|
|
||||||
// +-------------+--------------+
|
|
||||||
// | strings... | ...variants |
|
|
||||||
// +-------------+--------------+
|
|
||||||
// ^
|
|
||||||
// _left _right
|
|
||||||
//
|
|
||||||
// This funcion is called before a realloc.
|
|
||||||
ptrdiff_t squash() {
|
ptrdiff_t squash() {
|
||||||
char* new_right = addPadding(_left);
|
char* new_right = addPadding(_begin);
|
||||||
if (new_right >= _right)
|
if (new_right >= _right)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -242,14 +221,12 @@ class MemoryPool {
|
|||||||
// This funcion is called after a realloc.
|
// This funcion is called after a realloc.
|
||||||
void movePointers(ptrdiff_t offset) {
|
void movePointers(ptrdiff_t offset) {
|
||||||
_begin += offset;
|
_begin += offset;
|
||||||
_left += offset;
|
|
||||||
_right += offset;
|
_right += offset;
|
||||||
_end += offset;
|
_end += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkInvariants() {
|
void checkInvariants() {
|
||||||
ARDUINOJSON_ASSERT(_begin <= _left);
|
ARDUINOJSON_ASSERT(_begin <= _right);
|
||||||
ARDUINOJSON_ASSERT(_left <= _right);
|
|
||||||
ARDUINOJSON_ASSERT(_right <= _end);
|
ARDUINOJSON_ASSERT(_right <= _end);
|
||||||
ARDUINOJSON_ASSERT(isAligned(_right));
|
ARDUINOJSON_ASSERT(isAligned(_right));
|
||||||
}
|
}
|
||||||
@ -278,7 +255,7 @@ class MemoryPool {
|
|||||||
|
|
||||||
void allocPool(size_t capa) {
|
void allocPool(size_t capa) {
|
||||||
auto buf = capa ? reinterpret_cast<char*>(_allocator->allocate(capa)) : 0;
|
auto buf = capa ? reinterpret_cast<char*>(_allocator->allocate(capa)) : 0;
|
||||||
_begin = _left = buf;
|
_begin = buf;
|
||||||
_end = _right = buf ? buf + capa : 0;
|
_end = _right = buf ? buf + capa : 0;
|
||||||
ARDUINOJSON_ASSERT(isAligned(_begin));
|
ARDUINOJSON_ASSERT(isAligned(_begin));
|
||||||
ARDUINOJSON_ASSERT(isAligned(_right));
|
ARDUINOJSON_ASSERT(isAligned(_right));
|
||||||
@ -291,7 +268,7 @@ class MemoryPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Allocator* _allocator;
|
Allocator* _allocator;
|
||||||
char *_begin, *_left, *_right, *_end;
|
char *_begin, *_right, *_end;
|
||||||
bool _overflowed;
|
bool _overflowed;
|
||||||
StringNode* _strings = nullptr;
|
StringNode* _strings = nullptr;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user