libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ipv4subnet.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/namespace.h>
14#include <promeki/ipv4address.h>
15#include <promeki/list.h>
16#include <promeki/string.h>
17#include <promeki/result.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
39class Ipv4Subnet {
40 public:
42 using List = ::promeki::List<Ipv4Subnet>;
43
55 static Result<Ipv4Subnet> fromString(const String &str);
56
63 static Ipv4Address netmaskForPrefix(int prefixLen);
64
66 Ipv4Subnet() = default;
67
73 Ipv4Subnet(const Ipv4Address &addr, const Ipv4Address &mask) : _addr(addr), _mask(mask) {}
74
80 Ipv4Subnet(const Ipv4Address &addr, int prefixLen) : _addr(addr), _mask(netmaskForPrefix(prefixLen)) {}
81
83 bool isValid() const { return !_addr.isNull(); }
84
86 const Ipv4Address &address() const { return _addr; }
87
89 const Ipv4Address &netmask() const { return _mask; }
90
92 Ipv4Address network() const;
93
100 Ipv4Address broadcast() const;
101
106 int prefixLen() const;
107
113 bool contains(const Ipv4Address &addr) const;
114
116 String toString() const;
117
119 bool operator==(const Ipv4Subnet &o) const { return _addr == o._addr && _mask == o._mask; }
121 bool operator!=(const Ipv4Subnet &o) const { return !(*this == o); }
122
123 private:
124 Ipv4Address _addr;
125 Ipv4Address _mask;
126};
127
128PROMEKI_NAMESPACE_END
129
130PROMEKI_FORMAT_VIA_TOSTRING(promeki::Ipv4Subnet);
131
132#endif // PROMEKI_ENABLE_NETWORK