diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/DoubleConversions.cpp b/packages/react-native/ReactCommon/react/renderer/graphics/DoubleConversions.cpp new file mode 100644 index 00000000000..488f56bed23 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/graphics/DoubleConversions.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "DoubleConversions.h" + +#include +#include + +namespace facebook::react { + +std::string toString(double doubleValue, char suffix) { + // Format taken from folly's toString + static double_conversion::DoubleToStringConverter conv( + 0, + nullptr, + nullptr, + 'E', + -6, // detail::kConvMaxDecimalInShortestLow, + 21, // detail::kConvMaxDecimalInShortestHigh, + 6, // max leading padding zeros + 1); // max trailing padding zeros + std::array buffer{}; + double_conversion::StringBuilder builder(buffer.data(), buffer.size()); + if (!conv.ToShortest(doubleValue, &builder)) { + // Serialize infinite and NaN as 0 + builder.AddCharacter('0'); + } + builder.AddCharacter(suffix); + return builder.Finalize(); +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/DoubleConversions.h b/packages/react-native/ReactCommon/react/renderer/graphics/DoubleConversions.h new file mode 100644 index 00000000000..504b3c8804a --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/graphics/DoubleConversions.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace facebook::react { + +std::string toString(double doubleValue, char suffix); + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.cpp b/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.cpp index 801aee979db..a8eabd55468 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.cpp +++ b/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.cpp @@ -8,37 +8,13 @@ #include "ValueUnit.h" #ifdef RN_SERIALIZABLE_STATE -#include -#include -#include +#include "DoubleConversions.h" #endif namespace facebook::react { #ifdef RN_SERIALIZABLE_STATE -std::string toString(double doubleValue, char suffix) { - // Format taken from folly's toString - static double_conversion::DoubleToStringConverter conv( - 0, - NULL, - NULL, - 'E', - -6, // detail::kConvMaxDecimalInShortestLow, - 21, // detail::kConvMaxDecimalInShortestHigh, - 6, // max leading padding zeros - 1); // max trailing padding zeros - std::array buffer{}; - double_conversion::StringBuilder builder(buffer.data(), buffer.size()); - if (!conv.ToShortest(doubleValue, &builder)) { - // Serialize infinite and NaN as 0% - builder.AddCharacter('0'); - builder.AddCharacter('%'); - } - builder.AddCharacter(suffix); - return builder.Finalize(); -} - folly::dynamic ValueUnit::toDynamic() const { switch (unit) { case UnitType::Undefined: