11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
19PROMEKI_NAMESPACE_BEGIN
42 using List = ::promeki::List<Ipv4Subnet>;
55 static Result<Ipv4Subnet> fromString(
const String &str);
63 static Ipv4Address netmaskForPrefix(
int prefixLen);
66 Ipv4Subnet() =
default;
73 Ipv4Subnet(
const Ipv4Address &addr,
const Ipv4Address &mask) : _addr(addr), _mask(mask) {}
80 Ipv4Subnet(
const Ipv4Address &addr,
int prefixLen) : _addr(addr), _mask(netmaskForPrefix(prefixLen)) {}
83 bool isValid()
const {
return !_addr.isNull(); }
86 const Ipv4Address &address()
const {
return _addr; }
89 const Ipv4Address &netmask()
const {
return _mask; }
92 Ipv4Address network()
const;
100 Ipv4Address broadcast()
const;
106 int prefixLen()
const;
113 bool contains(
const Ipv4Address &addr)
const;
116 String toString()
const;
119 bool operator==(
const Ipv4Subnet &o)
const {
return _addr == o._addr && _mask == o._mask; }
121 bool operator!=(
const Ipv4Subnet &o)
const {
return !(*
this == o); }
130PROMEKI_FORMAT_VIA_TOSTRING(promeki::Ipv4Subnet);