134 int compareString(
const char* a,
const char* b) {
135 if (a == b) {
return 0; }
136 if (a ==
nullptr) {
return -1; }
137 if (b ==
nullptr) {
return 1; }
141 int compareString(
const char* a,
const String& b) {
142 if (a ==
nullptr) {
return -1; }
143 return strcmp(a, b.c_str());
146 int compareString(
const char* a,
const __FlashStringHelper* b) {
147 if (a == (
const char*) b) {
return 0; }
148 if (a ==
nullptr) {
return -1; }
149 if (b ==
nullptr) {
return 1; }
150 return strcmp_P(a, (
const char*) b);
153 int compareString(
const String& a,
const char* b) {
154 return -compareString(b, a);
157 int compareString(
const String& a,
const String& b) {
158 return strcmp(a.c_str(), b.c_str());
161 int compareString(
const String& a,
const __FlashStringHelper* b) {
162 if (b ==
nullptr) {
return 1; }
163 return strcmp_P(a.c_str(), (
const char*) b);
166 int compareString(
const __FlashStringHelper* a,
const char* b) {
167 return -compareString(b, a);
170 int compareString(
const __FlashStringHelper* a,
const String& b) {
171 return -compareString(b, a);
177 int compareString(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
178 if (a == b) {
return 0; }
179 if (a ==
nullptr) {
return -1; }
180 if (b ==
nullptr) {
return 1; }
181 const char* aa =
reinterpret_cast<const char*
>(a);
182 const char* bb =
reinterpret_cast<const char*
>(b);
185 uint8_t ca = pgm_read_byte(aa);
186 uint8_t cb = pgm_read_byte(bb);
187 if (ca != cb)
return (
int) ca - (int) cb;
188 if (ca ==
'\0')
return 0;
198 int compareStringCase(
const char* a,
const char* b) {
199 if (a == b) {
return 0; }
200 if (a ==
nullptr) {
return -1; }
201 if (b ==
nullptr) {
return 1; }
202 return strcasecmp(a, b);
205 int compareStringCase(
const char* a,
const String& b) {
206 if (a ==
nullptr) {
return -1; }
207 return strcasecmp(a, b.c_str());
210 int compareStringCase(
const char* a,
const __FlashStringHelper* b) {
211 if (a == (
const char*) b) {
return 0; }
212 if (a ==
nullptr) {
return -1; }
213 if (b ==
nullptr) {
return 1; }
214 return strcasecmp_P(a, (
const char*) b);
217 int compareStringCase(
const String& a,
const char* b) {
218 return -compareStringCase(b, a);
221 int compareStringCase(
const String& a,
const String& b) {
222 return strcasecmp(a.c_str(), b.c_str());
225 int compareStringCase(
const String& a,
const __FlashStringHelper* b) {
226 if (b ==
nullptr) {
return 1; }
227 return strcasecmp_P(a.c_str(), (
const char*) b);
230 int compareStringCase(
const __FlashStringHelper* a,
const char* b) {
231 return -compareStringCase(b, a);
234 int compareStringCase(
const __FlashStringHelper* a,
const String& b) {
235 return -compareStringCase(b, a);
241 int compareStringCase(
const __FlashStringHelper* a,
242 const __FlashStringHelper* b) {
243 if (a == b) {
return 0; }
244 if (a ==
nullptr) {
return -1; }
245 if (b ==
nullptr) {
return 1; }
246 const char* aa =
reinterpret_cast<const char*
>(a);
247 const char* bb =
reinterpret_cast<const char*
>(b);
250 uint8_t ca = pgm_read_byte(aa);
251 uint8_t cb = pgm_read_byte(bb);
252 uint8_t la = tolower(ca);
253 uint8_t lb = tolower(cb);
254 if (la != lb)
return (
int) la - (int) lb;
255 if (ca ==
'\0')
return 0;
269 int compareStringN(
const char* a,
const char* b,
size_t n) {
270 if (a == b) {
return 0; }
271 if (a ==
nullptr) {
return -1; }
272 if (b ==
nullptr) {
return 1; }
273 return strncmp(a, b, n);
276 int compareStringN(
const char* a,
const __FlashStringHelper* b,
size_t n) {
277 if (a == (
const char*) b) {
return 0; }
278 if (a ==
nullptr) {
return -1; }
279 if (b ==
nullptr) {
return 1; }
280 return strncmp_P(a, (
const char*) b, n);
283 int compareStringN(
const __FlashStringHelper* a,
const char* b,
size_t n) {
284 return -compareStringN(b, a, n);
290 int compareStringN(
const __FlashStringHelper* a,
const __FlashStringHelper* b,
292 if (a == b) {
return 0; }
293 if (a ==
nullptr) {
return -1; }
294 if (b ==
nullptr) {
return 1; }
295 const char* aa =
reinterpret_cast<const char*
>(a);
296 const char* bb =
reinterpret_cast<const char*
>(b);
299 uint8_t ca = pgm_read_byte(aa);
300 uint8_t cb = pgm_read_byte(bb);
301 if (ca != cb)
return (
int) ca - (int) cb;
302 if (ca ==
'\0')
return 0;
314 bool compareEqual(
bool a,
bool b) {
318 bool compareEqual(
char a,
char b) {
322 bool compareEqual(
int a,
int b) {
326 bool compareEqual(
unsigned int a,
unsigned int b) {
330 bool compareEqual(
long a,
long b) {
334 bool compareEqual(
unsigned long a,
unsigned long b) {
338 bool compareEqual(
long long a,
long long b) {
342 bool compareEqual(
unsigned long long a,
unsigned long long b) {
346 bool compareEqual(
double a,
double b) {
350 bool compareEqual(
const void* a,
const void* b) {
354 bool compareEqual(
const char* a,
const char* b) {
355 return compareString(a, b) == 0;
358 bool compareEqual(
const char* a,
const String& b) {
359 return compareString(a, b) == 0;
362 bool compareEqual(
const char* a,
const __FlashStringHelper* b) {
363 return compareString(a, b) == 0;
366 bool compareEqual(
const __FlashStringHelper* a,
const char* b) {
367 return compareString(a, b) == 0;
370 bool compareEqual(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
371 return compareString(a, b) == 0;
374 bool compareEqual(
const __FlashStringHelper* a,
const String& b) {
375 return compareString(a, b) == 0;
378 bool compareEqual(
const String& a,
const char* b) {
379 return compareString(a, b) == 0;
382 bool compareEqual(
const String& a,
const String& b) {
383 return compareString(a, b) == 0;
386 bool compareEqual(
const String& a,
const __FlashStringHelper* b) {
387 return compareString(a, b) == 0;
394 bool compareLess(
bool a,
bool b) {
398 bool compareLess(
char a,
char b) {
402 bool compareLess(
int a,
int b) {
406 bool compareLess(
unsigned int a,
unsigned int b) {
410 bool compareLess(
long a,
long b) {
414 bool compareLess(
unsigned long a,
unsigned long b) {
418 bool compareLess(
long long a,
long long b) {
422 bool compareLess(
unsigned long long a,
unsigned long long b) {
426 bool compareLess(
double a,
double b) {
430 bool compareLess(
const char* a,
const char* b) {
431 return compareString(a, b) < 0;
434 bool compareLess(
const char* a,
const String& b) {
435 return compareString(a, b) < 0;
438 bool compareLess(
const char* a,
const __FlashStringHelper* b) {
439 return compareString(a, b) < 0;
442 bool compareLess(
const __FlashStringHelper* a,
const char* b) {
443 return compareString(a, b) < 0;
447 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
448 return compareString(a, b) < 0;
451 bool compareLess(
const __FlashStringHelper* a,
const String& b) {
452 return compareString(a, b) < 0;
455 bool compareLess(
const String& a,
const char* b) {
456 return compareString(a, b) < 0;
459 bool compareLess(
const String& a,
const String& b) {
460 return compareString(a, b) < 0;
463 bool compareLess(
const String& a,
const __FlashStringHelper* b) {
464 return compareString(a, b) < 0;
471 bool compareMore(
bool a,
bool b) {
475 bool compareMore(
char a,
char b) {
479 bool compareMore(
int a,
int b) {
483 bool compareMore(
unsigned int a,
unsigned int b) {
487 bool compareMore(
long a,
long b) {
491 bool compareMore(
unsigned long a,
unsigned long b) {
495 bool compareMore(
long long a,
long long b) {
499 bool compareMore(
unsigned long long a,
unsigned long long b) {
503 bool compareMore(
double a,
double b) {
507 bool compareMore(
const char* a,
const char* b) {
508 return compareString(a, b) > 0;
511 bool compareMore(
const char* a,
const String& b) {
512 return compareString(a, b) > 0;
515 bool compareMore(
const char* a,
const __FlashStringHelper* b) {
516 return compareString(a, b) > 0;
519 bool compareMore(
const __FlashStringHelper* a,
const char* b) {
520 return compareString(a, b) > 0;
523 bool compareMore(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
524 return compareString(a, b) > 0;
527 bool compareMore(
const __FlashStringHelper* a,
const String& b) {
528 return compareString(a, b) > 0;
531 bool compareMore(
const String& a,
const char* b) {
532 return compareString(a, b) > 0;
535 bool compareMore(
const String& a,
const String& b) {
536 return compareString(a, b) > 0;
539 bool compareMore(
const String& a,
const __FlashStringHelper* b) {
540 return compareString(a, b) > 0;
547 bool compareLessOrEqual(
bool a,
bool b) {
551 bool compareLessOrEqual(
char a,
char b) {
555 bool compareLessOrEqual(
int a,
int b) {
559 bool compareLessOrEqual(
unsigned int a,
unsigned int b) {
563 bool compareLessOrEqual(
long a,
long b) {
567 bool compareLessOrEqual(
unsigned long a,
unsigned long b) {
571 bool compareLessOrEqual(
long long a,
long long b) {
575 bool compareLessOrEqual(
unsigned long long a,
unsigned long long b) {
579 bool compareLessOrEqual(
double a,
double b) {
583 bool compareLessOrEqual(
const char* a,
const char* b) {
584 return compareString(a, b) <= 0;
587 bool compareLessOrEqual(
const char* a,
const String& b) {
588 return compareString(a, b) <= 0;
591 bool compareLessOrEqual(
const char* a,
const __FlashStringHelper* b) {
592 return compareString(a, b) <= 0;
595 bool compareLessOrEqual(
const __FlashStringHelper* a,
const char* b) {
596 return compareString(a, b) <= 0;
599 bool compareLessOrEqual(
600 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
601 return compareString(a, b) <= 0;
604 bool compareLessOrEqual(
const __FlashStringHelper* a,
const String& b) {
605 return compareString(a, b) <= 0;
608 bool compareLessOrEqual(
const String& a,
const char* b) {
609 return compareString(a, b) <= 0;
612 bool compareLessOrEqual(
const String& a,
const String& b) {
613 return compareString(a, b) <= 0;
616 bool compareLessOrEqual(
const String& a,
const __FlashStringHelper* b) {
617 return compareString(a, b) <= 0;
624 bool compareMoreOrEqual(
bool a,
bool b) {
628 bool compareMoreOrEqual(
char a,
char b) {
632 bool compareMoreOrEqual(
int a,
int b) {
636 bool compareMoreOrEqual(
unsigned int a,
unsigned int b) {
640 bool compareMoreOrEqual(
long a,
long b) {
644 bool compareMoreOrEqual(
unsigned long a,
unsigned long b) {
648 bool compareMoreOrEqual(
long long a,
long long b) {
652 bool compareMoreOrEqual(
unsigned long long a,
unsigned long long b) {
656 bool compareMoreOrEqual(
double a,
double b) {
660 bool compareMoreOrEqual(
const char* a,
const char* b) {
661 return compareString(a, b) >= 0;
664 bool compareMoreOrEqual(
const char* a,
const String& b) {
665 return compareString(a, b) >= 0;
668 bool compareMoreOrEqual(
const char* a,
const __FlashStringHelper* b) {
669 return compareString(a, b) >= 0;
672 bool compareMoreOrEqual(
const __FlashStringHelper* a,
const char* b) {
673 return compareString(a, b) >= 0;
676 bool compareMoreOrEqual(
677 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
678 return compareString(a, b) >= 0;
681 bool compareMoreOrEqual(
const __FlashStringHelper* a,
const String& b) {
682 return compareString(a, b) >= 0;
685 bool compareMoreOrEqual(
const String& a,
const char* b) {
686 return compareString(a, b) >= 0;
689 bool compareMoreOrEqual(
const String& a,
const String& b) {
690 return compareString(a, b) >= 0;
693 bool compareMoreOrEqual(
const String& a,
const __FlashStringHelper* b) {
694 return compareString(a, b) >= 0;
701 bool compareNotEqual(
bool a,
bool b) {
705 bool compareNotEqual(
char a,
char b) {
709 bool compareNotEqual(
int a,
int b) {
713 bool compareNotEqual(
unsigned int a,
unsigned int b) {
717 bool compareNotEqual(
long a,
long b) {
721 bool compareNotEqual(
unsigned long a,
unsigned long b) {
725 bool compareNotEqual(
long long a,
long long b) {
729 bool compareNotEqual(
unsigned long long a,
unsigned long long b) {
733 bool compareNotEqual(
double a,
double b) {
737 bool compareNotEqual(
const void* a,
const void* b) {
741 bool compareNotEqual(
const char* a,
const char* b) {
742 return compareString(a, b) != 0;
745 bool compareNotEqual(
const char* a,
const String& b) {
746 return compareString(a, b) != 0;
749 bool compareNotEqual(
const char* a,
const __FlashStringHelper* b) {
750 return compareString(a, b) != 0;
753 bool compareNotEqual(
const __FlashStringHelper* a,
const char* b) {
754 return compareString(a, b) != 0;
757 bool compareNotEqual(
758 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
759 return compareString(a, b) != 0;
762 bool compareNotEqual(
const __FlashStringHelper* a,
const String& b) {
763 return compareString(a, b) != 0;
766 bool compareNotEqual(
const String& a,
const char* b) {
767 return compareString(a, b) != 0;
770 bool compareNotEqual(
const String& a,
const String& b) {
771 return compareString(a, b) != 0;
774 bool compareNotEqual(
const String& a,
const __FlashStringHelper* b) {
775 return compareString(a, b) != 0;
782 bool compareStringCaseEqual(
const char* a,
const char* b) {
783 return compareStringCase(a, b) == 0;
786 bool compareStringCaseEqual(
const char* a,
const String& b) {
787 return compareStringCase(a, b) == 0;
790 bool compareStringCaseEqual(
const char* a,
const __FlashStringHelper* b) {
791 return compareStringCase(a, b) == 0;
794 bool compareStringCaseEqual(
const __FlashStringHelper* a,
const char* b) {
795 return compareStringCase(a, b) == 0;
798 bool compareStringCaseEqual(
const __FlashStringHelper* a,
799 const __FlashStringHelper* b) {
800 return compareStringCase(a, b) == 0;
803 bool compareStringCaseEqual(
const __FlashStringHelper* a,
const String& b) {
804 return compareStringCase(a, b) == 0;
807 bool compareStringCaseEqual(
const String& a,
const char* b) {
808 return compareStringCase(a, b) == 0;
811 bool compareStringCaseEqual(
const String& a,
const String& b) {
812 return compareStringCase(a, b) == 0;
815 bool compareStringCaseEqual(
const String& a,
const __FlashStringHelper* b) {
816 return compareStringCase(a, b) == 0;
823 bool compareStringCaseNotEqual(
const char* a,
const char* b) {
824 return compareStringCase(a, b) != 0;
827 bool compareStringCaseNotEqual(
const char* a,
const String& b) {
828 return compareStringCase(a, b) != 0;
831 bool compareStringCaseNotEqual(
const char* a,
const __FlashStringHelper* b) {
832 return compareStringCase(a, b) != 0;
835 bool compareStringCaseNotEqual(
const __FlashStringHelper* a,
const char* b) {
836 return compareStringCase(a, b) != 0;
839 bool compareStringCaseNotEqual(
const __FlashStringHelper* a,
840 const __FlashStringHelper* b) {
841 return compareStringCase(a, b) != 0;
844 bool compareStringCaseNotEqual(
const __FlashStringHelper* a,
const String& b) {
845 return compareStringCase(a, b) != 0;
848 bool compareStringCaseNotEqual(
const String& a,
const char* b) {
849 return compareStringCase(a, b) != 0;
852 bool compareStringCaseNotEqual(
const String& a,
const String& b) {
853 return compareStringCase(a, b) != 0;
856 bool compareStringCaseNotEqual(
const String& a,
const __FlashStringHelper* b) {
857 return compareStringCase(a, b) != 0;
864 bool compareNear(
int a,
int b,
int error) {
865 return abs(a - b) <= error;
868 bool compareNear(
unsigned int a,
unsigned int b,
unsigned int error) {
869 return (
unsigned int) abs((
int)(a - b)) <= error;
872 bool compareNear(
long a,
long b,
long error) {
873 return abs(a - b) <= error;
876 bool compareNear(
unsigned long a,
unsigned long b,
unsigned long error) {
877 return (
unsigned long) abs((
long)(a - b)) <= error;
880 bool compareNear(
double a,
double b,
double error) {
881 return fabs(a - b) <= error;
884 bool compareNotNear(
int a,
int b,
int error) {
885 return !compareNear(a, b, error);
888 bool compareNotNear(
unsigned int a,
unsigned int b,
unsigned int error) {
889 return !compareNear(a, b, error);
892 bool compareNotNear(
long a,
long b,
long error) {
893 return !compareNear(a, b, error);
896 bool compareNotNear(
unsigned long a,
unsigned long b,
unsigned long error) {
897 return !compareNear(a, b, error);
900 bool compareNotNear(
double a,
double b,
double error) {
901 return !compareNear(a, b, error);