8 #include "src/vector.h" 18 static const int kMaxSignificantBits = 3584;
21 void AssignUInt16(uint16_t value);
22 void AssignUInt64(uint64_t value);
23 void AssignBignum(
const Bignum& other);
28 void AssignPowerUInt16(uint16_t base,
int exponent);
30 void AddUInt16(uint16_t operand);
31 void AddUInt64(uint64_t operand);
32 void AddBignum(
const Bignum& other);
34 void SubtractBignum(
const Bignum& other);
37 void ShiftLeft(
int shift_amount);
38 void MultiplyByUInt32(
uint32_t factor);
39 void MultiplyByUInt64(uint64_t factor);
40 void MultiplyByPowerOfTen(
int exponent);
41 void Times10() {
return MultiplyByUInt32(10); }
46 uint16_t DivideModuloIntBignum(
const Bignum& other);
48 bool ToHexString(
char* buffer,
int buffer_size)
const;
52 return Compare(a, b) == 0;
54 static bool LessEqual(
const Bignum& a,
const Bignum& b) {
55 return Compare(a, b) <= 0;
58 return Compare(a, b) < 0;
64 return PlusCompare(a, b, c) == 0;
68 return PlusCompare(a, b, c) <= 0;
72 return PlusCompare(a, b, c) < 0;
77 typedef uint64_t DoubleChunk;
79 static const int kChunkSize =
sizeof(
Chunk) * 8;
80 static const int kDoubleChunkSize =
sizeof(DoubleChunk) * 8;
83 static const int kBigitSize = 28;
84 static const Chunk kBigitMask = (1 << kBigitSize) - 1;
87 static const int kBigitCapacity = kMaxSignificantBits / kBigitSize;
89 void EnsureCapacity(
int size) {
90 if (size > kBigitCapacity) {
94 void Align(
const Bignum& other);
96 bool IsClamped()
const;
101 void BigitsShiftLeft(
int shift_amount);
103 int BigitLength()
const {
return used_digits_ + exponent_; }
104 Chunk BigitAt(
int index)
const;
105 void SubtractTimes(
const Bignum& other,
int factor);
107 Chunk bigits_buffer_[kBigitCapacity];
115 DISALLOW_COPY_AND_ASSIGN(
Bignum);
121 #endif // V8_BIGNUM_H_