@@ -36,14 +36,6 @@ constexpr size_t sizeofString(size_t n) {
36
36
return n + 1 + offsetof (StringNode, data);
37
37
}
38
38
39
- // _begin _end
40
- // v v
41
- // +-------------+--------------+--------------+
42
- // | strings... | (free) | ...variants |
43
- // +-------------+--------------+--------------+
44
- // ^ ^
45
- // _left _right
46
-
47
39
class MemoryPool {
48
40
public:
49
41
MemoryPool (size_t capa, Allocator* allocator = DefaultAllocator::instance())
@@ -65,10 +57,9 @@ class MemoryPool {
65
57
_allocator = src._allocator ;
66
58
_begin = src._begin ;
67
59
_end = src._end ;
68
- _left = src._left ;
69
60
_right = src._right ;
70
61
_overflowed = src._overflowed ;
71
- src._begin = src._end = src._left = src. _right = nullptr ;
62
+ src._begin = src._end = src._right = nullptr ;
72
63
_strings = src._strings ;
73
64
src._strings = nullptr ;
74
65
return *this ;
@@ -97,7 +88,7 @@ class MemoryPool {
97
88
}
98
89
99
90
size_t size () const {
100
- size_t total = size_t (_left - _begin + _end - _right);
91
+ size_t total = size_t (_end - _right);
101
92
for (auto node = _strings; node; node = node->next )
102
93
total += sizeofString (node->length );
103
94
return total;
@@ -177,14 +168,13 @@ class MemoryPool {
177
168
}
178
169
179
170
void clear () {
180
- _left = _begin;
181
171
_right = _end;
182
172
_overflowed = false ;
183
173
deallocAllStrings ();
184
174
}
185
175
186
176
bool canAlloc (size_t bytes) const {
187
- return _left + bytes <= _right;
177
+ return _begin + bytes <= _right;
188
178
}
189
179
190
180
bool owns (void * p) const {
@@ -213,19 +203,8 @@ class MemoryPool {
213
203
}
214
204
215
205
private:
216
- // Squash the free space between strings and variants
217
- //
218
- // _begin _end
219
- // v v
220
- // +-------------+--------------+
221
- // | strings... | ...variants |
222
- // +-------------+--------------+
223
- // ^
224
- // _left _right
225
- //
226
- // This funcion is called before a realloc.
227
206
ptrdiff_t squash () {
228
- char * new_right = addPadding (_left );
207
+ char * new_right = addPadding (_begin );
229
208
if (new_right >= _right)
230
209
return 0 ;
231
210
@@ -242,14 +221,12 @@ class MemoryPool {
242
221
// This funcion is called after a realloc.
243
222
void movePointers (ptrdiff_t offset) {
244
223
_begin += offset;
245
- _left += offset;
246
224
_right += offset;
247
225
_end += offset;
248
226
}
249
227
250
228
void checkInvariants () {
251
- ARDUINOJSON_ASSERT (_begin <= _left);
252
- ARDUINOJSON_ASSERT (_left <= _right);
229
+ ARDUINOJSON_ASSERT (_begin <= _right);
253
230
ARDUINOJSON_ASSERT (_right <= _end);
254
231
ARDUINOJSON_ASSERT (isAligned (_right));
255
232
}
@@ -278,7 +255,7 @@ class MemoryPool {
278
255
279
256
void allocPool (size_t capa) {
280
257
auto buf = capa ? reinterpret_cast <char *>(_allocator->allocate (capa)) : 0 ;
281
- _begin = _left = buf;
258
+ _begin = buf;
282
259
_end = _right = buf ? buf + capa : 0 ;
283
260
ARDUINOJSON_ASSERT (isAligned (_begin));
284
261
ARDUINOJSON_ASSERT (isAligned (_right));
@@ -291,7 +268,7 @@ class MemoryPool {
291
268
}
292
269
293
270
Allocator* _allocator;
294
- char *_begin, *_left, * _right, *_end;
271
+ char *_begin, *_right, *_end;
295
272
bool _overflowed;
296
273
StringNode* _strings = nullptr ;
297
274
};
0 commit comments