OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
| 7 #include <algorithm> |
| 8 |
7 #include "core/include/fxcrt/fx_xml.h" | 9 #include "core/include/fxcrt/fx_xml.h" |
8 #include "xfa/src/fgas/src/fgas_base.h" | 10 #include "xfa/src/fgas/src/fgas_base.h" |
9 #include "fx_localeimp.h" | 11 #include "fx_localeimp.h" |
10 | 12 |
11 #define FX_LOCALECATEGORY_DateHash 0xbde9abde | 13 #define FX_LOCALECATEGORY_DateHash 0xbde9abde |
12 #define FX_LOCALECATEGORY_TimeHash 0x2d71b00f | 14 #define FX_LOCALECATEGORY_TimeHash 0x2d71b00f |
13 #define FX_LOCALECATEGORY_DateTimeHash 0x158c72ed | 15 #define FX_LOCALECATEGORY_DateTimeHash 0x158c72ed |
14 #define FX_LOCALECATEGORY_NumHash 0x0b4ff870 | 16 #define FX_LOCALECATEGORY_NumHash 0x0b4ff870 |
15 #define FX_LOCALECATEGORY_TextHash 0x2d08af85 | 17 #define FX_LOCALECATEGORY_TextHash 0x2d08af85 |
16 #define FX_LOCALECATEGORY_ZeroHash 0x568cb500 | 18 #define FX_LOCALECATEGORY_ZeroHash 0x568cb500 |
(...skipping 4555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4572 if (!retVal) { | 4574 if (!retVal) { |
4573 retVal += (lo1 > lo2 ? 1 : (lo1 < lo2 ? -1 : 0)); | 4575 retVal += (lo1 > lo2 ? 1 : (lo1 < lo2 ? -1 : 0)); |
4574 } | 4576 } |
4575 return retVal; | 4577 return retVal; |
4576 } | 4578 } |
4577 static inline int8_t fxmath_decimal_helper_raw_compare_any(uint64_t a[], | 4579 static inline int8_t fxmath_decimal_helper_raw_compare_any(uint64_t a[], |
4578 uint8_t al, | 4580 uint8_t al, |
4579 uint64_t b[], | 4581 uint64_t b[], |
4580 uint8_t bl) { | 4582 uint8_t bl) { |
4581 int8_t retVal = 0; | 4583 int8_t retVal = 0; |
4582 for (int i = FX_MAX(al - 1, bl - 1); i >= 0; i--) { | 4584 for (int i = std::max(al - 1, bl - 1); i >= 0; i--) { |
4583 uint64_t l = (i >= al ? 0 : a[i]), r = (i >= bl ? 0 : b[i]); | 4585 uint64_t l = (i >= al ? 0 : a[i]), r = (i >= bl ? 0 : b[i]); |
4584 retVal += (l > r ? 1 : (l < r ? -1 : 0)); | 4586 retVal += (l > r ? 1 : (l < r ? -1 : 0)); |
4585 if (retVal) { | 4587 if (retVal) { |
4586 return retVal; | 4588 return retVal; |
4587 } | 4589 } |
4588 } | 4590 } |
4589 return retVal; | 4591 return retVal; |
4590 } | 4592 } |
4591 static inline void fxmath_decimal_helper_dec_any(uint64_t a[], uint8_t al) { | 4593 static inline void fxmath_decimal_helper_dec_any(uint64_t a[], uint8_t al) { |
4592 for (int i = 0; i < al; i++) { | 4594 for (int i = 0; i < al; i++) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4673 left[0]++; | 4675 left[0]++; |
4674 fxmath_decimal_helper_normalize_any(left, al); | 4676 fxmath_decimal_helper_normalize_any(left, al); |
4675 break; | 4677 break; |
4676 case 1: | 4678 case 1: |
4677 for (i = 0; i < 16; i++) { | 4679 for (i = 0; i < 16; i++) { |
4678 right[i] = cur[i]; | 4680 right[i] = cur[i]; |
4679 } | 4681 } |
4680 fxmath_decimal_helper_dec_any(right, al); | 4682 fxmath_decimal_helper_dec_any(right, al); |
4681 break; | 4683 break; |
4682 case 0: | 4684 case 0: |
4683 for (i = 0; i < FX_MIN(al, cl); i++) { | 4685 for (i = 0; i < std::min(al, cl); i++) { |
4684 c[i] = cur[i]; | 4686 c[i] = cur[i]; |
4685 } | 4687 } |
4686 return; | 4688 return; |
4687 } | 4689 } |
4688 } | 4690 } |
4689 for (i = 0; i < FX_MIN(al, cl); i++) { | 4691 for (i = 0; i < std::min(al, cl); i++) { |
4690 c[i] = left[i]; | 4692 c[i] = left[i]; |
4691 } | 4693 } |
4692 } | 4694 } |
4693 static inline FX_BOOL fxmath_decimal_helper_outofrange(uint64_t a[], | 4695 static inline FX_BOOL fxmath_decimal_helper_outofrange(uint64_t a[], |
4694 uint8_t al, | 4696 uint8_t al, |
4695 uint8_t goal) { | 4697 uint8_t goal) { |
4696 for (int i = goal; i < al; i++) { | 4698 for (int i = goal; i < al; i++) { |
4697 if (a[i]) { | 4699 if (a[i]) { |
4698 return TRUE; | 4700 return TRUE; |
4699 } | 4701 } |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4949 val.m_uLo = tmp; | 4951 val.m_uLo = tmp; |
4950 tmp = m_uFlags; | 4952 tmp = m_uFlags; |
4951 m_uFlags = val.m_uFlags; | 4953 m_uFlags = val.m_uFlags; |
4952 val.m_uFlags = tmp; | 4954 val.m_uFlags = tmp; |
4953 } | 4955 } |
4954 int8_t CFX_Decimal::Compare(const CFX_Decimal& val) const { | 4956 int8_t CFX_Decimal::Compare(const CFX_Decimal& val) const { |
4955 CFX_Decimal lhs = *this, rhs = val; | 4957 CFX_Decimal lhs = *this, rhs = val; |
4956 int8_t retVal = 0; | 4958 int8_t retVal = 0; |
4957 if (FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != | 4959 if (FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != |
4958 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)) { | 4960 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)) { |
4959 uint8_t scale = FX_MIN(FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags), | 4961 uint8_t scale = std::min(FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags), |
4960 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)); | 4962 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)); |
4961 lhs.SetScale(scale); | 4963 lhs.SetScale(scale); |
4962 rhs.SetScale(scale); | 4964 rhs.SetScale(scale); |
4963 } | 4965 } |
4964 retVal = -(FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) - | 4966 retVal = -(FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) - |
4965 FXMATH_DECIMAL_FLAGS2NEG(rhs.m_uFlags)); | 4967 FXMATH_DECIMAL_FLAGS2NEG(rhs.m_uFlags)); |
4966 if (retVal) { | 4968 if (retVal) { |
4967 return retVal; | 4969 return retVal; |
4968 } | 4970 } |
4969 retVal = fxmath_decimal_helper_raw_compare(lhs.m_uHi, lhs.m_uMid, lhs.m_uLo, | 4971 retVal = fxmath_decimal_helper_raw_compare(lhs.m_uHi, lhs.m_uMid, lhs.m_uLo, |
4970 rhs.m_uHi, rhs.m_uMid, rhs.m_uLo); | 4972 rhs.m_uHi, rhs.m_uMid, rhs.m_uLo); |
4971 return (FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) ? -retVal : retVal); | 4973 return (FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) ? -retVal : retVal); |
4972 } | 4974 } |
4973 CFX_Decimal CFX_Decimal::AddOrMinus(const CFX_Decimal& val, | 4975 CFX_Decimal CFX_Decimal::AddOrMinus(const CFX_Decimal& val, |
4974 FX_BOOL isAdding) const { | 4976 FX_BOOL isAdding) const { |
4975 CFX_Decimal lhs = *this, rhs = val; | 4977 CFX_Decimal lhs = *this, rhs = val; |
4976 if (FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != | 4978 if (FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags) != |
4977 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)) { | 4979 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)) { |
4978 uint8_t scale = FX_MAX(FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags), | 4980 uint8_t scale = std::max(FXMATH_DECIMAL_FLAGS2SCALE(lhs.m_uFlags), |
4979 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)); | 4981 FXMATH_DECIMAL_FLAGS2SCALE(rhs.m_uFlags)); |
4980 lhs.SetScale(scale); | 4982 lhs.SetScale(scale); |
4981 rhs.SetScale(scale); | 4983 rhs.SetScale(scale); |
4982 } | 4984 } |
4983 if (!isAdding) { | 4985 if (!isAdding) { |
4984 rhs.SetNegate(); | 4986 rhs.SetNegate(); |
4985 } | 4987 } |
4986 FX_BOOL doRawAdd = (FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) == | 4988 FX_BOOL doRawAdd = (FXMATH_DECIMAL_FLAGS2NEG(lhs.m_uFlags) == |
4987 FXMATH_DECIMAL_FLAGS2NEG(rhs.m_uFlags)); | 4989 FXMATH_DECIMAL_FLAGS2NEG(rhs.m_uFlags)); |
4988 if (doRawAdd) { | 4990 if (doRawAdd) { |
4989 uint64_t phi = lhs.m_uHi, pmid = lhs.m_uMid, plo = lhs.m_uLo; | 4991 uint64_t phi = lhs.m_uHi, pmid = lhs.m_uMid, plo = lhs.m_uLo; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5116 } | 5118 } |
5117 CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const { | 5119 CFX_Decimal CFX_Decimal::operator*(const CFX_Decimal& val) const { |
5118 return Multiply(val); | 5120 return Multiply(val); |
5119 } | 5121 } |
5120 CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const { | 5122 CFX_Decimal CFX_Decimal::operator/(const CFX_Decimal& val) const { |
5121 return Divide(val); | 5123 return Divide(val); |
5122 } | 5124 } |
5123 CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const { | 5125 CFX_Decimal CFX_Decimal::operator%(const CFX_Decimal& val) const { |
5124 return Modulus(val); | 5126 return Modulus(val); |
5125 } | 5127 } |
OLD | NEW |