diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2015-11-03 14:54:35 -0500 |
---|---|---|
committer | Dan Sinclair <dsinclair@chromium.org> | 2015-11-03 14:54:35 -0500 |
commit | e0e922db5fb77df9a5a9cc802096f484ed21da1c (patch) | |
tree | d6b3da42c1a28ec150c5cb9fe6b00d8f6af099d5 /core/src/fxcodec | |
parent | c9e76c09b9e7901823ac52a3705da235bd2abe24 (diff) | |
download | pdfium-e0e922db5fb77df9a5a9cc802096f484ed21da1c.tar.xz |
Revert "Revert "Cleanup some numeric code.""
This reverts commit 23d576f0b498bd4f37ef2175916223a2e5ea0324.
Cleanup some numeric code.
This changes the various comparisons of char >= '0' && char <= '9' and
char < '0' || char > '9' to use std::isdigit checks. It also cleans up
a handful of hex to digit conversions to call one common method.
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1405253007 .
Diffstat (limited to 'core/src/fxcodec')
-rw-r--r-- | core/src/fxcodec/codec/fx_codec.cpp | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/core/src/fxcodec/codec/fx_codec.cpp b/core/src/fxcodec/codec/fx_codec.cpp index 46f479e0b1..08b2d2d985 100644 --- a/core/src/fxcodec/codec/fx_codec.cpp +++ b/core/src/fxcodec/codec/fx_codec.cpp @@ -9,6 +9,7 @@ #include <cmath> #include "../../../../third_party/base/logging.h" +#include "../../../include/fxcrt/fx_ext.h" #include "../../../include/fxcrt/fx_safe_types.h" #include "codec_int.h" @@ -147,6 +148,20 @@ FX_BOOL CCodec_BasicModule::RunLengthEncode(const uint8_t* src_buf, FX_DWORD& dest_size) { return FALSE; } + +#define EXPONENT_DETECT(ptr) \ + for (;; ptr++) { \ + if (!std::isdigit(*ptr)) { \ + if (endptr) \ + *endptr = (char*)ptr; \ + break; \ + } else { \ + exp_ret *= 10; \ + exp_ret += FXSYS_toDecimalDigit(*ptr); \ + continue; \ + } \ + } + extern "C" double FXstrtod(const char* nptr, char** endptr) { double ret = 0.0; const char* ptr = nptr; @@ -157,20 +172,20 @@ extern "C" double FXstrtod(const char* nptr, char** endptr) { return 0.0; } for (;; ptr++) { - if (!e_number && !e_point && (*ptr == '\t' || *ptr == ' ')) { + if (!e_number && !e_point && (*ptr == '\t' || *ptr == ' ')) continue; - } - if (*ptr >= '0' && *ptr <= '9') { - if (!e_number) { + + if (std::isdigit(*ptr)) { + if (!e_number) e_number = 1; - } + if (!e_point) { ret *= 10; - ret += (*ptr - '0'); + ret += FXSYS_toDecimalDigit(*ptr); } else { fra_count++; fra_ret *= 10; - fra_ret += (*ptr - '0'); + fra_ret += FXSYS_toDecimalDigit(*ptr); } continue; } @@ -188,29 +203,17 @@ extern "C" double FXstrtod(const char* nptr, char** endptr) { } } if (e_number && (*ptr == 'e' || *ptr == 'E')) { -#define EXPONENT_DETECT(ptr) \ - for (;; ptr++) { \ - if (*ptr < '0' || *ptr > '9') { \ - if (endptr) \ - *endptr = (char*)ptr; \ - break; \ - } else { \ - exp_ret *= 10; \ - exp_ret += (*ptr - '0'); \ - continue; \ - } \ - } exp_ptr = ptr++; if (*ptr == '+' || *ptr == '-') { exp_sig = (*ptr++ == '+') ? 1 : -1; - if (*ptr < '0' || *ptr > '9') { + if (!std::isdigit(*ptr)) { if (endptr) { *endptr = (char*)exp_ptr; } break; } EXPONENT_DETECT(ptr); - } else if (*ptr >= '0' && *ptr <= '9') { + } else if (std::isdigit(*ptr)) { EXPONENT_DETECT(ptr); } else { if (endptr) { @@ -218,7 +221,6 @@ extern "C" double FXstrtod(const char* nptr, char** endptr) { } break; } -#undef EXPONENT_DETECT break; } if (ptr != nptr && !e_number) { @@ -247,6 +249,8 @@ extern "C" double FXstrtod(const char* nptr, char** endptr) { } return is_negative ? -ret : ret; } +#undef EXPONENT_DETECT + FX_BOOL CCodec_BasicModule::A85Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, |