// ArduinoJson - https://arduinojson.org // Copyright © 2014-2024, Benoit BLANCHON // MIT License #pragma once #include // Reproduces Arduino's String class class String { public: String() = default; String(const char* s) { if (s) str_.assign(s); } void limitCapacityTo(size_t maxCapacity) { maxCapacity_ = maxCapacity; } unsigned char concat(const char* s) { return concat(s, strlen(s)); } size_t length() const { return str_.size(); } const char* c_str() const { return str_.c_str(); } bool operator==(const char* s) const { return str_ == s; } String& operator=(const char* s) { if (s) str_.assign(s); else str_.clear(); return *this; } char operator[](unsigned int index) const { if (index >= str_.size()) return 0; return str_[index]; } friend std::ostream& operator<<(std::ostream& lhs, const ::String& rhs) { lhs << rhs.str_; return lhs; } protected: // This function is protected in most Arduino cores unsigned char concat(const char* s, size_t n) { if (str_.size() + n > maxCapacity_) return 0; str_.append(s, n); return 1; } private: std::string str_; size_t maxCapacity_ = 1024; }; class StringSumHelper : public ::String {}; inline bool operator==(const std::string& lhs, const ::String& rhs) { return lhs == rhs.c_str(); }