8#ifndef INCLUDED_BSLALG_RANGECOMPARE
9#define INCLUDED_BSLALG_RANGECOMPARE
359#include <bslscm_version.h>
420 template <
class INPUT_ITER>
421 static bool equal(INPUT_ITER start1,
443 template <
class INPUT_ITER>
444 static bool equal(INPUT_ITER start1,
448 template <
class INPUT_ITER>
449 static bool equal(INPUT_ITER start1, INPUT_ITER end1,
size_type length1,
450 INPUT_ITER start2, INPUT_ITER end2,
size_type length2);
470 template <
class INPUT_ITER>
475 template <
class INPUT_ITER>
506 template <
class VALUE_TYPE>
507 static bool equal(
const VALUE_TYPE *start1,
508 const VALUE_TYPE *end1,
509 const VALUE_TYPE *start2,
510 const VALUE_TYPE *end2,
513 template <
class INPUT_ITER,
class VALUE_TYPE>
514 static bool equal(INPUT_ITER start1,
520 template <
class INPUT_ITER,
class VALUE_TYPE>
521 static bool equal(INPUT_ITER start1,
534 template <
class INPUT_ITER,
class VALUE_TYPE>
535 static bool equal(INPUT_ITER start1,
540 template <
class INPUT_ITER,
class VALUE_TYPE>
541 static bool equal(INPUT_ITER start1,
546 template <
class INPUT_ITER,
class VALUE_TYPE>
547 static bool equal(INPUT_ITER start1,
559 template <
class VALUE_TYPE>
561 const VALUE_TYPE *end1,
562 const VALUE_TYPE *start2,
573 template <
class INPUT_ITER>
589 template <
class VALUE_TYPE>
591 const VALUE_TYPE *end1,
592 const VALUE_TYPE *start2,
593 const VALUE_TYPE *end2,
607 template <
class INPUT_ITER,
class VALUE_TYPE>
626 template <
class INPUT_ITER,
class VALUE_TYPE>
656 const unsigned char *end1,
657 const unsigned char *start2);
660 const wchar_t *start2);
661 template <
class INPUT_ITER>
666 template <
class INPUT_ITER>
681template <
class INPUT_ITER>
687 if (start1 == end1) {
693template <
class INPUT_ITER>
700 if (start1 == end1) {
701 return start2 == end2;
706template <
class INPUT_ITER>
715 if (length1 != length2) {
718 if (start1 == end1) {
724template <
class INPUT_ITER>
730 if (start1 == end1) {
731 return start2 != end2 ? -1 : 0;
740template <
class INPUT_ITER>
748 const int result = length2 < length1
762 if (length1 < length2) {
765 if (length2 < length1) {
779template <
class VALUE_TYPE>
782 const VALUE_TYPE *end1,
783 const VALUE_TYPE *start2,
784 const VALUE_TYPE *end2,
796template <
class INPUT_ITER,
class VALUE_TYPE>
804 for ( ; start1 != end1 && start2 != end2; ++start1, ++start2) {
805 if (!(*start1 == *start2)) {
809 return start1 == end1 && start2 == end2;
812template <
class INPUT_ITER,
class VALUE_TYPE>
817 const VALUE_TYPE& value)
820 CanUseLengthOptimization;
827 CanUseLengthOptimization());
830template <
class INPUT_ITER,
class VALUE_TYPE>
845 CanUseBitwiseCompareOptimization;
850 CanUseBitwiseCompareOptimization());
853template <
class INPUT_ITER,
class VALUE_TYPE>
860 for ( ; start1 != end1; ++start1, ++start2) {
861 if (!(*start1 == *start2)) {
868template <
class INPUT_ITER,
class VALUE_TYPE>
873 const VALUE_TYPE& value)
877 return equal(start1, end1, start2, value, Trait());
882template <
class VALUE_TYPE>
885 const VALUE_TYPE *start1,
886 const VALUE_TYPE *end1,
887 const VALUE_TYPE *start2,
890 std::size_t numBytes =
reinterpret_cast<const char *
>(end1)
891 -
reinterpret_cast<const char *
>(start1);
893 return 0 == std::memcmp(
reinterpret_cast<const void *
>(start1),
894 reinterpret_cast<const void *
>(start2),
898template <
class INPUT_ITER>
912template <
class VALUE_TYPE>
915 const VALUE_TYPE *end1,
916 const VALUE_TYPE *start2,
917 const VALUE_TYPE *end2,
932template <
class INPUT_ITER,
class VALUE_TYPE>
940 for ( ; start1 != end1 && start2 != end2; ++start1, ++start2) {
941 if (*start1 < *start2) {
944 else if (*start2 < *start1) {
948 if (start1 != end1) {
951 if (start2 != end2) {
957template <
class INPUT_ITER,
class VALUE_TYPE>
963 const VALUE_TYPE& value)
966 CanUseLengthOptimization;
969 CanUseLengthOptimization());
974 const unsigned char *end1,
975 const unsigned char *start2)
977 return std::memcmp(start1, start2, end1 - start1);
985#if CHAR_MAX == SCHAR_MAX
986 return std::memcmp(start1, start2, (end1 - start1));
988 return lexicographical<const char *>(start1, end1, start2, 0);
995 const wchar_t *start2)
997 return std::wmemcmp(start1, start2, end1 - start1);
1000template <
class INPUT_ITER>
1006 for ( ; start1 != end1; ++start1, ++start2) {
1007 if (*start1 < *start2) {
1010 else if (*start2 < *start1) {
1017template <
class INPUT_ITER>
1023 if (start1 != end1) {
1031#ifndef BDE_OPENSOURCE_PUBLICATION
bslalg::RangeCompare bslalg_RangeCompare
This alias is defined for backward compatibility.
Definition bslalg_rangecompare.h:1037
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlc_flathashmap.h:2218
Definition bslmf_isconvertible.h:875
Definition bslalg_rangecompare.h:495
static int lexicographical(const VALUE_TYPE *start1, const VALUE_TYPE *end1, const VALUE_TYPE *start2, const VALUE_TYPE *end2, const VALUE_TYPE &, bsl::true_type)
Definition bslalg_rangecompare.h:914
static bool equal(const VALUE_TYPE *start1, const VALUE_TYPE *end1, const VALUE_TYPE *start2, const VALUE_TYPE *end2, const VALUE_TYPE &, bsl::true_type)
Definition bslalg_rangecompare.h:781
static bool equalBitwiseEqualityComparable(const VALUE_TYPE *start1, const VALUE_TYPE *end1, const VALUE_TYPE *start2, bsl::true_type)
Definition bslalg_rangecompare.h:884
Definition bslalg_rangecompare.h:400
static bool equal(INPUT_ITER start1, INPUT_ITER end1, INPUT_ITER start2)
Definition bslalg_rangecompare.h:683
std::size_t size_type
Definition bslalg_rangecompare.h:406
static int lexicographical(INPUT_ITER start1, INPUT_ITER end1, INPUT_ITER start2, INPUT_ITER end2)
Definition bslalg_rangecompare.h:725
Definition bslmf_isbitwiseequalitycomparable.h:500
Definition bslmf_matchanytype.h:152