Separate string adapter from storage policy

This commit is contained in:
Benoit Blanchon
2021-11-21 15:07:56 +01:00
parent 51937778dd
commit ca24ed48f5
37 changed files with 697 additions and 724 deletions

View File

@@ -4,24 +4,85 @@
#pragma once
#include <ArduinoJson/Strings/Adapters/ConstRamStringAdapter.hpp>
#include <ArduinoJson/Strings/Adapters/JsonStringAdapter.hpp>
#include <ArduinoJson/Strings/Adapters/RamStringAdapter.hpp>
#include <ArduinoJson/Strings/Adapters/SizedRamStringAdapter.hpp>
#include <ArduinoJson/Polyfills/type_traits.hpp>
#include <ArduinoJson/Strings/Adapters/JsonString.hpp>
#include <ArduinoJson/Strings/Adapters/RamString.hpp>
#if ARDUINOJSON_ENABLE_STD_STRING
# include <ArduinoJson/Strings/Adapters/StdStringAdapter.hpp>
# include <ArduinoJson/Strings/Adapters/StdString.hpp>
#endif
#if ARDUINOJSON_ENABLE_STRING_VIEW
# include <ArduinoJson/Strings/Adapters/StringViewAdapter.hpp>
# include <ArduinoJson/Strings/Adapters/StringView.hpp>
#endif
#if ARDUINOJSON_ENABLE_ARDUINO_STRING
# include <ArduinoJson/Strings/Adapters/ArduinoStringAdapter.hpp>
# include <ArduinoJson/Strings/Adapters/ArduinoString.hpp>
#endif
#if ARDUINOJSON_ENABLE_PROGMEM
# include <ArduinoJson/Strings/Adapters/FlashStringAdapter.hpp>
# include <ArduinoJson/Strings/Adapters/SizedFlashStringAdapter.hpp>
# include <ArduinoJson/Strings/Adapters/FlashString.hpp>
#endif
namespace ARDUINOJSON_NAMESPACE {
template <typename TAdaptedString1, typename TAdaptedString2>
typename enable_if<TAdaptedString1::typeSortKey <= TAdaptedString2::typeSortKey,
int>::type
stringCompare(TAdaptedString1 s1, TAdaptedString2 s2) {
ARDUINOJSON_ASSERT(!s1.isNull());
ARDUINOJSON_ASSERT(!s2.isNull());
size_t size1 = s1.size();
size_t size2 = s2.size();
size_t n = size1 < size2 ? size1 : size2;
for (size_t i = 0; i < n; i++) {
if (s1[i] != s2[i])
return s1[i] - s2[i];
}
if (size1 < size2)
return -1;
if (size1 > size2)
return 1;
return 0;
}
template <typename TAdaptedString1, typename TAdaptedString2>
typename enable_if<
(TAdaptedString1::typeSortKey > TAdaptedString2::typeSortKey), int>::type
stringCompare(TAdaptedString1 s1, TAdaptedString2 s2) {
return -stringCompare(s2, s1);
}
template <typename TAdaptedString1, typename TAdaptedString2>
typename enable_if<TAdaptedString1::typeSortKey <= TAdaptedString2::typeSortKey,
bool>::type
stringEquals(TAdaptedString1 s1, TAdaptedString2 s2) {
ARDUINOJSON_ASSERT(!s1.isNull());
ARDUINOJSON_ASSERT(!s2.isNull());
size_t size1 = s1.size();
size_t size2 = s2.size();
if (size1 != size2)
return false;
for (size_t i = 0; i < size1; i++) {
if (s1[i] != s2[i])
return false;
}
return true;
}
template <typename TAdaptedString1, typename TAdaptedString2>
typename enable_if<
(TAdaptedString1::typeSortKey > TAdaptedString2::typeSortKey), bool>::type
stringEquals(TAdaptedString1 s1, TAdaptedString2 s2) {
return stringEquals(s2, s1);
}
template <typename TAdaptedString>
static void stringGetChars(TAdaptedString s, char* p, size_t n) {
ARDUINOJSON_ASSERT(s.size() <= n);
for (size_t i = 0; i < n; i++) {
p[i] = s[i];
}
}
} // namespace ARDUINOJSON_NAMESPACE