forked from bblanchon/ArduinoJson
Remove ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
This commit is contained in:
@ -9,3 +9,4 @@ HEAD
|
|||||||
* Add abstract `Allocator` class
|
* Add abstract `Allocator` class
|
||||||
* Merge `DynamicJsonDocument` with `JsonDocument`
|
* Merge `DynamicJsonDocument` with `JsonDocument`
|
||||||
* Remove `JSON_ARRAY_SIZE()`, `JSON_OBJECT_SIZE()`, and `JSON_STRING_SIZE()`
|
* Remove `JSON_ARRAY_SIZE()`, `JSON_OBJECT_SIZE()`, and `JSON_STRING_SIZE()`
|
||||||
|
* Remove `ARDUINOJSON_ENABLE_STRING_DEDUPLICATION` (string deduplication cannot be enabled anymore)
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include <catch.hpp>
|
#include <catch.hpp>
|
||||||
|
|
||||||
|
using ArduinoJson::detail::sizeofArray;
|
||||||
using ArduinoJson::detail::sizeofObject;
|
using ArduinoJson::detail::sizeofObject;
|
||||||
using ArduinoJson::detail::sizeofString;
|
using ArduinoJson::detail::sizeofString;
|
||||||
|
|
||||||
@ -133,3 +134,22 @@ TEST_CASE("Empty memory pool") {
|
|||||||
REQUIRE(deserializeJson(doc, empty) == DeserializationError::Ok);
|
REQUIRE(deserializeJson(doc, empty) == DeserializationError::Ok);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Deduplicate values") {
|
||||||
|
JsonDocument doc(1024);
|
||||||
|
deserializeJson(doc, "[\"example\",\"example\"]");
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
||||||
|
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Deduplicate keys") {
|
||||||
|
JsonDocument doc(1024);
|
||||||
|
deserializeJson(doc, "[{\"example\":1},{\"example\":2}]");
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == 2 * sizeofObject(1) + sizeofArray(2) + 8);
|
||||||
|
|
||||||
|
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
||||||
|
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
||||||
|
CHECK(key1 == key2);
|
||||||
|
}
|
||||||
|
@ -2,9 +2,17 @@
|
|||||||
// Copyright © 2014-2023, Benoit BLANCHON
|
// Copyright © 2014-2023, Benoit BLANCHON
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
|
#include "progmem_emulation.hpp"
|
||||||
|
|
||||||
|
#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
|
||||||
|
#define ARDUINOJSON_ENABLE_PROGMEM 1
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
#include <catch.hpp>
|
#include <catch.hpp>
|
||||||
|
|
||||||
|
using ArduinoJson::detail::sizeofArray;
|
||||||
|
using ArduinoJson::detail::sizeofObject;
|
||||||
|
|
||||||
typedef ArduinoJson::detail::MemberProxy<JsonDocument&, const char*>
|
typedef ArduinoJson::detail::MemberProxy<JsonDocument&, const char*>
|
||||||
MemberProxy;
|
MemberProxy;
|
||||||
|
|
||||||
@ -326,3 +334,52 @@ TEST_CASE("MemberProxy::shallowCopy()") {
|
|||||||
|
|
||||||
CHECK(doc1.as<std::string>() == "{\"obj\":{\"hello\":\"world\"}}");
|
CHECK(doc1.as<std::string>() == "{\"obj\":{\"hello\":\"world\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Deduplicate keys") {
|
||||||
|
JsonDocument doc(1024);
|
||||||
|
|
||||||
|
SECTION("std::string") {
|
||||||
|
doc[0][std::string("example")] = 1;
|
||||||
|
doc[1][std::string("example")] = 2;
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
||||||
|
|
||||||
|
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
||||||
|
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
||||||
|
CHECK(key1 == key2);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("char*") {
|
||||||
|
char key[] = "example";
|
||||||
|
doc[0][key] = 1;
|
||||||
|
doc[1][key] = 2;
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
||||||
|
|
||||||
|
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
||||||
|
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
||||||
|
CHECK(key1 == key2);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Arduino String") {
|
||||||
|
doc[0][String("example")] = 1;
|
||||||
|
doc[1][String("example")] = 2;
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
||||||
|
|
||||||
|
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
||||||
|
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
||||||
|
CHECK(key1 == key2);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Flash string") {
|
||||||
|
doc[0][F("example")] = 1;
|
||||||
|
doc[1][F("example")] = 2;
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
||||||
|
|
||||||
|
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
||||||
|
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
||||||
|
CHECK(key1 == key2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,9 +2,16 @@
|
|||||||
// Copyright © 2014-2023, Benoit BLANCHON
|
// Copyright © 2014-2023, Benoit BLANCHON
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
|
#include "progmem_emulation.hpp"
|
||||||
|
|
||||||
|
#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
|
||||||
|
#define ARDUINOJSON_ENABLE_PROGMEM 1
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
#include <catch.hpp>
|
#include <catch.hpp>
|
||||||
|
|
||||||
|
using ArduinoJson::detail::sizeofArray;
|
||||||
|
|
||||||
TEST_CASE("JsonDocument::add()") {
|
TEST_CASE("JsonDocument::add()") {
|
||||||
JsonDocument doc(4096);
|
JsonDocument doc(4096);
|
||||||
|
|
||||||
@ -19,4 +26,37 @@ TEST_CASE("JsonDocument::add()") {
|
|||||||
|
|
||||||
REQUIRE(doc.as<std::string>() == "[\"hello\"]");
|
REQUIRE(doc.as<std::string>() == "[\"hello\"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("std::string") {
|
||||||
|
doc.add(std::string("example"));
|
||||||
|
doc.add(std::string("example"));
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
||||||
|
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("char*") {
|
||||||
|
char value[] = "example";
|
||||||
|
doc.add(value);
|
||||||
|
doc.add(value);
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
||||||
|
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Arduino String") {
|
||||||
|
doc.add(String("example"));
|
||||||
|
doc.add(String("example"));
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
||||||
|
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Flash string") {
|
||||||
|
doc.add(F("example"));
|
||||||
|
doc.add(F("example"));
|
||||||
|
|
||||||
|
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
||||||
|
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,6 @@ add_executable(MixedConfigurationTests
|
|||||||
enable_nan_0.cpp
|
enable_nan_0.cpp
|
||||||
enable_nan_1.cpp
|
enable_nan_1.cpp
|
||||||
enable_progmem_1.cpp
|
enable_progmem_1.cpp
|
||||||
enable_string_deduplication_0.cpp
|
|
||||||
enable_string_deduplication_1.cpp
|
|
||||||
issue1707.cpp
|
issue1707.cpp
|
||||||
use_double_0.cpp
|
use_double_0.cpp
|
||||||
use_double_1.cpp
|
use_double_1.cpp
|
||||||
|
@ -1,123 +0,0 @@
|
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright © 2014-2023, Benoit BLANCHON
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#include "progmem_emulation.hpp"
|
|
||||||
|
|
||||||
#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
|
|
||||||
#define ARDUINOJSON_ENABLE_PROGMEM 1
|
|
||||||
#define ARDUINOJSON_ENABLE_STRING_DEDUPLICATION 0
|
|
||||||
#include <ArduinoJson.h>
|
|
||||||
|
|
||||||
#include <catch.hpp>
|
|
||||||
|
|
||||||
using ArduinoJson::detail::sizeofArray;
|
|
||||||
using ArduinoJson::detail::sizeofObject;
|
|
||||||
|
|
||||||
TEST_CASE("ARDUINOJSON_ENABLE_STRING_DEDUPLICATION = 0") {
|
|
||||||
JsonDocument doc(1024);
|
|
||||||
|
|
||||||
SECTION("deserializeJson()") {
|
|
||||||
SECTION("Deduplicate values") {
|
|
||||||
deserializeJson(doc, "[\"example\",\"example\"]");
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 16);
|
|
||||||
CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Deduplicate keys") {
|
|
||||||
deserializeJson(doc, "[{\"example\":1},{\"example\":2}]");
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == 2 * sizeofObject(1) + sizeofArray(2) + 16);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
|
|
||||||
CHECK(key1 != key2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("JsonDocument") {
|
|
||||||
SECTION("values") {
|
|
||||||
SECTION("std::string") {
|
|
||||||
doc.add(std::string("example"));
|
|
||||||
doc.add(std::string("example"));
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 16);
|
|
||||||
CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("char*") {
|
|
||||||
char value[] = "example";
|
|
||||||
doc.add(value);
|
|
||||||
doc.add(value);
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 16);
|
|
||||||
CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Arduino String") {
|
|
||||||
doc.add(String("example"));
|
|
||||||
doc.add(String("example"));
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 16);
|
|
||||||
CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Flash string") {
|
|
||||||
doc.add(F("example"));
|
|
||||||
doc.add(F("example"));
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 16);
|
|
||||||
CHECK(doc[0].as<const char*>() != doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("keys") {
|
|
||||||
SECTION("std::string") {
|
|
||||||
doc[0][std::string("example")] = 1;
|
|
||||||
doc[1][std::string("example")] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 16);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 != key2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("char*") {
|
|
||||||
char key[] = "example";
|
|
||||||
doc[0][key] = 1;
|
|
||||||
doc[1][key] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 16);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 != key2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Arduino String") {
|
|
||||||
doc[0][String("example")] = 1;
|
|
||||||
doc[1][String("example")] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 16);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 != key2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Flash string") {
|
|
||||||
doc[0][F("example")] = 1;
|
|
||||||
doc[1][F("example")] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 16);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 != key2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
// ArduinoJson - https://arduinojson.org
|
|
||||||
// Copyright © 2014-2023, Benoit BLANCHON
|
|
||||||
// MIT License
|
|
||||||
|
|
||||||
#include "progmem_emulation.hpp"
|
|
||||||
|
|
||||||
#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
|
|
||||||
#define ARDUINOJSON_ENABLE_PROGMEM 1
|
|
||||||
#define ARDUINOJSON_ENABLE_STRING_DEDUPLICATION 1
|
|
||||||
#include <ArduinoJson.h>
|
|
||||||
|
|
||||||
#include <catch.hpp>
|
|
||||||
|
|
||||||
using ArduinoJson::detail::sizeofArray;
|
|
||||||
using ArduinoJson::detail::sizeofObject;
|
|
||||||
|
|
||||||
TEST_CASE("ARDUINOJSON_ENABLE_STRING_DEDUPLICATION = 1") {
|
|
||||||
JsonDocument doc(1024);
|
|
||||||
|
|
||||||
SECTION("deserializeJson()") {
|
|
||||||
SECTION("Deduplicate values") {
|
|
||||||
deserializeJson(doc, "[\"example\",\"example\"]");
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
|
||||||
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Deduplicate keys") {
|
|
||||||
deserializeJson(doc, "[{\"example\":1},{\"example\":2}]");
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == 2 * sizeofObject(1) + sizeofArray(2) + 8);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 == key2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("JsonDocument") {
|
|
||||||
SECTION("values") {
|
|
||||||
SECTION("std::string") {
|
|
||||||
doc.add(std::string("example"));
|
|
||||||
doc.add(std::string("example"));
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
|
||||||
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("char*") {
|
|
||||||
char value[] = "example";
|
|
||||||
doc.add(value);
|
|
||||||
doc.add(value);
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
|
||||||
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Arduino String") {
|
|
||||||
doc.add(String("example"));
|
|
||||||
doc.add(String("example"));
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
|
||||||
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Flash string") {
|
|
||||||
doc.add(F("example"));
|
|
||||||
doc.add(F("example"));
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 8);
|
|
||||||
CHECK(doc[0].as<const char*>() == doc[1].as<const char*>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("keys") {
|
|
||||||
SECTION("std::string") {
|
|
||||||
doc[0][std::string("example")] = 1;
|
|
||||||
doc[1][std::string("example")] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 == key2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("char*") {
|
|
||||||
char key[] = "example";
|
|
||||||
doc[0][key] = 1;
|
|
||||||
doc[1][key] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 == key2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Arduino String") {
|
|
||||||
doc[0][String("example")] = 1;
|
|
||||||
doc[1][String("example")] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 == key2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Flash string") {
|
|
||||||
doc[0][F("example")] = 1;
|
|
||||||
doc[1][F("example")] = 2;
|
|
||||||
|
|
||||||
CHECK(doc.memoryUsage() == sizeofArray(2) + 2 * sizeofObject(1) + 8);
|
|
||||||
|
|
||||||
const char* key1 = doc[0].as<JsonObject>().begin()->key().c_str();
|
|
||||||
const char* key2 = doc[1].as<JsonObject>().begin()->key().c_str();
|
|
||||||
CHECK(key1 == key2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -191,10 +191,6 @@
|
|||||||
# define ARDUINOJSON_TAB " "
|
# define ARDUINOJSON_TAB " "
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
|
|
||||||
# define ARDUINOJSON_ENABLE_STRING_DEDUPLICATION 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ARDUINOJSON_STRING_BUFFER_SIZE
|
#ifndef ARDUINOJSON_STRING_BUFFER_SIZE
|
||||||
# define ARDUINOJSON_STRING_BUFFER_SIZE 32
|
# define ARDUINOJSON_STRING_BUFFER_SIZE 32
|
||||||
#endif
|
#endif
|
||||||
|
@ -105,11 +105,9 @@ class MemoryPool {
|
|||||||
if (str.isNull())
|
if (str.isNull())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
|
|
||||||
const char* existingCopy = findString(str);
|
const char* existingCopy = findString(str);
|
||||||
if (existingCopy)
|
if (existingCopy)
|
||||||
return existingCopy;
|
return existingCopy;
|
||||||
#endif
|
|
||||||
|
|
||||||
size_t n = str.size();
|
size_t n = str.size();
|
||||||
|
|
||||||
@ -127,11 +125,9 @@ class MemoryPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char* saveStringFromFreeZone(size_t len) {
|
const char* saveStringFromFreeZone(size_t len) {
|
||||||
#if ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
|
|
||||||
const char* dup = findString(adaptString(_left, len));
|
const char* dup = findString(adaptString(_left, len));
|
||||||
if (dup)
|
if (dup)
|
||||||
return dup;
|
return dup;
|
||||||
#endif
|
|
||||||
|
|
||||||
const char* str = _left;
|
const char* str = _left;
|
||||||
_left += len;
|
_left += len;
|
||||||
@ -221,7 +217,6 @@ class MemoryPool {
|
|||||||
ARDUINOJSON_ASSERT(isAligned(_right));
|
ARDUINOJSON_ASSERT(isAligned(_right));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
|
|
||||||
template <typename TAdaptedString>
|
template <typename TAdaptedString>
|
||||||
const char* findString(const TAdaptedString& str) const {
|
const char* findString(const TAdaptedString& str) const {
|
||||||
size_t n = str.size();
|
size_t n = str.size();
|
||||||
@ -235,7 +230,6 @@ class MemoryPool {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
char* allocString(size_t n) {
|
char* allocString(size_t n) {
|
||||||
if (!canAlloc(n)) {
|
if (!canAlloc(n)) {
|
||||||
|
@ -10,17 +10,17 @@
|
|||||||
|
|
||||||
#ifndef ARDUINOJSON_VERSION_NAMESPACE
|
#ifndef ARDUINOJSON_VERSION_NAMESPACE
|
||||||
|
|
||||||
# define ARDUINOJSON_VERSION_NAMESPACE \
|
# define ARDUINOJSON_VERSION_NAMESPACE \
|
||||||
ARDUINOJSON_CONCAT3( \
|
ARDUINOJSON_CONCAT3(ARDUINOJSON_CONCAT4(V, ARDUINOJSON_VERSION_MAJOR, \
|
||||||
ARDUINOJSON_CONCAT4(V, ARDUINOJSON_VERSION_MAJOR, \
|
ARDUINOJSON_VERSION_MINOR, \
|
||||||
ARDUINOJSON_VERSION_MINOR, \
|
ARDUINOJSON_VERSION_REVISION), \
|
||||||
ARDUINOJSON_VERSION_REVISION), \
|
ARDUINOJSON_BIN2ALPHA(ARDUINOJSON_ENABLE_PROGMEM, \
|
||||||
ARDUINOJSON_BIN2ALPHA( \
|
ARDUINOJSON_USE_LONG_LONG, \
|
||||||
ARDUINOJSON_ENABLE_PROGMEM, ARDUINOJSON_USE_LONG_LONG, \
|
ARDUINOJSON_USE_DOUBLE, 1), \
|
||||||
ARDUINOJSON_USE_DOUBLE, ARDUINOJSON_ENABLE_STRING_DEDUPLICATION), \
|
ARDUINOJSON_BIN2ALPHA(ARDUINOJSON_ENABLE_NAN, \
|
||||||
ARDUINOJSON_BIN2ALPHA( \
|
ARDUINOJSON_ENABLE_INFINITY, \
|
||||||
ARDUINOJSON_ENABLE_NAN, ARDUINOJSON_ENABLE_INFINITY, \
|
ARDUINOJSON_ENABLE_COMMENTS, \
|
||||||
ARDUINOJSON_ENABLE_COMMENTS, ARDUINOJSON_DECODE_UNICODE))
|
ARDUINOJSON_DECODE_UNICODE))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user