5#ifndef V8_BASE_NUMBERS_BIGNUM_H_
6#define V8_BASE_NUMBERS_BIGNUM_H_
18 static const int kMaxSignificantBits = 3584;
23 void AssignUInt16(uint16_t value);
24 void AssignUInt64(uint64_t value);
25 void AssignBignum(
const Bignum& other);
30 void AssignPowerUInt16(uint16_t
base,
int exponent);
33 void AddUInt64(uint64_t operand);
34 void AddBignum(
const Bignum& other);
36 void SubtractBignum(
const Bignum& other);
39 void ShiftLeft(
int shift_amount);
40 void MultiplyByUInt32(uint32_t factor);
41 void MultiplyByUInt64(uint64_t factor);
42 void MultiplyByPowerOfTen(
int exponent);
43 void Times10() {
return MultiplyByUInt32(10); }
48 uint16_t DivideModuloIntBignum(
const Bignum& other);
50 bool ToHexString(
char* buffer,
int buffer_size)
const;
66 return PlusCompare(a, b, c) == 0;
70 return PlusCompare(a, b, c) <= 0;
74 return PlusCompare(a, b, c) < 0;
81 static const int kChunkSize =
sizeof(
Chunk) * 8;
85 static const int kBigitSize = 28;
86 static const Chunk kBigitMask = (1 << kBigitSize) - 1;
89 static const int kBigitCapacity = kMaxSignificantBits / kBigitSize;
92 if (size > kBigitCapacity) {
96 void Align(
const Bignum& other);
98 bool IsClamped()
const;
103 void BigitsShiftLeft(
int shift_amount);
106 Chunk BigitAt(
int index)
const;
107 void SubtractTimes(
const Bignum& other,
int factor);
109 Chunk bigits_buffer_[kBigitCapacity];
static bool LessEqual(const Bignum &a, const Bignum &b)
void AddUInt16(uint16_t operand)
static bool Equal(const Bignum &a, const Bignum &b)
Bignum(const Bignum &)=delete
static bool PlusLessEqual(const Bignum &a, const Bignum &b, const Bignum &c)
void EnsureCapacity(int size)
Bignum & operator=(const Bignum &)=delete
static bool Less(const Bignum &a, const Bignum &b)
static bool PlusLess(const Bignum &a, const Bignum &b, const Bignum &c)
static bool PlusEqual(const Bignum &a, const Bignum &b, const Bignum &c)
int Compare(const T &a, const T &b)