25 #ifndef ACE_COMMON_KSTRING_H
26 #define ACE_COMMON_KSTRING_H
29 class __FlashStringHelper;
32 namespace ace_common {
34 class KStringIterator;
70 const char*
const* keywords,
74 keywords_((const void* const*) keywords),
75 stringType_(kTypeCstring),
76 keywordType_(kTypeCstring),
77 numKeywords_(numKeywords > 0x20 ? 0x20 : numKeywords)
92 const __FlashStringHelper* s,
93 const char*
const* keywords,
97 keywords_((const void* const*) keywords),
98 stringType_(kTypeFstring),
99 keywordType_(kTypeCstring),
100 numKeywords_(numKeywords > 0x20 ? 0x20 : numKeywords)
121 const __FlashStringHelper*
const* keywords,
125 keywords_((const void* const*) keywords),
126 stringType_(kTypeCstring),
127 keywordType_(kTypeFstring),
128 numKeywords_(numKeywords > 0x20 ? 0x20 : numKeywords)
148 const __FlashStringHelper* s,
149 const __FlashStringHelper*
const* keywords,
153 keywords_((const void* const*) keywords),
154 stringType_(kTypeFstring),
155 keywordType_(kTypeFstring),
156 numKeywords_(numKeywords > 0x20 ? 0x20 : numKeywords)
178 static const uint8_t kTypeCstring = 0;
179 static const uint8_t kTypeFstring = 1;
183 const void*
const string_;
184 const void*
const*
const keywords_;
185 uint8_t
const stringType_;
186 uint8_t
const keywordType_;
187 uint8_t
const numKeywords_;
203 firstPtr_((const char*) ks.string_),
205 firstType_(ks.stringType_),
206 secondType_(
KString::kTypeCstring)
224 static char getInternal(uint8_t type,
const char* p) {
225 return (type == KString::kTypeCstring) ? *p : pgm_read_byte(p);
231 const char* firstPtr_;
232 const char* secondPtr_;
260 const char*
get(uint8_t i)
const {
261 if (type_ == KString::kTypeCstring) {
262 auto words = (
const char*
const*) keywords_;
265 auto words = (
const __FlashStringHelper*
const*) keywords_;
266 return (
const char*) pgm_read_ptr(words + i);
272 const void*
const* keywords_;
An interator that points to a character inside a KString.
KStringIterator(const KString &ks)
Constructor.
void next()
Advance the iterator one character,.
char get()
Return the current character referenced by the iterator.
A thin helper object around an array of const char* in regular memory, or an array of const __FlashSt...
KStringKeywords(uint8_t type, const void *const *keywords)
const char * get(uint8_t i) const
Return the string pointer of index i.
A wrapper class around a normal c-string or Arduino f-string which is encoded and compressed using ke...
void printTo(Print &printer)
Expand and print the current string to the given printer.
KString(const char *s, const __FlashStringHelper *const *keywords, uint8_t numKeywords)
Constructor around a c-string, and an array of keyword strings in flash memory.
int compareTo(const char *s)
Compare this string against a c-string s and return <0, 0 or >0 if this string is <,...
KString(const char *s, const char *const *keywords, uint8_t numKeywords)
Constructor around a simple c-string, and an array of keyword strings in normal memory.
KString(const __FlashStringHelper *s, const __FlashStringHelper *const *keywords, uint8_t numKeywords)
Constructor around an f-string, and an array of keyword strings in flash memory.
KString(const __FlashStringHelper *s, const char *const *keywords, uint8_t numKeywords)
Constructor around an f-string, and an array of keyword strings in normal memory.