ourcount--;
rhscount--;
- bool res=std::lexicographical_compare(
- d_storage.c_str() + ourpos[ourcount] + 1,
- d_storage.c_str() + ourpos[ourcount] + 1 + *(d_storage.c_str() + ourpos[ourcount]),
- rhs.d_storage.c_str() + rhspos[rhscount] + 1,
- rhs.d_storage.c_str() + rhspos[rhscount] + 1 + *(rhs.d_storage.c_str() + rhspos[rhscount]),
- DNSNameCompare());
-
- // cout<<"Forward: "<<res<<endl;
- if(res)
- return true;
-
- res=std::lexicographical_compare( rhs.d_storage.c_str() + rhspos[rhscount] + 1,
- rhs.d_storage.c_str() + rhspos[rhscount] + 1 + *(rhs.d_storage.c_str() + rhspos[rhscount]),
- d_storage.c_str() + ourpos[ourcount] + 1,
- d_storage.c_str() + ourpos[ourcount] + 1 + *(d_storage.c_str() + ourpos[ourcount]),
- DNSNameCompare());
- // cout<<"Reverse: "<<res<<endl;
- if(res)
- return false;
+ int res = pdns_ilexicographical_compare_three_way(
+ std::string_view(
+ d_storage.c_str() + ourpos[ourcount] + 1,
+ *(d_storage.c_str() + ourpos[ourcount])),
+ std::string_view(
+ rhs.d_storage.c_str() + rhspos[rhscount] + 1,
+ *(rhs.d_storage.c_str() + rhspos[rhscount])));
+ if (res != 0) {
+ return res < 0;
+ }
}
return false;
}
#include "burtle.hh"
#include "views.hh"
-struct DNSNameCompare
-{
- bool operator()(const unsigned char& lhs, const unsigned char& rhs) const
- {
- return dns_tolower(lhs) < dns_tolower(rhs);
- }
-};
-
/* Quest in life:
accept escaped ascii presentations of DNS names and store them "natively"
accept a DNS packet with an offset, and extract a DNS name from it
bool operator<(const DNSName& rhs) const // this delivers _some_ kind of ordering, but not one useful in a DNS context. Really fast though.
{
+ struct DNSNameCompare
+ {
+ bool operator()(const unsigned char& lhs, const unsigned char& rhs) const
+ {
+ return dns_tolower(lhs) < dns_tolower(rhs);
+ }
+ };
+
// note that this is case insensitive, including on the label lengths
return std::lexicographical_compare(d_storage.rbegin(), d_storage.rend(),
- rhs.d_storage.rbegin(), rhs.d_storage.rend(),
- DNSNameCompare());
+ rhs.d_storage.rbegin(), rhs.d_storage.rend(), DNSNameCompare());
}
bool canonCompare(const DNSName& rhs) const;