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 compareSubstring(
const char* haystack,
const char* needle) {
315 return strstr(haystack, needle) !=
nullptr;
318 bool compareSubstring(
const char* haystack,
const String& needle) {
319 return strstr(haystack, needle.c_str()) !=
nullptr;
322 bool compareSubstring(
const char* haystack,
const __FlashStringHelper* needle) {
323 return strstr_P(haystack, (
const char*) needle) !=
nullptr;
326 bool compareSubstring(
const String& haystack,
const char* needle) {
327 return strstr(haystack.c_str(), needle) !=
nullptr;
330 bool compareSubstring(
const String& haystack,
const String& needle) {
331 return strstr(haystack.c_str(), needle.c_str()) !=
nullptr;
334 bool compareSubstring(
const String& haystack,
const __FlashStringHelper* needle) {
335 return strstr(haystack.c_str(), (
const char*) needle) !=
nullptr;
342 bool compareSubstring(
343 const __FlashStringHelper* haystack,
344 const char* needle) {
346 const char* hay = (
const char*) haystack;
347 for (uint8_t ch = pgm_read_byte(hay); ch !=
'\0'; hay++) {
348 const char* subhay = hay;
349 const char* subneedle = needle;
351 uint8_t chay = pgm_read_byte(subhay);
352 uint8_t cneedle = *subneedle;
353 if (cneedle ==
'\0')
return true;
354 if (chay ==
'\0')
return false;
355 if (chay != cneedle)
break;
364 bool compareSubstring(
365 const __FlashStringHelper* haystack,
366 const String& needle) {
367 return compareSubstring(haystack, needle.c_str());
374 bool compareSubstring(
375 const __FlashStringHelper* haystack,
376 const __FlashStringHelper* needle) {
378 const char* hay =
reinterpret_cast<const char*
>(haystack);
379 for (uint8_t ch = pgm_read_byte(hay); ch !=
'\0'; hay++) {
380 const char* subhay = hay;
381 const char* subneedle = (
const char*) needle;
383 uint8_t chay = pgm_read_byte(subhay);
384 uint8_t cneedle = pgm_read_byte(subneedle);
385 if (cneedle ==
'\0')
return true;
386 if (chay ==
'\0')
return false;
387 if (chay != cneedle)
break;
400 bool compareEqual(
bool a,
bool b) {
404 bool compareEqual(
char a,
char b) {
408 bool compareEqual(
int a,
int b) {
412 bool compareEqual(
unsigned int a,
unsigned int b) {
416 bool compareEqual(
long a,
long b) {
420 bool compareEqual(
unsigned long a,
unsigned long b) {
424 bool compareEqual(
long long a,
long long b) {
428 bool compareEqual(
unsigned long long a,
unsigned long long b) {
432 bool compareEqual(
double a,
double b) {
436 bool compareEqual(
const void* a,
const void* b) {
440 bool compareEqual(
const char* a,
const char* b) {
441 return compareString(a, b) == 0;
444 bool compareEqual(
const char* a,
const String& b) {
445 return compareString(a, b) == 0;
448 bool compareEqual(
const char* a,
const __FlashStringHelper* b) {
449 return compareString(a, b) == 0;
452 bool compareEqual(
const __FlashStringHelper* a,
const char* b) {
453 return compareString(a, b) == 0;
456 bool compareEqual(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
457 return compareString(a, b) == 0;
460 bool compareEqual(
const __FlashStringHelper* a,
const String& b) {
461 return compareString(a, b) == 0;
464 bool compareEqual(
const String& a,
const char* b) {
465 return compareString(a, b) == 0;
468 bool compareEqual(
const String& a,
const String& b) {
469 return compareString(a, b) == 0;
472 bool compareEqual(
const String& a,
const __FlashStringHelper* b) {
473 return compareString(a, b) == 0;
480 bool compareLess(
bool a,
bool b) {
484 bool compareLess(
char a,
char b) {
488 bool compareLess(
int a,
int b) {
492 bool compareLess(
unsigned int a,
unsigned int b) {
496 bool compareLess(
long a,
long b) {
500 bool compareLess(
unsigned long a,
unsigned long b) {
504 bool compareLess(
long long a,
long long b) {
508 bool compareLess(
unsigned long long a,
unsigned long long b) {
512 bool compareLess(
double a,
double b) {
516 bool compareLess(
const char* a,
const char* b) {
517 return compareString(a, b) < 0;
520 bool compareLess(
const char* a,
const String& b) {
521 return compareString(a, b) < 0;
524 bool compareLess(
const char* a,
const __FlashStringHelper* b) {
525 return compareString(a, b) < 0;
528 bool compareLess(
const __FlashStringHelper* a,
const char* b) {
529 return compareString(a, b) < 0;
533 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
534 return compareString(a, b) < 0;
537 bool compareLess(
const __FlashStringHelper* a,
const String& b) {
538 return compareString(a, b) < 0;
541 bool compareLess(
const String& a,
const char* b) {
542 return compareString(a, b) < 0;
545 bool compareLess(
const String& a,
const String& b) {
546 return compareString(a, b) < 0;
549 bool compareLess(
const String& a,
const __FlashStringHelper* b) {
550 return compareString(a, b) < 0;
557 bool compareMore(
bool a,
bool b) {
561 bool compareMore(
char a,
char b) {
565 bool compareMore(
int a,
int b) {
569 bool compareMore(
unsigned int a,
unsigned int b) {
573 bool compareMore(
long a,
long b) {
577 bool compareMore(
unsigned long a,
unsigned long b) {
581 bool compareMore(
long long a,
long long b) {
585 bool compareMore(
unsigned long long a,
unsigned long long b) {
589 bool compareMore(
double a,
double b) {
593 bool compareMore(
const char* a,
const char* b) {
594 return compareString(a, b) > 0;
597 bool compareMore(
const char* a,
const String& b) {
598 return compareString(a, b) > 0;
601 bool compareMore(
const char* a,
const __FlashStringHelper* b) {
602 return compareString(a, b) > 0;
605 bool compareMore(
const __FlashStringHelper* a,
const char* b) {
606 return compareString(a, b) > 0;
609 bool compareMore(
const __FlashStringHelper* a,
const __FlashStringHelper* b) {
610 return compareString(a, b) > 0;
613 bool compareMore(
const __FlashStringHelper* a,
const String& b) {
614 return compareString(a, b) > 0;
617 bool compareMore(
const String& a,
const char* b) {
618 return compareString(a, b) > 0;
621 bool compareMore(
const String& a,
const String& b) {
622 return compareString(a, b) > 0;
625 bool compareMore(
const String& a,
const __FlashStringHelper* b) {
626 return compareString(a, b) > 0;
633 bool compareLessOrEqual(
bool a,
bool b) {
637 bool compareLessOrEqual(
char a,
char b) {
641 bool compareLessOrEqual(
int a,
int b) {
645 bool compareLessOrEqual(
unsigned int a,
unsigned int b) {
649 bool compareLessOrEqual(
long a,
long b) {
653 bool compareLessOrEqual(
unsigned long a,
unsigned long b) {
657 bool compareLessOrEqual(
long long a,
long long b) {
661 bool compareLessOrEqual(
unsigned long long a,
unsigned long long b) {
665 bool compareLessOrEqual(
double a,
double b) {
669 bool compareLessOrEqual(
const char* a,
const char* b) {
670 return compareString(a, b) <= 0;
673 bool compareLessOrEqual(
const char* a,
const String& b) {
674 return compareString(a, b) <= 0;
677 bool compareLessOrEqual(
const char* a,
const __FlashStringHelper* b) {
678 return compareString(a, b) <= 0;
681 bool compareLessOrEqual(
const __FlashStringHelper* a,
const char* b) {
682 return compareString(a, b) <= 0;
685 bool compareLessOrEqual(
686 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
687 return compareString(a, b) <= 0;
690 bool compareLessOrEqual(
const __FlashStringHelper* a,
const String& b) {
691 return compareString(a, b) <= 0;
694 bool compareLessOrEqual(
const String& a,
const char* b) {
695 return compareString(a, b) <= 0;
698 bool compareLessOrEqual(
const String& a,
const String& b) {
699 return compareString(a, b) <= 0;
702 bool compareLessOrEqual(
const String& a,
const __FlashStringHelper* b) {
703 return compareString(a, b) <= 0;
710 bool compareMoreOrEqual(
bool a,
bool b) {
714 bool compareMoreOrEqual(
char a,
char b) {
718 bool compareMoreOrEqual(
int a,
int b) {
722 bool compareMoreOrEqual(
unsigned int a,
unsigned int b) {
726 bool compareMoreOrEqual(
long a,
long b) {
730 bool compareMoreOrEqual(
unsigned long a,
unsigned long b) {
734 bool compareMoreOrEqual(
long long a,
long long b) {
738 bool compareMoreOrEqual(
unsigned long long a,
unsigned long long b) {
742 bool compareMoreOrEqual(
double a,
double b) {
746 bool compareMoreOrEqual(
const char* a,
const char* b) {
747 return compareString(a, b) >= 0;
750 bool compareMoreOrEqual(
const char* a,
const String& b) {
751 return compareString(a, b) >= 0;
754 bool compareMoreOrEqual(
const char* a,
const __FlashStringHelper* b) {
755 return compareString(a, b) >= 0;
758 bool compareMoreOrEqual(
const __FlashStringHelper* a,
const char* b) {
759 return compareString(a, b) >= 0;
762 bool compareMoreOrEqual(
763 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
764 return compareString(a, b) >= 0;
767 bool compareMoreOrEqual(
const __FlashStringHelper* a,
const String& b) {
768 return compareString(a, b) >= 0;
771 bool compareMoreOrEqual(
const String& a,
const char* b) {
772 return compareString(a, b) >= 0;
775 bool compareMoreOrEqual(
const String& a,
const String& b) {
776 return compareString(a, b) >= 0;
779 bool compareMoreOrEqual(
const String& a,
const __FlashStringHelper* b) {
780 return compareString(a, b) >= 0;
787 bool compareNotEqual(
bool a,
bool b) {
791 bool compareNotEqual(
char a,
char b) {
795 bool compareNotEqual(
int a,
int b) {
799 bool compareNotEqual(
unsigned int a,
unsigned int b) {
803 bool compareNotEqual(
long a,
long b) {
807 bool compareNotEqual(
unsigned long a,
unsigned long b) {
811 bool compareNotEqual(
long long a,
long long b) {
815 bool compareNotEqual(
unsigned long long a,
unsigned long long b) {
819 bool compareNotEqual(
double a,
double b) {
823 bool compareNotEqual(
const void* a,
const void* b) {
827 bool compareNotEqual(
const char* a,
const char* b) {
828 return compareString(a, b) != 0;
831 bool compareNotEqual(
const char* a,
const String& b) {
832 return compareString(a, b) != 0;
835 bool compareNotEqual(
const char* a,
const __FlashStringHelper* b) {
836 return compareString(a, b) != 0;
839 bool compareNotEqual(
const __FlashStringHelper* a,
const char* b) {
840 return compareString(a, b) != 0;
843 bool compareNotEqual(
844 const __FlashStringHelper* a,
const __FlashStringHelper* b) {
845 return compareString(a, b) != 0;
848 bool compareNotEqual(
const __FlashStringHelper* a,
const String& b) {
849 return compareString(a, b) != 0;
852 bool compareNotEqual(
const String& a,
const char* b) {
853 return compareString(a, b) != 0;
856 bool compareNotEqual(
const String& a,
const String& b) {
857 return compareString(a, b) != 0;
860 bool compareNotEqual(
const String& a,
const __FlashStringHelper* b) {
861 return compareString(a, b) != 0;
868 bool compareStringCaseEqual(
const char* a,
const char* b) {
869 return compareStringCase(a, b) == 0;
872 bool compareStringCaseEqual(
const char* a,
const String& b) {
873 return compareStringCase(a, b) == 0;
876 bool compareStringCaseEqual(
const char* a,
const __FlashStringHelper* b) {
877 return compareStringCase(a, b) == 0;
880 bool compareStringCaseEqual(
const __FlashStringHelper* a,
const char* b) {
881 return compareStringCase(a, b) == 0;
884 bool compareStringCaseEqual(
const __FlashStringHelper* a,
885 const __FlashStringHelper* b) {
886 return compareStringCase(a, b) == 0;
889 bool compareStringCaseEqual(
const __FlashStringHelper* a,
const String& b) {
890 return compareStringCase(a, b) == 0;
893 bool compareStringCaseEqual(
const String& a,
const char* b) {
894 return compareStringCase(a, b) == 0;
897 bool compareStringCaseEqual(
const String& a,
const String& b) {
898 return compareStringCase(a, b) == 0;
901 bool compareStringCaseEqual(
const String& a,
const __FlashStringHelper* b) {
902 return compareStringCase(a, b) == 0;
909 bool compareStringCaseNotEqual(
const char* a,
const char* b) {
910 return compareStringCase(a, b) != 0;
913 bool compareStringCaseNotEqual(
const char* a,
const String& b) {
914 return compareStringCase(a, b) != 0;
917 bool compareStringCaseNotEqual(
const char* a,
const __FlashStringHelper* b) {
918 return compareStringCase(a, b) != 0;
921 bool compareStringCaseNotEqual(
const __FlashStringHelper* a,
const char* b) {
922 return compareStringCase(a, b) != 0;
925 bool compareStringCaseNotEqual(
const __FlashStringHelper* a,
926 const __FlashStringHelper* b) {
927 return compareStringCase(a, b) != 0;
930 bool compareStringCaseNotEqual(
const __FlashStringHelper* a,
const String& b) {
931 return compareStringCase(a, b) != 0;
934 bool compareStringCaseNotEqual(
const String& a,
const char* b) {
935 return compareStringCase(a, b) != 0;
938 bool compareStringCaseNotEqual(
const String& a,
const String& b) {
939 return compareStringCase(a, b) != 0;
942 bool compareStringCaseNotEqual(
const String& a,
const __FlashStringHelper* b) {
943 return compareStringCase(a, b) != 0;
950 bool compareNear(
int a,
int b,
int error) {
951 return abs(a - b) <= error;
954 bool compareNear(
unsigned int a,
unsigned int b,
unsigned int error) {
955 return (
unsigned int) abs((
int)(a - b)) <= error;
958 bool compareNear(
long a,
long b,
long error) {
959 return abs(a - b) <= error;
962 bool compareNear(
unsigned long a,
unsigned long b,
unsigned long error) {
963 return (
unsigned long) abs((
long)(a - b)) <= error;
966 bool compareNear(
double a,
double b,
double error) {
967 return fabs(a - b) <= error;
970 bool compareNotNear(
int a,
int b,
int error) {
971 return !compareNear(a, b, error);
974 bool compareNotNear(
unsigned int a,
unsigned int b,
unsigned int error) {
975 return !compareNear(a, b, error);
978 bool compareNotNear(
long a,
long b,
long error) {
979 return !compareNear(a, b, error);
982 bool compareNotNear(
unsigned long a,
unsigned long b,
unsigned long error) {
983 return !compareNear(a, b, error);
986 bool compareNotNear(
double a,
double b,
double error) {
987 return !compareNear(a, b, error);
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a,...
Various macros to smooth over the differences among the various platforms with regards to their suppo...