libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ipv6subnet.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/ipv6address.h>
15#include <promeki/list.h>
16#include <promeki/string.h>
17#include <promeki/result.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
37class Ipv6Subnet {
38 public:
40 using List = ::promeki::List<Ipv6Subnet>;
41
53 static Result<Ipv6Subnet> fromString(const String &str);
54
56 Ipv6Subnet() = default;
57
63 Ipv6Subnet(const Ipv6Address &addr, int prefixLen) : _addr(addr), _prefixLen(prefixLen) {
64 if (_prefixLen < 0) _prefixLen = 0;
65 if (_prefixLen > 128) _prefixLen = 128;
66 }
67
69 bool isValid() const;
70
72 const Ipv6Address &address() const { return _addr; }
73
75 int prefixLen() const { return _prefixLen; }
76
78 bool contains(const Ipv6Address &addr) const;
79
81 String toString() const;
82
84 bool operator==(const Ipv6Subnet &o) const { return _addr == o._addr && _prefixLen == o._prefixLen; }
86 bool operator!=(const Ipv6Subnet &o) const { return !(*this == o); }
87
88 private:
89 Ipv6Address _addr;
90 int _prefixLen = 0;
91};
92
93PROMEKI_NAMESPACE_END
94
95PROMEKI_FORMAT_VIA_TOSTRING(promeki::Ipv6Subnet);
96
97#endif // PROMEKI_ENABLE_NETWORK