Browse Source

IP4.h: add comparison operators

IPv4 addresses are strictly ordered, so using comparisons is valid.
H. Peter Anvin 1 year ago
parent
commit
a700f2b649
5 changed files with 20 additions and 2 deletions
  1. 20 2
      esp32/max80/IP4.h
  2. BIN
      esp32/output/max80.ino.bin
  3. BIN
      fpga/output/max80.fw
  4. BIN
      fpga/output/v1.fw
  5. BIN
      fpga/output/v2.fw

+ 20 - 2
esp32/max80/IP4.h

@@ -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); }

BIN
esp32/output/max80.ino.bin


BIN
fpga/output/max80.fw


BIN
fpga/output/v1.fw


BIN
fpga/output/v2.fw