util: move HasPrefix() so it can be reused

Move the function `HasPrefix()` from `netaddress.cpp` to `util/string.h`
so it can be reused by `CNetAddr` methods (and possibly others).
This commit is contained in:
Vasil Dimov 2020-08-31 10:39:00 +02:00
parent a47e596486
commit d2bb681f96
No known key found for this signature in database
GPG key ID: 54DF06F64B55CBBF
2 changed files with 15 additions and 8 deletions

View file

@ -7,8 +7,9 @@
#include <hash.h>
#include <tinyformat.h>
#include <util/strencodings.h>
#include <util/asmap.h>
#include <util/strencodings.h>
#include <util/string.h>
#include <algorithm>
#include <array>
@ -50,13 +51,6 @@ void CNetAddr::SetIP(const CNetAddr& ipIn)
m_addr = ipIn.m_addr;
}
template <typename T1, size_t PREFIX_LEN>
inline bool HasPrefix(const T1& obj, const std::array<uint8_t, PREFIX_LEN>& prefix)
{
return obj.size() >= PREFIX_LEN &&
std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
}
void CNetAddr::SetLegacyIPv6(Span<const uint8_t> ipv6)
{
assert(ipv6.size() == ADDR_IPV6_SIZE);

View file

@ -7,6 +7,8 @@
#include <attributes.h>
#include <algorithm>
#include <array>
#include <cstring>
#include <locale>
#include <sstream>
@ -74,4 +76,15 @@ std::string ToString(const T& t)
return oss.str();
}
/**
* Check whether a container begins with the given prefix.
*/
template <typename T1, size_t PREFIX_LEN>
NODISCARD inline bool HasPrefix(const T1& obj,
const std::array<uint8_t, PREFIX_LEN>& prefix)
{
return obj.size() >= PREFIX_LEN &&
std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
}
#endif // BITCOIN_UTIL_STRENCODINGS_H