#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "third_party/blink/renderer/platform/wtf/decimal.h"
#include <algorithm>
#include <cfloat>
#include "base/notreached.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/math_extras.h"
#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
namespace blink {
namespace {
constexpr int kExponentMax = …;
constexpr int kExponentMin = …;
constexpr int kPrecision = …;
constexpr uint64_t kMaxCoefficient = …0xDE0B6B3A763FFFF);
class SpecialValueHandler { … };
SpecialValueHandler::SpecialValueHandler(const Decimal& lhs, const Decimal& rhs)
: … { … }
SpecialValueHandler::HandleResult SpecialValueHandler::Handle() { … }
Decimal SpecialValueHandler::Value() const { … }
class UInt128 { … };
UInt128& UInt128::operator/=(const uint32_t divisor) { … }
uint64_t UInt128::MultiplyHigh(uint64_t u, uint64_t v) { … }
static int CountDigits(uint64_t x) { … }
static uint64_t ScaleDown(uint64_t x, int n) { … }
static uint64_t ScaleUp(uint64_t x, int n) { … }
}
Decimal::EncodedData::EncodedData(Sign sign, FormatClass format_class)
: … { … }
Decimal::EncodedData::EncodedData(Sign sign, int exponent, uint64_t coefficient)
: … { … }
bool Decimal::EncodedData::operator==(const EncodedData& another) const { … }
Decimal::Decimal(int32_t i32)
: … { … }
Decimal::Decimal(Sign sign, int exponent, uint64_t coefficient)
: … { … }
Decimal::Decimal(const EncodedData& data) : … { … }
Decimal::Decimal(const Decimal& other) = default;
Decimal& Decimal::operator=(const Decimal& other) = default;
Decimal& Decimal::operator+=(const Decimal& other) { … }
Decimal& Decimal::operator-=(const Decimal& other) { … }
Decimal& Decimal::operator*=(const Decimal& other) { … }
Decimal& Decimal::operator/=(const Decimal& other) { … }
Decimal Decimal::operator-() const { … }
Decimal Decimal::operator+(const Decimal& rhs) const { … }
Decimal Decimal::operator-(const Decimal& rhs) const { … }
Decimal Decimal::operator*(const Decimal& rhs) const { … }
Decimal Decimal::operator/(const Decimal& rhs) const { … }
bool Decimal::operator==(const Decimal& rhs) const { … }
bool Decimal::operator!=(const Decimal& rhs) const { … }
bool Decimal::operator<(const Decimal& rhs) const { … }
bool Decimal::operator<=(const Decimal& rhs) const { … }
bool Decimal::operator>(const Decimal& rhs) const { … }
bool Decimal::operator>=(const Decimal& rhs) const { … }
Decimal Decimal::Abs() const { … }
Decimal::AlignedOperands Decimal::AlignOperands(const Decimal& lhs,
const Decimal& rhs) { … }
static bool IsMultiplePowersOfTen(uint64_t coefficient, int n) { … }
Decimal Decimal::Ceil() const { … }
Decimal Decimal::CompareTo(const Decimal& rhs) const { … }
Decimal Decimal::Floor() const { … }
Decimal Decimal::FromDouble(double double_value) { … }
Decimal Decimal::FromString(const String& str) { … }
Decimal Decimal::Infinity(const Sign sign) { … }
Decimal Decimal::Nan() { … }
Decimal Decimal::Remainder(const Decimal& rhs) const { … }
Decimal Decimal::Round() const { … }
double Decimal::ToDouble() const { … }
String Decimal::ToString() const { … }
Decimal Decimal::Zero(Sign sign) { … }
std::ostream& operator<<(std::ostream& ostream, const Decimal& decimal) { … }
}