4#include "Stroika/Foundation/StroikaPreComp.h"
6#include "Stroika/Foundation/Characters/String2Int.h"
9#include "Stroika/Foundation/Execution/Exceptions.h"
10#include "Stroika/Foundation/Math/Common.h"
16using namespace Stroika::Foundation::IO;
25 : fBaseAddress_{internetAddress.KeepSignificantBits (significantBits)}
26 , fSignificantBits_{significantBits}
33 if (
auto i = cidrNotation.
RFind (
'/')) {
35 unsigned int nBits = Characters::String2Int<unsigned int> (cidrNotation.
SubString (*i + 1));
36 if (not ia.GetAddressSize ().has_value ()) [[unlikely]] {
41 if (*ia.GetAddressSize () * 8 < nBits) [[unlikely]] {
46 return CIDR{ia, nBits};
54 :
CIDR{read_ (cidrNotation, addressFamily)}
59String CIDR::As<String> ()
const
62 sb << fBaseAddress_.
As<
String> () <<
"/"sv << (
int)fSignificantBits_;
69 sb << fBaseAddress_ <<
"/"sv << (int)fSignificantBits_;
75 Require (fBaseAddress_.GetAddressSize ().has_value ());
76 size_t offset = *fBaseAddress_.GetAddressSize () * 8 - fSignificantBits_;
Similar to String, but intended to more efficiently construct a String. Mutable type (String is large...
String is like std::u32string, except it is much easier to use, often much more space efficient,...
nonvirtual String SubString(SZ from) const
nonvirtual optional< size_t > RFind(Character c) const noexcept
nonvirtual Traversal::DiscreteRange< InternetAddress > GetRange() const
nonvirtual String ToString() const
A DiscreteRange is a Range where the underlying endpoints are integral (discrete, not continuous); th...
void Throw(T &&e2Throw)
identical to builtin C++ 'throw' except that it does helpful, type dependent DbgTrace() messages firs...