28#ifndef DOUBLE_CONVERSION_BIGNUM_H_
29#define DOUBLE_CONVERSION_BIGNUM_H_
42 Bignum() : used_bigits_(0), exponent_(0) {}
101 typedef uint32_t Chunk;
102 typedef uint64_t DoubleChunk;
104 static const int kChunkSize =
sizeof(Chunk) * 8;
105 static const int kDoubleChunkSize =
sizeof(DoubleChunk) * 8;
108 static const int kBigitSize = 28;
109 static const Chunk kBigitMask = (1 << kBigitSize) - 1;
114 static void EnsureCapacity(
const int size) {
115 if (size > kBigitCapacity) {
121 bool IsClamped()
const {
122 return used_bigits_ == 0 || RawBigit(used_bigits_ - 1) != 0;
131 void BigitsShiftLeft(
const int shift_amount);
133 int BigitLength()
const {
return used_bigits_ + exponent_; }
134 Chunk& RawBigit(
const int index);
135 const Chunk& RawBigit(
const int index)
const;
136 Chunk BigitOrZero(
const int index)
const;
137 void SubtractTimes(
const Bignum& other,
const int factor);
143 int16_t used_bigits_;
145 Chunk bigits_buffer_[kBigitCapacity];
static uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment)
static const int kMaxSignificantBits
static int Compare(const Bignum &a, const Bignum &b)
void AssignBignum(const Bignum &other)
void ShiftLeft(const int shift_amount)
void AssignDecimalString(const Vector< const char > value)
static bool Equal(const Bignum &a, const Bignum &b)
static bool PlusLessEqual(const Bignum &a, const Bignum &b, const Bignum &c)
void MultiplyByPowerOfTen(const int exponent)
void AddUInt64(const uint64_t operand)
void AssignUInt64(uint64_t value)
uint16_t DivideModuloIntBignum(const Bignum &other)
static bool LessEqual(const Bignum &a, const Bignum &b)
static bool Less(const Bignum &a, const Bignum &b)
void AssignPowerUInt16(uint16_t base, const int exponent)
static bool PlusEqual(const Bignum &a, const Bignum &b, const Bignum &c)
void MultiplyByUInt32(const uint32_t factor)
void SubtractBignum(const Bignum &other)
static bool PlusLess(const Bignum &a, const Bignum &b, const Bignum &c)
void AssignUInt16(const uint16_t value)
void MultiplyByUInt64(const uint64_t factor)
void AddBignum(const Bignum &other)
void AssignHexString(const Vector< const char > value)
static int PlusCompare(const Bignum &a, const Bignum &b, const Bignum &c)
bool ToHexString(char *buffer, const int buffer_size) const
static const uint8_t buffer[]
#define DOUBLE_CONVERSION_UNREACHABLE()
#define DOUBLE_CONVERSION_DISALLOW_COPY_AND_ASSIGN(TypeName)