|
@@ -39,9 +39,9 @@ public:
|
|
|
l{ip.type == IPADDR_TYPE_V4 ? ip.u_addr.ip4.addr : 0} { }
|
|
|
constexpr IP4(const esp_ip_addr_t & ip) :
|
|
|
l{ip.type == IPADDR_TYPE_V4 ? ip.u_addr.ip4.addr : 0} { }
|
|
|
- constexpr IP4(IP4 nip, IP4 hip, unsigned int n) :
|
|
|
+ constexpr IP4(const IP4 &nip, const IP4 &hip, unsigned int n) :
|
|
|
l{(nip.l & ~hostmask(n)) | (hip.l & hostmask(n))} { }
|
|
|
- constexpr IP4(IP4 nip, IP4 hip, IP4 mask) :
|
|
|
+ constexpr IP4(const IP4 &nip, const IP4 &hip, const IP4 &mask) :
|
|
|
l{(nip.l & ~mask.l) | (hip.l & mask.l)} { }
|
|
|
IP4(const char *str);
|
|
|
|
|
@@ -59,10 +59,28 @@ public:
|
|
|
.type = IPADDR_TYPE_V4
|
|
|
};
|
|
|
}
|
|
|
+
|
|
|
+ //
|
|
|
+ // XXX: for C++20, this should implement operator <=>.
|
|
|
+ //
|
|
|
constexpr operator bool () const { return l != 0; }
|
|
|
constexpr bool operator ! () const { return l == 0; }
|
|
|
constexpr bool operator == (const IP4 &b) const { return l == b.l; }
|
|
|
constexpr bool operator != (const IP4 &b) const { return l != b.l; }
|
|
|
+
|
|
|
+ constexpr bool operator < (const IP4 &b) const {
|
|
|
+ return netswap(l) < netswap(b.l);
|
|
|
+ }
|
|
|
+ constexpr bool operator >= (const IP4 &b) const {
|
|
|
+ return netswap(l) >= netswap(b.l);
|
|
|
+ }
|
|
|
+ constexpr bool operator <= (const IP4 &b) const {
|
|
|
+ return netswap(l) <= netswap(b.l);
|
|
|
+ }
|
|
|
+ constexpr bool operator > (const IP4 &b) const {
|
|
|
+ return netswap(l) > netswap(b.l);
|
|
|
+ }
|
|
|
+
|
|
|
constexpr IP4 operator & (const IP4 &b) const { return IP4(l & b.l); }
|
|
|
constexpr IP4 operator | (const IP4 &b) const { return IP4(l | b.l); }
|
|
|
constexpr IP4 operator ^ (const IP4 &b) const { return IP4(l ^ b.l); }
|