59 using Ipv4Data = uint32_t;
60 using Ipv6Data = std::array<uint16_t, 8>;
61 using Data = std::variant<Ipv4Data, Ipv6Data>;
63 enum class Types : uint8_t
70 enum class CheckHostname
88 IpAddress(std::
string const& address, CheckHostname check = CheckHostname::Yes);
89 IpAddress(
char const* address, CheckHostname check = CheckHostname::Yes);
98 IpAddress(uint8_t byte3, uint8_t byte2, uint8_t byte1, uint8_t byte0) noexcept;
106 IpAddress(std::initializer_list<uint16_t> words) noexcept;
132 bool set(std::
string const& address, CheckHostname check = CheckHostname::Yes);
133 bool set(
char const* address, CheckHostname check = CheckHostname::Yes);
143 bool set(uint8_t byte3, uint8_t byte2, uint8_t byte1, uint8_t byte0);
152 bool set(std::initializer_list<uint16_t> words);
161 bool set(Ipv6Data const& data);
168 bool set(uint8_t const bytes[16]);
175 bool set(Ipv4Data address);
182 bool setNetworkByteOrdered(Ipv4Data address);
189 bool setNetworkByteOrdered(Ipv6Data const& data);
196 bool setNetworkByteOrdered(uint8_t const bytes[16]);
198 [[nodiscard]]
bool operator==(
IpAddress const& r) const;
205 [[nodiscard]] std::optional<std::
string> toString() const;
212 [[nodiscard]] std::optional<Data> getNetworkByteOrder() const;
218 [[nodiscard]] std::optional<Data> getHostByteOrder() const;
220 [[nodiscard]] Types getType() const;
227 [[nodiscard]] static std::optional<std::
string> getHostName();
234 [[nodiscard]] static std::vector<
IpAddress> getLocalAddresses(Types type = Types::None);
244 static
IpAddress Loopback(Types addressType);
249 std::variant<std::monostate, Ipv4Data, Ipv6Data> g_address;
260struct std::hash<fge::net::IpAddress>
264 if (std::holds_alternative<std::monostate>(r.g_address))
266 return std::hash<std::monostate>{}(std::monostate{});
268 if (std::holds_alternative<fge::net::IpAddress::Ipv4Data>(r.g_address))
270 return std::hash<fge::net::IpAddress::Ipv4Data>{}(std::get<fge::net::IpAddress::Ipv4Data>(r.g_address));
272 auto const& array = std::get<fge::net::IpAddress::Ipv6Data>(r.g_address);
273 return fge::Hash(array.data(), array.size() * 2);