Refactor Number internals away from int128 to uint64 & a sign flag

This commit is contained in:
Ed Hennis
2025-11-27 01:19:51 -05:00
parent a87460b89f
commit eaaea43f80
6 changed files with 359 additions and 274 deletions

View File

@@ -191,7 +191,7 @@ numberFromJson(SField const& field, Json::Value const& value)
// Number mantissas are much bigger than the allowable parsed values, so
// it can't be out of range.
static_assert(
std::numeric_limits<numberint>::max() >=
std::numeric_limits<std::uint64_t>::max() >=
std::numeric_limits<decltype(parts.mantissa)>::max());
}
else
@@ -199,11 +199,13 @@ numberFromJson(SField const& field, Json::Value const& value)
Throw<std::runtime_error>("not a number");
}
numberint mantissa = parts.mantissa;
if (parts.negative)
mantissa = -mantissa;
return STNumber{field, Number{mantissa, parts.exponent, Number::normalized{}}};
return STNumber{
field,
Number{
parts.negative,
parts.mantissa,
parts.exponent,
Number::normalized{}}};
}
} // namespace ripple