feat(big): add SBigDec

This commit is contained in:
Adam Heinermann 2024-11-15 03:22:16 -08:00 committed by superp00t
parent 5e776b6db7
commit fac094793a
6 changed files with 97 additions and 50 deletions

View file

@ -36,6 +36,10 @@ void SBigCopy(BigData* a, BigData* b) {
a->m_primary = b->m_primary;
}
void SBigDec(BigData* a, BigData* b) {
Sub(a->m_primary, b->m_primary, 1);
}
void SBigDel(BigData* num) {
delete num;
}

View file

@ -14,6 +14,8 @@ int32_t SBigCompare(BigData* a, BigData* b);
void SBigCopy(BigData* a, BigData* b);
void SBigDec(BigData* a, BigData* b);
void SBigDel(BigData* num);
void SBigFromBinary(BigData* num, const void* data, uint32_t bytes);

View file

@ -392,7 +392,20 @@ void Sub(BigBuffer& a, const BigBuffer& b, const BigBuffer& c) {
}
a.SetCount(i);
// This assert does not exist in retail WoW or Starcraft.
//STORM_ASSERT(!borrow);
}
void Sub(BigBuffer& a, const BigBuffer& b, uint32_t c) {
uint64_t borrow = 0;
uint32_t i = 0;
for (; b.IsUsed(i); i++) {
borrow += b[i] - static_cast<uint64_t>(c);;
a[i] = ExtractLowPartSx(borrow);
}
a.SetCount(i);
// This assert does not exist in retail WoW or Starcraft.
//STORM_ASSERT(!borrow);
}

View file

@ -53,6 +53,8 @@ void Square(BigBuffer& a, const BigBuffer& b, BigStack& stack);
void Sub(BigBuffer& a, const BigBuffer& b, const BigBuffer& c);
void Sub(BigBuffer& a, const BigBuffer& b, uint32_t c);
void ToBinary(TSGrowableArray<uint8_t>& output, const BigBuffer& buffer);
#endif