Simplified string adapters

This commit is contained in:
Benoit Blanchon
2021-06-16 20:54:21 +02:00
parent 2f0b3c0e63
commit eab5ae2f07
8 changed files with 7 additions and 81 deletions

View File

@@ -7,6 +7,7 @@
#include <ArduinoJson/Memory/Alignment.hpp>
#include <ArduinoJson/Polyfills/assert.hpp>
#include <ArduinoJson/Polyfills/mpl/max.hpp>
#include <ArduinoJson/Strings/StringAdapters.hpp>
#include <ArduinoJson/Variant/VariantSlot.hpp>
#include <string.h> // memmove
@@ -64,7 +65,7 @@ class MemoryPool {
return 0;
#if ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
const char* existingCopy = findString(str.begin());
const char* existingCopy = findString(str);
if (existingCopy)
return existingCopy;
#endif
@@ -86,7 +87,7 @@ class MemoryPool {
const char* saveStringFromFreeZone(size_t len) {
#if ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
const char* dup = findString(_left);
const char* dup = findString(adaptString(_left));
if (dup)
return dup;
#endif
@@ -163,16 +164,11 @@ class MemoryPool {
}
#if ARDUINOJSON_ENABLE_STRING_DEDUPLICATION
template <typename TIterator>
const char* findString(TIterator str) {
template <typename TAdaptedString>
const char* findString(const TAdaptedString& str) {
for (char* next = _begin; next < _left; ++next) {
char* begin = next;
// try to match
for (TIterator it = str; *it == *next; ++it) {
if (*next++ == 0)
return begin;
}
if (str.equals(next))
return next;
// jump to next terminator
while (*next) ++next;