mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-17 04:22:18 +02:00
Made JsonBuffer
non-copyable (PR #524 by @luisrayas3)
This commit is contained in:
@ -1,6 +1,11 @@
|
|||||||
ArduinoJson: change log
|
ArduinoJson: change log
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
HEAD
|
||||||
|
----
|
||||||
|
|
||||||
|
* Made `JsonBuffer` non-copyable (PR #524 by @luisrayas3)
|
||||||
|
|
||||||
v5.10.1
|
v5.10.1
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
26
src/ArduinoJson/Data/NonCopyable.hpp
Normal file
26
src/ArduinoJson/Data/NonCopyable.hpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2017
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://bblanchon.github.io/ArduinoJson/
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ArduinoJson {
|
||||||
|
namespace Internals {
|
||||||
|
|
||||||
|
// A type that cannot be copied
|
||||||
|
class NonCopyable {
|
||||||
|
protected:
|
||||||
|
NonCopyable() {}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// copy constructor is private
|
||||||
|
NonCopyable(const NonCopyable&);
|
||||||
|
|
||||||
|
// copy operator is private
|
||||||
|
NonCopyable& operator=(const NonCopyable&);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -22,16 +22,6 @@ class ReferenceType {
|
|||||||
bool operator!=(const ReferenceType& other) const {
|
bool operator!=(const ReferenceType& other) const {
|
||||||
return this != &other;
|
return this != &other;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
ReferenceType() {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
// copy constructor is private
|
|
||||||
ReferenceType(const ReferenceType&);
|
|
||||||
|
|
||||||
// copy operator is private
|
|
||||||
ReferenceType& operator=(const ReferenceType&);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ class JsonArraySubscript;
|
|||||||
// It can also be deserialized from a JSON string via JsonBuffer::parseArray().
|
// It can also be deserialized from a JSON string via JsonBuffer::parseArray().
|
||||||
class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
||||||
public Internals::ReferenceType,
|
public Internals::ReferenceType,
|
||||||
|
public Internals::NonCopyable,
|
||||||
public Internals::List<JsonVariant>,
|
public Internals::List<JsonVariant>,
|
||||||
public Internals::JsonBufferAllocated {
|
public Internals::JsonBufferAllocated {
|
||||||
public:
|
public:
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <stdint.h> // for uint8_t
|
#include <stdint.h> // for uint8_t
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "Data/NonCopyable.hpp"
|
||||||
#include "JsonVariant.hpp"
|
#include "JsonVariant.hpp"
|
||||||
#include "TypeTraits/EnableIf.hpp"
|
#include "TypeTraits/EnableIf.hpp"
|
||||||
#include "TypeTraits/IsArray.hpp"
|
#include "TypeTraits/IsArray.hpp"
|
||||||
@ -34,7 +35,7 @@ class JsonObject;
|
|||||||
// Handle the memory management (done in derived classes) and calls the parser.
|
// Handle the memory management (done in derived classes) and calls the parser.
|
||||||
// This abstract class is implemented by StaticJsonBuffer which implements a
|
// This abstract class is implemented by StaticJsonBuffer which implements a
|
||||||
// fixed memory allocation.
|
// fixed memory allocation.
|
||||||
class JsonBuffer {
|
class JsonBuffer : Internals::NonCopyable {
|
||||||
public:
|
public:
|
||||||
// CAUTION: NO VIRTUAL DESTRUCTOR!
|
// CAUTION: NO VIRTUAL DESTRUCTOR!
|
||||||
// If we add a virtual constructor the Arduino compiler will add malloc() and
|
// If we add a virtual constructor the Arduino compiler will add malloc() and
|
||||||
|
@ -38,6 +38,7 @@ class JsonBuffer;
|
|||||||
// It can also be deserialized from a JSON string via JsonBuffer::parseObject().
|
// It can also be deserialized from a JSON string via JsonBuffer::parseObject().
|
||||||
class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
||||||
public Internals::ReferenceType,
|
public Internals::ReferenceType,
|
||||||
|
public Internals::NonCopyable,
|
||||||
public Internals::List<JsonPair>,
|
public Internals::List<JsonPair>,
|
||||||
public Internals::JsonBufferAllocated {
|
public Internals::JsonBufferAllocated {
|
||||||
public:
|
public:
|
||||||
|
@ -36,10 +36,10 @@ TEST_CASE("DynamicJsonBuffer::alloc()") {
|
|||||||
|
|
||||||
SECTION("Alignment") {
|
SECTION("Alignment") {
|
||||||
// make room for two but not three
|
// make room for two but not three
|
||||||
buffer = DynamicJsonBuffer(2 * sizeof(void*) + 1);
|
DynamicJsonBuffer tinyBuf(2 * sizeof(void*) + 1);
|
||||||
|
|
||||||
REQUIRE(isAligned(buffer.alloc(1))); // this on is aligned by design
|
REQUIRE(isAligned(tinyBuf.alloc(1))); // this on is aligned by design
|
||||||
REQUIRE(isAligned(buffer.alloc(1))); // this one fits in the first block
|
REQUIRE(isAligned(tinyBuf.alloc(1))); // this one fits in the first block
|
||||||
REQUIRE(isAligned(buffer.alloc(1))); // this one requires a new block
|
REQUIRE(isAligned(tinyBuf.alloc(1))); // this one requires a new block
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user