1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FGAS_CRT_CFGAS_DECIMAL_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FGAS_CRT_CFGAS_DECIMAL_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h" 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_Decimal { 13*3ac0a46fSAndroid Build Coastguard Worker public: 14*3ac0a46fSAndroid Build Coastguard Worker CFGAS_Decimal(); 15*3ac0a46fSAndroid Build Coastguard Worker explicit CFGAS_Decimal(uint32_t val); 16*3ac0a46fSAndroid Build Coastguard Worker explicit CFGAS_Decimal(uint64_t val); 17*3ac0a46fSAndroid Build Coastguard Worker explicit CFGAS_Decimal(int32_t val); 18*3ac0a46fSAndroid Build Coastguard Worker CFGAS_Decimal(float val, uint8_t scale); 19*3ac0a46fSAndroid Build Coastguard Worker explicit CFGAS_Decimal(WideStringView str); 20*3ac0a46fSAndroid Build Coastguard Worker 21*3ac0a46fSAndroid Build Coastguard Worker WideString ToWideString() const; 22*3ac0a46fSAndroid Build Coastguard Worker float ToFloat() const; 23*3ac0a46fSAndroid Build Coastguard Worker double ToDouble() const; 24*3ac0a46fSAndroid Build Coastguard Worker 25*3ac0a46fSAndroid Build Coastguard Worker CFGAS_Decimal operator*(const CFGAS_Decimal& val) const; 26*3ac0a46fSAndroid Build Coastguard Worker CFGAS_Decimal operator/(const CFGAS_Decimal& val) const; 27*3ac0a46fSAndroid Build Coastguard Worker IsNotZero()28*3ac0a46fSAndroid Build Coastguard Worker bool IsNotZero() const { return m_uHi || m_uMid || m_uLo; } GetScale()29*3ac0a46fSAndroid Build Coastguard Worker uint8_t GetScale() const { return m_uScale; } 30*3ac0a46fSAndroid Build Coastguard Worker void SetScale(uint8_t newScale); 31*3ac0a46fSAndroid Build Coastguard Worker void SetNegate(); 32*3ac0a46fSAndroid Build Coastguard Worker 33*3ac0a46fSAndroid Build Coastguard Worker private: 34*3ac0a46fSAndroid Build Coastguard Worker CFGAS_Decimal(uint32_t hi, 35*3ac0a46fSAndroid Build Coastguard Worker uint32_t mid, 36*3ac0a46fSAndroid Build Coastguard Worker uint32_t lo, 37*3ac0a46fSAndroid Build Coastguard Worker bool neg, 38*3ac0a46fSAndroid Build Coastguard Worker uint8_t scale); 39*3ac0a46fSAndroid Build Coastguard Worker 40*3ac0a46fSAndroid Build Coastguard Worker uint32_t m_uHi = 0; 41*3ac0a46fSAndroid Build Coastguard Worker uint32_t m_uMid = 0; 42*3ac0a46fSAndroid Build Coastguard Worker uint32_t m_uLo = 0; 43*3ac0a46fSAndroid Build Coastguard Worker bool m_bNeg = false; 44*3ac0a46fSAndroid Build Coastguard Worker uint8_t m_uScale = 0; 45*3ac0a46fSAndroid Build Coastguard Worker }; 46*3ac0a46fSAndroid Build Coastguard Worker 47*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FGAS_CRT_CFGAS_DECIMAL_H_ 48