Remove ByteString::FormatFloat() FloatToString(), and DoubleToString() - Remove the last test-only caller to ByteString::FormatFloat() and replace its use with hard-coded values. - Remove FloatToString(), which in turn has no callers except for its own unit tests. - Remove DoubleToString(), which has no callers except its own unit tests. - Remove the implementation shared between FloatToString() and DoubleToString(). Change-Id: Ic150a96444c25c5f1ae9db828c8c33f08b7abbda Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/124350 Reviewed-by: Tom Sepez <tsepez@google.com> Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_psengine_unittest.cpp b/core/fpdfapi/page/cpdf_psengine_unittest.cpp index cad8dc8..79b33b3 100644 --- a/core/fpdfapi/page/cpdf_psengine_unittest.cpp +++ b/core/fpdfapi/page/cpdf_psengine_unittest.cpp
@@ -7,6 +7,7 @@ #include <iterator> #include <limits> +#include "core/fxcrt/notreached.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -80,10 +81,17 @@ EXPECT_EQ(item.op, new_op); if (new_op == PSOP_CONST) { float fv = new_psop->GetFloatValue(); - if (word == "invalid") - EXPECT_FLOAT_EQ(0, fv); - else - EXPECT_EQ(word, ByteString::FormatFloat(fv)); + if (word == "55") { + EXPECT_FLOAT_EQ(55.0f, fv); + } else if (word == "123.4") { + EXPECT_FLOAT_EQ(123.4f, fv); + } else if (word == "-5") { + EXPECT_FLOAT_EQ(-5.0f, fv); + } else if (word == "invalid") { + EXPECT_FLOAT_EQ(0.0f, fv); + } else { + NOTREACHED_NORETURN(); + } } } }
diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp index 7274d76..49fc738 100644 --- a/core/fxcrt/bytestring.cpp +++ b/core/fxcrt/bytestring.cpp
@@ -49,12 +49,6 @@ } // static -ByteString ByteString::FormatFloat(float f) { - char buf[32]; - return UNSAFE_TODO(ByteString(buf, FloatToString(f, buf))); -} - -// static ByteString ByteString::FormatV(const char* pFormat, va_list argList) { va_list argListCopy; va_copy(argListCopy, argList);
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h index 633f311..2ba59fc 100644 --- a/core/fxcrt/bytestring.h +++ b/core/fxcrt/bytestring.h
@@ -25,7 +25,6 @@ class ByteString : public StringTemplate<char> { public: [[nodiscard]] static ByteString FormatInteger(int i); - [[nodiscard]] static ByteString FormatFloat(float f); [[nodiscard]] static ByteString Format(const char* pFormat, ...); [[nodiscard]] static ByteString FormatV(const char* pFormat, va_list argList);
diff --git a/core/fxcrt/fx_string.cpp b/core/fxcrt/fx_string.cpp index 0215441..948c255 100644 --- a/core/fxcrt/fx_string.cpp +++ b/core/fxcrt/fx_string.cpp
@@ -9,16 +9,14 @@ #include <stdint.h> #include <array> -#include <iterator> +#include <string> +#include <vector> #include "build/build_config.h" #include "core/fxcrt/bytestring.h" #include "core/fxcrt/code_point_view.h" -#include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/fx_extension.h" #include "core/fxcrt/span.h" -#include "core/fxcrt/stl_util.h" -#include "core/fxcrt/string_view_template.h" #include "core/fxcrt/utf16.h" #include "core/fxcrt/widestring.h" @@ -150,54 +148,6 @@ return bNegative ? -value : value; } -template <class T> -size_t ToString(T value, int (*round_func)(T), pdfium::span<char> buf) { - buf[0] = '0'; - buf[1] = '\0'; - if (value == 0) { - return 1; - } - bool bNegative = false; - if (value < 0) { - bNegative = true; - value = -value; - } - int scale = 1; - int scaled = round_func(value); - while (scaled < 100000) { - if (scale == 1000000) { - break; - } - scale *= 10; - scaled = round_func(value * scale); - } - if (scaled == 0) { - return 1; - } - char buf2[32]; - size_t buf_size = 0; - if (bNegative) { - buf[buf_size++] = '-'; - } - int i = scaled / scale; - FXSYS_itoa(i, buf2, 10); - size_t len = strlen(buf2); - fxcrt::Copy(pdfium::make_span(buf2).first(len), buf.subspan(buf_size)); - buf_size += len; - int fraction = scaled % scale; - if (fraction == 0) { - return buf_size; - } - buf[buf_size++] = '.'; - scale /= 10; - while (fraction) { - buf[buf_size++] = '0' + fraction / scale; - fraction %= scale; - scale /= 10; - } - return buf_size; -} - } // namespace float StringToFloat(ByteStringView strc) { @@ -208,10 +158,6 @@ return StringToFloat(FX_UTF8Encode(wsStr).AsStringView()); } -size_t FloatToString(float f, pdfium::span<char> buf) { - return ToString<float>(f, FXSYS_roundf, buf); -} - double StringToDouble(ByteStringView strc) { return StringTo<double>(strc, kFractionScalesDouble); } @@ -220,10 +166,6 @@ return StringToDouble(FX_UTF8Encode(wsStr).AsStringView()); } -size_t DoubleToString(double d, pdfium::span<char> buf) { - return ToString<double>(d, FXSYS_round, buf); -} - namespace fxcrt { template std::vector<ByteString> Split<ByteString>(const ByteString& that,
diff --git a/core/fxcrt/fx_string.h b/core/fxcrt/fx_string.h index 3485a80..cd79418 100644 --- a/core/fxcrt/fx_string.h +++ b/core/fxcrt/fx_string.h
@@ -26,11 +26,9 @@ float StringToFloat(ByteStringView str); float StringToFloat(WideStringView wsStr); -size_t FloatToString(float f, pdfium::span<char> buf); double StringToDouble(ByteStringView str); double StringToDouble(WideStringView wsStr); -size_t DoubleToString(double d, pdfium::span<char> buf); namespace fxcrt {
diff --git a/core/fxcrt/fx_string_unittest.cpp b/core/fxcrt/fx_string_unittest.cpp index 830182f..3d39f87 100644 --- a/core/fxcrt/fx_string_unittest.cpp +++ b/core/fxcrt/fx_string_unittest.cpp
@@ -10,18 +10,6 @@ #include "core/fxcrt/utf16.h" #include "testing/gtest/include/gtest/gtest.h" -char* TerminatedFloatToString(float value, pdfium::span<char> buf) { - size_t buflen = FloatToString(value, buf); - buf[buflen] = '\0'; - return buf.data(); -} - -char* TerminatedDoubleToString(double value, pdfium::span<char> buf) { - size_t buflen = DoubleToString(value, buf); - buf[buflen] = '\0'; - return buf.data(); -} - TEST(fxstring, FXUTF8Encode) { EXPECT_EQ("", FX_UTF8Encode(WideStringView())); EXPECT_EQ( @@ -110,44 +98,6 @@ EXPECT_FLOAT_EQ(1.999999881f, StringToFloat(L"1.999999881")); } -TEST(fxstring, FloatToString) { - char buf[32]; - - EXPECT_STREQ("0", TerminatedFloatToString(0.0f, buf)); - EXPECT_STREQ("0", TerminatedFloatToString(-0.0f, buf)); - EXPECT_STREQ("0", - TerminatedFloatToString(std::numeric_limits<float>::min(), buf)); - EXPECT_STREQ( - "0", TerminatedFloatToString(-std::numeric_limits<float>::min(), buf)); - - EXPECT_STREQ("0.25", TerminatedFloatToString(0.25f, buf)); - EXPECT_STREQ("-0.25", TerminatedFloatToString(-0.25f, buf)); - - EXPECT_STREQ("100", TerminatedFloatToString(100.0f, buf)); - EXPECT_STREQ("-100", TerminatedFloatToString(-100.0f, buf)); - - // FloatToString won't convert beyond the maximum integer, and values - // larger than that get converted to a string representing that. - EXPECT_STREQ("2147483647", TerminatedFloatToString(2147483647.0f, buf)); - EXPECT_STREQ("2147483647", TerminatedFloatToString(2147483647.5f, buf)); - EXPECT_STREQ("2147483647", - TerminatedFloatToString(std::numeric_limits<float>::max(), buf)); - - // FloatToString won't convert beyond the minimum integer, and values - // smaller than that get converted to a string representing that. - EXPECT_STREQ("-2147483647", TerminatedFloatToString(-2147483647.0f, buf)); - EXPECT_STREQ("-2147483647", TerminatedFloatToString(-2147483647.5f, buf)); - EXPECT_STREQ("-2147483647", TerminatedFloatToString( - -std::numeric_limits<float>::max(), buf)); - - // Conversion only acknowledges precision to 5 digit past decimal, and - // rounds beyond that. - EXPECT_STREQ("1", TerminatedFloatToString(1.000001119f, buf)); - EXPECT_STREQ("1.00001", TerminatedFloatToString(1.000011119f, buf)); - EXPECT_STREQ("1.99999", TerminatedFloatToString(1.999988881f, buf)); - EXPECT_STREQ("2", TerminatedFloatToString(1.999999881f, buf)); -} - TEST(fxstring, ByteStringToDouble) { EXPECT_FLOAT_EQ(0.0, StringToDouble("")); EXPECT_FLOAT_EQ(0.0, StringToDouble("0")); @@ -194,44 +144,6 @@ EXPECT_FLOAT_EQ(1.999999881, StringToDouble(L"1.999999881")); } -TEST(fxstring, DoubleToString) { - char buf[32]; - - EXPECT_STREQ("0", TerminatedDoubleToString(0.0f, buf)); - EXPECT_STREQ("0", TerminatedDoubleToString(-0.0f, buf)); - EXPECT_STREQ( - "0", TerminatedDoubleToString(std::numeric_limits<double>::min(), buf)); - EXPECT_STREQ( - "0", TerminatedDoubleToString(-std::numeric_limits<double>::min(), buf)); - - EXPECT_STREQ("0.25", TerminatedDoubleToString(0.25f, buf)); - EXPECT_STREQ("-0.25", TerminatedDoubleToString(-0.25f, buf)); - - EXPECT_STREQ("100", TerminatedDoubleToString(100.0f, buf)); - EXPECT_STREQ("-100", TerminatedDoubleToString(-100.0f, buf)); - - // DoubleToString won't convert beyond the maximum integer, and values - // larger than that get converted to a string representing that. - EXPECT_STREQ("2147483647", TerminatedDoubleToString(2147483647.0f, buf)); - EXPECT_STREQ("2147483647", TerminatedDoubleToString(2147483647.5f, buf)); - EXPECT_STREQ("2147483647", TerminatedDoubleToString( - std::numeric_limits<double>::max(), buf)); - - // DoubleToString won't convert beyond the minimum integer, and values - // smaller than that get converted to a string representing that. - EXPECT_STREQ("-2147483647", TerminatedDoubleToString(-2147483647.0f, buf)); - EXPECT_STREQ("-2147483647", TerminatedDoubleToString(-2147483647.5f, buf)); - EXPECT_STREQ("-2147483647", TerminatedDoubleToString( - -std::numeric_limits<double>::max(), buf)); - - // Conversion only acknowledges precision to 5 digit past decimal, and - // rounds beyond that. - EXPECT_STREQ("1", TerminatedDoubleToString(1.000001119f, buf)); - EXPECT_STREQ("1.00001", TerminatedDoubleToString(1.000011119f, buf)); - EXPECT_STREQ("1.99999", TerminatedDoubleToString(1.999988881f, buf)); - EXPECT_STREQ("2", TerminatedDoubleToString(1.999999881f, buf)); -} - TEST(fxstring, SplitByteString) { std::vector<ByteString> result; result = fxcrt::Split(ByteString(""), ',');