Minh Nguyen / ArduinoJson
Revision:
0:18ba3960b5dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ArduinoJson/Strings/FlashStringAdapter.hpp	Fri Mar 19 19:30:50 2021 +0000
@@ -0,0 +1,62 @@
+// ArduinoJson - arduinojson.org
+// Copyright Benoit Blanchon 2014-2021
+// MIT License
+
+#pragma once
+
+#include <ArduinoJson/Polyfills/pgmspace.hpp>
+#include <ArduinoJson/Strings/FlashStringIterator.hpp>
+#include <ArduinoJson/Strings/IsString.hpp>
+#include <ArduinoJson/Strings/StoragePolicy.hpp>
+
+namespace ARDUINOJSON_NAMESPACE {
+
+class FlashStringAdapter {
+ public:
+  FlashStringAdapter(const __FlashStringHelper* str) : _str(str) {}
+
+  int compare(const char* other) const {
+    if (!other && !_str)
+      return 0;
+    if (!_str)
+      return -1;
+    if (!other)
+      return 1;
+    return -strcmp_P(other, reinterpret_cast<const char*>(_str));
+  }
+
+  bool equals(const char* expected) const {
+    return compare(expected) == 0;
+  }
+
+  bool isNull() const {
+    return !_str;
+  }
+
+  void copyTo(char* p, size_t n) const {
+    memcpy_P(p, reinterpret_cast<const char*>(_str), n);
+  }
+
+  size_t size() const {
+    if (!_str)
+      return 0;
+    return strlen_P(reinterpret_cast<const char*>(_str));
+  }
+
+  FlashStringIterator begin() const {
+    return FlashStringIterator(_str);
+  }
+
+  typedef storage_policies::store_by_copy storage_policy;
+
+ private:
+  const __FlashStringHelper* _str;
+};
+
+inline FlashStringAdapter adaptString(const __FlashStringHelper* str) {
+  return FlashStringAdapter(str);
+}
+
+template <>
+struct IsString<const __FlashStringHelper*> : true_type {};
+}  // namespace ARDUINOJSON_NAMESPACE