#include "xfa/fgas/crt/cfgas_decimal.h"
#include <math.h>
#include <algorithm>
#include <limits>
#include <utility>
#include "core/fxcrt/check.h"
#include "core/fxcrt/compiler_specific.h"
#include "core/fxcrt/fx_extension.h"
#define FXMATH_DECIMAL_SCALELIMIT …
#define FXMATH_DECIMAL_RSHIFT32BIT(x) …
#define FXMATH_DECIMAL_LSHIFT32BIT(x) …
namespace {
inline uint8_t decimal_helper_div10(uint64_t& phi,
uint64_t& pmid,
uint64_t& plo) { … }
inline uint8_t decimal_helper_div10_any(uint64_t nums[], uint8_t numcount) { … }
inline void decimal_helper_mul10(uint64_t& phi, uint64_t& pmid, uint64_t& plo) { … }
inline void decimal_helper_mul10_any(uint64_t nums[], uint8_t numcount) { … }
inline void decimal_helper_normalize(uint64_t& phi,
uint64_t& pmid,
uint64_t& plo) { … }
inline void decimal_helper_normalize_any(uint64_t nums[], uint8_t len) { … }
inline int8_t decimal_helper_raw_compare_any(uint64_t a[],
uint8_t al,
uint64_t b[],
uint8_t bl) { … }
inline void decimal_helper_dec_any(uint64_t a[], uint8_t al) { … }
inline void decimal_helper_inc_any(uint64_t a[], uint8_t al) { … }
inline void decimal_helper_raw_mul(uint64_t a[],
uint8_t al,
uint64_t b[],
uint8_t bl,
uint64_t c[],
uint8_t cl) { … }
inline void decimal_helper_raw_div(uint64_t a[],
uint8_t al,
uint64_t b[],
uint8_t bl,
uint64_t c[],
uint8_t cl) { … }
inline bool decimal_helper_outofrange(uint64_t a[], uint8_t al, uint8_t goal) { … }
inline void decimal_helper_shrinkintorange(uint64_t a[],
uint8_t al,
uint8_t goal,
uint8_t& scale) { … }
inline void decimal_helper_truncate(uint64_t& phi,
uint64_t& pmid,
uint64_t& plo,
uint8_t& scale,
uint8_t minscale = 0) { … }
}
CFGAS_Decimal::CFGAS_Decimal() = default;
CFGAS_Decimal::CFGAS_Decimal(uint64_t val)
: … { … }
CFGAS_Decimal::CFGAS_Decimal(uint32_t val)
: … { … }
CFGAS_Decimal::CFGAS_Decimal(uint32_t lo,
uint32_t mid,
uint32_t hi,
bool neg,
uint8_t scale)
: … { … }
CFGAS_Decimal::CFGAS_Decimal(int32_t val) { … }
CFGAS_Decimal::CFGAS_Decimal(float val, uint8_t scale) { … }
CFGAS_Decimal::CFGAS_Decimal(WideStringView str) { … }
WideString CFGAS_Decimal::ToWideString() const { … }
float CFGAS_Decimal::ToFloat() const { … }
double CFGAS_Decimal::ToDouble() const { … }
void CFGAS_Decimal::SetScale(uint8_t newscale) { … }
void CFGAS_Decimal::SetNegate() { … }
CFGAS_Decimal CFGAS_Decimal::operator*(const CFGAS_Decimal& val) const { … }
CFGAS_Decimal CFGAS_Decimal::operator/(const CFGAS_Decimal& val) const { … }