Test: change ControllableAllocator into a decorator

This commit is contained in:
Benoit Blanchon
2023-04-02 16:55:02 +02:00
parent e858570afb
commit acd465b365

View File

@ -136,19 +136,21 @@ class SpyingAllocator : public ArduinoJson::Allocator {
class ControllableAllocator : public ArduinoJson::Allocator { class ControllableAllocator : public ArduinoJson::Allocator {
public: public:
ControllableAllocator() : _enabled(true) {} ControllableAllocator(
Allocator* upstream = ArduinoJson::detail::DefaultAllocator::instance())
: _enabled(true), _upstream(upstream) {}
virtual ~ControllableAllocator() {} virtual ~ControllableAllocator() {}
void* allocate(size_t n) override { void* allocate(size_t n) override {
return _enabled ? malloc(n) : 0; return _enabled ? _upstream->allocate(n) : 0;
} }
void deallocate(void* p) override { void deallocate(void* p) override {
free(p); _upstream->deallocate(p);
} }
void* reallocate(void* ptr, size_t n) override { void* reallocate(void* ptr, size_t n) override {
return realloc(ptr, n); return _upstream->reallocate(ptr, n);
} }
void disable() { void disable() {
@ -157,4 +159,5 @@ class ControllableAllocator : public ArduinoJson::Allocator {
private: private:
bool _enabled; bool _enabled;
Allocator* _upstream;
}; };