134 #include <pgmspace.h> 136 #include <avr/pgmspace.h> 140 #include "FCString.h" 146 int compareString(
const char* a,
const char* b) {
150 int compareString(
const char* a,
const String& b) {
151 return strcmp(a, b.c_str());
154 int compareString(
const char* a,
const __FlashStringHelper* b) {
155 return strcmp_P(a, (
const char*)b);
158 int compareString(
const String& a,
const char* b) {
159 return strcmp(a.c_str(), b);
162 int compareString(
const String& a,
const String& b) {
163 return a.compareTo(b);
166 int compareString(
const String& a,
const __FlashStringHelper* b) {
167 return strcmp_P(a.c_str(), (
const char*)b);
170 int compareString(
const __FlashStringHelper* a,
const char* b) {
171 return -strcmp_P(b, (
const char*) a);
177 int compareString(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
178 const char* aa =
reinterpret_cast<const char*
>(a);
179 const char* bb =
reinterpret_cast<const char*
>(b);
182 uint8_t ca = pgm_read_byte(aa);
183 uint8_t cb = pgm_read_byte(bb);
184 if (ca != cb)
return (
int) ca - (int) cb;
185 if (ca ==
'\0')
return 0;
191 int compareString(
const __FlashStringHelper* a,
const String& b) {
192 return -strcmp_P(b.c_str(), (
const char*)a);
195 int compareString(
const FCString& a,
const FCString& b) {
196 if (a.getType() == FCString::kCStringType) {
197 if (b.getType() == FCString::kCStringType) {
198 return compareString(a.getCString(), b.getCString());
200 return compareString(a.getCString(), b.getFString());
203 if (b.getType() == FCString::kCStringType) {
204 return compareString(a.getFString(), b.getCString());
206 return compareString(a.getFString(), b.getFString());
213 int compareStringN(
const char* a,
const char* b,
size_t n) {
214 return strncmp(a, b, n);
217 int compareStringN(
const char* a,
const __FlashStringHelper* b,
size_t n) {
218 return strncmp_P(a, (
const char*)b, n);
221 int compareStringN(
const __FlashStringHelper* a,
const char* b,
size_t n) {
222 return -strncmp_P(b, (
const char*)a, n);
228 int compareStringN(
const __FlashStringHelper* a,
const __FlashStringHelper* b,
230 const char* aa =
reinterpret_cast<const char*
>(a);
231 const char* bb =
reinterpret_cast<const char*
>(b);
234 uint8_t ca = pgm_read_byte(aa);
235 uint8_t cb = pgm_read_byte(bb);
236 if (ca != cb)
return (
int) ca - (int) cb;
237 if (ca ==
'\0')
return 0;
245 int compareStringN(
const FCString& a,
const char* b,
size_t n) {
246 if (a.getType() == FCString::kCStringType) {
247 return compareStringN(a.getCString(), b, n);
249 return compareStringN(a.getFString(), b, n);
253 int compareStringN(
const FCString& a,
const __FlashStringHelper* b,
size_t n) {
254 if (a.getType() == FCString::kCStringType) {
255 return compareStringN(a.getCString(), b, n);
257 return compareStringN(a.getFString(), b, n);
263 bool compareEqual(
bool a,
bool b) {
267 bool compareEqual(
char a,
char b) {
271 bool compareEqual(
int a,
int b) {
275 bool compareEqual(
unsigned int a,
unsigned int b) {
279 bool compareEqual(
long a,
long b) {
283 bool compareEqual(
unsigned long a,
unsigned long b) {
287 bool compareEqual(
double a,
double b) {
291 bool compareEqual(
const char* a,
const char* b) {
292 return compareString(a, b) == 0;
295 bool compareEqual(
const char* a,
const String& b) {
296 return compareString(a, b) == 0;
299 bool compareEqual(
const char* a,
const __FlashStringHelper* b) {
300 return compareString(a, b) == 0;
303 bool compareEqual(
const __FlashStringHelper* a,
const char* b) {
304 return compareString(a, b) == 0;
307 bool compareEqual(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
308 return compareString(a, b) == 0;
311 bool compareEqual(
const __FlashStringHelper* a,
const String& b) {
312 return compareString(a, b) == 0;
315 bool compareEqual(
const String& a,
const char* b) {
316 return compareString(a, b) == 0;
319 bool compareEqual(
const String& a,
const String& b) {
320 return compareString(a, b) == 0;
323 bool compareEqual(
const String& a,
const __FlashStringHelper* b) {
324 return compareString(a, b) == 0;
329 bool compareLess(
bool a,
bool b) {
333 bool compareLess(
char a,
char b) {
337 bool compareLess(
int a,
int b) {
341 bool compareLess(
unsigned int a,
unsigned int b) {
345 bool compareLess(
long a,
long b) {
349 bool compareLess(
unsigned long a,
unsigned long b) {
353 bool compareLess(
double a,
double b) {
357 bool compareLess(
const char* a,
const char* b) {
358 return compareString(a, b) < 0;
361 bool compareLess(
const char* a,
const String& b) {
362 return compareString(a, b) < 0;
365 bool compareLess(
const char* a,
const __FlashStringHelper* b) {
366 return compareString(a, b) < 0;
369 bool compareLess(
const __FlashStringHelper* a,
const char* b) {
370 return compareString(a, b) < 0;
374 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
375 return compareString(a, b) < 0;
378 bool compareLess(
const __FlashStringHelper* a,
const String& b) {
379 return compareString(a, b) < 0;
382 bool compareLess(
const String& a,
const char* b) {
383 return compareString(a, b) < 0;
386 bool compareLess(
const String& a,
const String& b) {
387 return compareString(a, b) < 0;
390 bool compareLess(
const String& a,
const __FlashStringHelper* b) {
391 return compareString(a, b) < 0;
396 bool compareMore(
bool a,
bool b) {
400 bool compareMore(
char a,
char b) {
404 bool compareMore(
int a,
int b) {
408 bool compareMore(
unsigned int a,
unsigned int b) {
412 bool compareMore(
long a,
long b) {
416 bool compareMore(
unsigned long a,
unsigned long b) {
420 bool compareMore(
double a,
double b) {
424 bool compareMore(
const char* a,
const char* b) {
425 return compareString(a, b) > 0;
428 bool compareMore(
const char* a,
const String& b) {
429 return compareString(a, b) > 0;
432 bool compareMore(
const char* a,
const __FlashStringHelper* b) {
433 return compareString(a, b) > 0;
436 bool compareMore(
const __FlashStringHelper* a,
const char* b) {
437 return compareString(a, b) > 0;
440 bool compareMore(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
441 return compareString(a, b) > 0;
444 bool compareMore(
const __FlashStringHelper* a,
const String& b) {
445 return compareString(a, b) > 0;
448 bool compareMore(
const String& a,
const char* b) {
449 return compareString(a, b) > 0;
452 bool compareMore(
const String& a,
const String& b) {
453 return compareString(a, b) > 0;
456 bool compareMore(
const String& a,
const __FlashStringHelper* b) {
457 return compareString(a, b) > 0;
462 bool compareLessOrEqual(
bool a,
bool b) {
466 bool compareLessOrEqual(
char a,
char b) {
470 bool compareLessOrEqual(
int a,
int b) {
474 bool compareLessOrEqual(
unsigned int a,
unsigned int b) {
478 bool compareLessOrEqual(
long a,
long b) {
482 bool compareLessOrEqual(
unsigned long a,
unsigned long b) {
486 bool compareLessOrEqual(
double a,
double b) {
490 bool compareLessOrEqual(
const char* a,
const char* b) {
491 return compareString(a, b) <= 0;
494 bool compareLessOrEqual(
const char* a,
const String& b) {
495 return compareString(a, b) <= 0;
498 bool compareLessOrEqual(
const char* a,
const __FlashStringHelper* b) {
499 return compareString(a, b) <= 0;
502 bool compareLessOrEqual(
const __FlashStringHelper* a,
const char* b) {
503 return compareString(a, b) <= 0;
506 bool compareLessOrEqual(
507 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
508 return compareString(a, b) <= 0;
511 bool compareLessOrEqual(
const __FlashStringHelper* a,
const String& b) {
512 return compareString(a, b) <= 0;
515 bool compareLessOrEqual(
const String& a,
const char* b) {
516 return compareString(a, b) <= 0;
519 bool compareLessOrEqual(
const String& a,
const String& b) {
520 return compareString(a, b) <= 0;
523 bool compareLessOrEqual(
const String& a,
const __FlashStringHelper* b) {
524 return compareString(a, b) <= 0;
529 bool compareMoreOrEqual(
bool a,
bool b) {
533 bool compareMoreOrEqual(
char a,
char b) {
537 bool compareMoreOrEqual(
int a,
int b) {
541 bool compareMoreOrEqual(
unsigned int a,
unsigned int b) {
545 bool compareMoreOrEqual(
long a,
long b) {
549 bool compareMoreOrEqual(
unsigned long a,
unsigned long b) {
553 bool compareMoreOrEqual(
double a,
double b) {
557 bool compareMoreOrEqual(
const char* a,
const char* b) {
558 return compareString(a, b) >= 0;
561 bool compareMoreOrEqual(
const char* a,
const String& b) {
562 return compareString(a, b) >= 0;
565 bool compareMoreOrEqual(
const char* a,
const __FlashStringHelper* b) {
566 return compareString(a, b) >= 0;
569 bool compareMoreOrEqual(
const __FlashStringHelper* a,
const char* b) {
570 return compareString(a, b) >= 0;
573 bool compareMoreOrEqual(
574 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
575 return compareString(a, b) >= 0;
578 bool compareMoreOrEqual(
const __FlashStringHelper* a,
const String& b) {
579 return compareString(a, b) >= 0;
582 bool compareMoreOrEqual(
const String& a,
const char* b) {
583 return compareString(a, b) >= 0;
586 bool compareMoreOrEqual(
const String& a,
const String& b) {
587 return compareString(a, b) >= 0;
590 bool compareMoreOrEqual(
const String& a,
const __FlashStringHelper* b) {
591 return compareString(a, b) >= 0;
596 bool compareNotEqual(
bool a,
bool b) {
600 bool compareNotEqual(
char a,
char b) {
604 bool compareNotEqual(
int a,
int b) {
608 bool compareNotEqual(
unsigned int a,
unsigned int b) {
612 bool compareNotEqual(
long a,
long b) {
616 bool compareNotEqual(
unsigned long a,
unsigned long b) {
620 bool compareNotEqual(
double a,
double b) {
624 bool compareNotEqual(
const char* a,
const char* b) {
625 return compareString(a, b) != 0;
628 bool compareNotEqual(
const char* a,
const String& b) {
629 return compareString(a, b) != 0;
632 bool compareNotEqual(
const char* a,
const __FlashStringHelper* b) {
633 return compareString(a, b) != 0;
636 bool compareNotEqual(
const __FlashStringHelper* a,
const char* b) {
637 return compareString(a, b) != 0;
640 bool compareNotEqual(
641 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
642 return compareString(a, b) != 0;
645 bool compareNotEqual(
const __FlashStringHelper* a,
const String& b) {
646 return compareString(a, b) != 0;
649 bool compareNotEqual(
const String& a,
const char* b) {
650 return compareString(a, b) != 0;
653 bool compareNotEqual(
const String& a,
const String& b) {
654 return compareString(a, b) != 0;
657 bool compareNotEqual(
const String& a,
const __FlashStringHelper* b) {
658 return compareString(a, b) != 0;