mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 23:07:59 +01:00
Extend CustomUintFormatter to support enums
Extracted by Pieter Wuille from a comment by Russ Yanofsky, see https://github.com/bitcoin/bitcoin/pull/18317#discussion_r398821936.
This commit is contained in:
parent
769ee5fa00
commit
6f9a1e5ad0
1 changed files with 4 additions and 3 deletions
|
@ -538,14 +538,15 @@ struct CustomUintFormatter
|
||||||
|
|
||||||
template <typename Stream, typename I> void Unser(Stream& s, I& v)
|
template <typename Stream, typename I> void Unser(Stream& s, I& v)
|
||||||
{
|
{
|
||||||
static_assert(std::numeric_limits<I>::max() >= MAX && std::numeric_limits<I>::min() <= 0, "CustomUintFormatter type too small");
|
using U = typename std::conditional<std::is_enum<I>::value, std::underlying_type<I>, std::common_type<I>>::type::type;
|
||||||
|
static_assert(std::numeric_limits<U>::max() >= MAX && std::numeric_limits<U>::min() <= 0, "Assigned type too small");
|
||||||
uint64_t raw = 0;
|
uint64_t raw = 0;
|
||||||
if (BigEndian) {
|
if (BigEndian) {
|
||||||
s.read(((char*)&raw) + 8 - Bytes, Bytes);
|
s.read(((char*)&raw) + 8 - Bytes, Bytes);
|
||||||
v = be64toh(raw);
|
v = static_cast<I>(be64toh(raw));
|
||||||
} else {
|
} else {
|
||||||
s.read((char*)&raw, Bytes);
|
s.read((char*)&raw, Bytes);
|
||||||
v = le64toh(raw);
|
v = static_cast<I>(le64toh(raw));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue