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 "core/fxcrt/include/fx_basic.h" | 7 #include "core/fxcrt/include/fx_basic.h" |
8 #include "core/fxcrt/include/fx_ext.h" | 8 #include "core/fxcrt/include/fx_ext.h" |
9 | 9 |
10 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ | 10 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ |
(...skipping 29 matching lines...) Expand all Loading... |
40 if (bNegative) { | 40 if (bNegative) { |
41 integer = -integer; | 41 integer = -integer; |
42 } | 42 } |
43 *(int*)pData = integer.ValueOrDefault(0); | 43 *(int*)pData = integer.ValueOrDefault(0); |
44 } else { | 44 } else { |
45 bInteger = FALSE; | 45 bInteger = FALSE; |
46 *(FX_FLOAT*)pData = FX_atof(strc); | 46 *(FX_FLOAT*)pData = FX_atof(strc); |
47 } | 47 } |
48 } | 48 } |
49 | 49 |
| 50 static const FX_FLOAT fraction_scales[] = { |
| 51 0.1f, 0.01f, 0.001f, 0.0001f, |
| 52 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, |
| 53 0.000000001f, 0.0000000001f, 0.00000000001f}; |
| 54 int FXSYS_FractionalScaleCount() { |
| 55 return FX_ArraySize(fraction_scales); |
| 56 } |
| 57 |
| 58 FX_FLOAT FXSYS_FractionalScale(size_t scale_factor, int value) { |
| 59 return fraction_scales[scale_factor] * value; |
| 60 } |
| 61 |
50 FX_FLOAT FX_atof(const CFX_ByteStringC& strc) { | 62 FX_FLOAT FX_atof(const CFX_ByteStringC& strc) { |
51 if (strc.IsEmpty()) | 63 if (strc.IsEmpty()) |
52 return 0.0; | 64 return 0.0; |
53 | 65 |
54 int cc = 0; | 66 int cc = 0; |
55 bool bNegative = false; | 67 bool bNegative = false; |
56 int len = strc.GetLength(); | 68 int len = strc.GetLength(); |
57 if (strc[0] == '+') { | 69 if (strc[0] == '+') { |
58 cc++; | 70 cc++; |
59 } else if (strc[0] == '-') { | 71 } else if (strc[0] == '-') { |
60 bNegative = TRUE; | 72 bNegative = TRUE; |
61 cc++; | 73 cc++; |
62 } | 74 } |
63 while (cc < len) { | 75 while (cc < len) { |
64 if (strc[cc] != '+' && strc[cc] != '-') { | 76 if (strc[cc] != '+' && strc[cc] != '-') { |
65 break; | 77 break; |
66 } | 78 } |
67 cc++; | 79 cc++; |
68 } | 80 } |
69 FX_FLOAT value = 0; | 81 FX_FLOAT value = 0; |
70 while (cc < len) { | 82 while (cc < len) { |
71 if (strc[cc] == '.') { | 83 if (strc[cc] == '.') { |
72 break; | 84 break; |
73 } | 85 } |
74 value = value * 10 + FXSYS_toDecimalDigit(strc.CharAt(cc)); | 86 value = value * 10 + FXSYS_toDecimalDigit(strc.CharAt(cc)); |
75 cc++; | 87 cc++; |
76 } | 88 } |
77 static const FX_FLOAT fraction_scales[] = { | |
78 0.1f, 0.01f, 0.001f, 0.0001f, | |
79 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, | |
80 0.000000001f, 0.0000000001f, 0.00000000001f}; | |
81 int scale = 0; | 89 int scale = 0; |
82 if (cc < len && strc[cc] == '.') { | 90 if (cc < len && strc[cc] == '.') { |
83 cc++; | 91 cc++; |
84 while (cc < len) { | 92 while (cc < len) { |
85 value += fraction_scales[scale] * FXSYS_toDecimalDigit(strc.CharAt(cc)); | 93 value += |
| 94 FXSYS_FractionalScale(scale, FXSYS_toDecimalDigit(strc.CharAt(cc))); |
86 scale++; | 95 scale++; |
87 if (scale == FX_ArraySize(fraction_scales)) | 96 if (scale == FXSYS_FractionalScaleCount()) |
88 break; | 97 break; |
89 cc++; | 98 cc++; |
90 } | 99 } |
91 } | 100 } |
92 return bNegative ? -value : value; | 101 return bNegative ? -value : value; |
93 } | 102 } |
94 | 103 |
95 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900 | 104 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900 |
96 void FXSYS_snprintf(char* str, | 105 void FXSYS_snprintf(char* str, |
97 size_t size, | 106 size_t size, |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 dstShift -= 8; | 301 dstShift -= 8; |
293 result |= *dataPtr++ << dstShift; | 302 result |= *dataPtr++ << dstShift; |
294 } | 303 } |
295 if (dstShift > 0) { | 304 if (dstShift > 0) { |
296 bitShift = 8 - dstShift; | 305 bitShift = 8 - dstShift; |
297 bitMask = (1 << dstShift) - 1; | 306 bitMask = (1 << dstShift) - 1; |
298 result |= *dataPtr++ >> bitShift & bitMask; | 307 result |= *dataPtr++ >> bitShift & bitMask; |
299 } | 308 } |
300 return result; | 309 return result; |
301 } | 310 } |
OLD | NEW |