diff options
author | robot-contrib <robot-contrib@yandex-team.com> | 2023-07-17 21:47:02 +0300 |
---|---|---|
committer | robot-contrib <robot-contrib@yandex-team.com> | 2023-07-17 21:47:02 +0300 |
commit | 8dfcb1a9f58b63dbc582bc728a5e979afc19d789 (patch) | |
tree | 61e69f3dd389d9a5d22b2acd3e6dd27a8fdf49f2 /contrib/libs | |
parent | cd5fb8e35c827536b60e13b88dc5dd471fb2d515 (diff) | |
download | ydb-8dfcb1a9f58b63dbc582bc728a5e979afc19d789.tar.gz |
Update contrib/libs/double-conversion to 3.3.0
Diffstat (limited to 'contrib/libs')
4 files changed, 43 insertions, 11 deletions
diff --git a/contrib/libs/double-conversion/double-conversion/bignum.cc b/contrib/libs/double-conversion/double-conversion/bignum.cc index d6745d755a..5c74d70d3d 100644 --- a/contrib/libs/double-conversion/double-conversion/bignum.cc +++ b/contrib/libs/double-conversion/double-conversion/bignum.cc @@ -147,7 +147,7 @@ void Bignum::AssignHexString(Vector<const char> value) { } if (tmp > 0) { DOUBLE_CONVERSION_ASSERT(tmp <= kBigitMask); - RawBigit(used_bigits_++) = (tmp & kBigitMask); + RawBigit(used_bigits_++) = static_cast<Bignum::Chunk>(tmp & kBigitMask); } Clamp(); } @@ -204,7 +204,7 @@ void Bignum::AddBignum(const Bignum& other) { carry = sum >> kBigitSize; ++bigit_pos; } - used_bigits_ = (std::max)(bigit_pos, static_cast<int>(used_bigits_)); + used_bigits_ = static_cast<int16_t>(std::max(bigit_pos, static_cast<int>(used_bigits_))); DOUBLE_CONVERSION_ASSERT(IsClamped()); } @@ -240,7 +240,7 @@ void Bignum::ShiftLeft(const int shift_amount) { if (used_bigits_ == 0) { return; } - exponent_ += (shift_amount / kBigitSize); + exponent_ += static_cast<int16_t>(shift_amount / kBigitSize); const int local_shift = shift_amount % kBigitSize; EnsureCapacity(used_bigits_ + 1); BigitsShiftLeft(local_shift); @@ -418,7 +418,7 @@ void Bignum::Square() { DOUBLE_CONVERSION_ASSERT(accumulator == 0); // Don't forget to update the used_digits and the exponent. - used_bigits_ = product_length; + used_bigits_ = static_cast<int16_t>(product_length); exponent_ *= 2; Clamp(); } @@ -739,8 +739,8 @@ void Bignum::Align(const Bignum& other) { for (int i = 0; i < zero_bigits; ++i) { RawBigit(i) = 0; } - used_bigits_ += zero_bigits; - exponent_ -= zero_bigits; + used_bigits_ += static_cast<int16_t>(zero_bigits); + exponent_ -= static_cast<int16_t>(zero_bigits); DOUBLE_CONVERSION_ASSERT(used_bigits_ >= 0); DOUBLE_CONVERSION_ASSERT(exponent_ >= 0); diff --git a/contrib/libs/double-conversion/double-conversion/double-to-string.cc b/contrib/libs/double-conversion/double-conversion/double-to-string.cc index bb369fe8e1..215eaa96d4 100644 --- a/contrib/libs/double-conversion/double-conversion/double-to-string.cc +++ b/contrib/libs/double-conversion/double-conversion/double-to-string.cc @@ -79,7 +79,14 @@ void DoubleToStringConverter::CreateExponentialRepresentation( StringBuilder* result_builder) const { DOUBLE_CONVERSION_ASSERT(length != 0); result_builder->AddCharacter(decimal_digits[0]); - if (length != 1) { + if (length == 1) { + if ((flags_ & EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL) != 0) { + result_builder->AddCharacter('.'); + if ((flags_ & EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL) != 0) { + result_builder->AddCharacter('0'); + } + } + } else { result_builder->AddCharacter('.'); result_builder->AddSubstring(&decimal_digits[1], length-1); } diff --git a/contrib/libs/double-conversion/double-conversion/double-to-string.h b/contrib/libs/double-conversion/double-conversion/double-to-string.h index 04a4ac3840..abe60e8810 100644 --- a/contrib/libs/double-conversion/double-conversion/double-to-string.h +++ b/contrib/libs/double-conversion/double-conversion/double-to-string.h @@ -78,7 +78,9 @@ class DoubleToStringConverter { EMIT_TRAILING_DECIMAL_POINT = 2, EMIT_TRAILING_ZERO_AFTER_POINT = 4, UNIQUE_ZERO = 8, - NO_TRAILING_ZERO = 16 + NO_TRAILING_ZERO = 16, + EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL = 32, + EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL = 64 }; // Flags should be a bit-or combination of the possible Flags-enum. @@ -97,6 +99,13 @@ class DoubleToStringConverter { // of the result in precision mode. Matches printf's %g. // When EMIT_TRAILING_ZERO_AFTER_POINT is also given, one trailing zero is // preserved. + // - EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL: when the input number has + // exactly one significant digit and is converted into exponent form then a + // trailing decimal point is appended to the significand in shortest mode + // or in precision mode with one requested digit. + // - EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL: in addition to a trailing + // decimal point emits a trailing '0'-character. This flag requires the + // EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL flag. // // Infinity symbol and nan_symbol provide the string representation for these // special values. If the string is NULL and the special value is encountered @@ -132,6 +141,22 @@ class DoubleToStringConverter { // ToPrecision(230.0, 2) -> "230." with EMIT_TRAILING_DECIMAL_POINT. // ToPrecision(230.0, 2) -> "2.3e2" with EMIT_TRAILING_ZERO_AFTER_POINT. // + // When converting numbers with exactly one significant digit to exponent + // form in shortest mode or in precision mode with one requested digit, the + // EMIT_TRAILING_DECIMAL_POINT and EMIT_TRAILING_ZERO_AFTER_POINT flags have + // no effect. Use the EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL flag to + // append a decimal point in this case and the + // EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL flag to also append a + // '0'-character in this case. + // Example with decimal_in_shortest_low = 0: + // ToShortest(0.0009) -> "9e-4" + // with EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL deactivated. + // ToShortest(0.0009) -> "9.e-4" + // with EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL activated. + // ToShortest(0.0009) -> "9.0e-4" + // with EMIT_TRAILING_DECIMAL_POINT_IN_EXPONENTIAL activated and + // EMIT_TRAILING_ZERO_AFTER_POINT_IN_EXPONENTIAL activated. + // // The min_exponent_width is used for exponential representations. // The converter adds leading '0's to the exponent until the exponent // is at least min_exponent_width digits long. diff --git a/contrib/libs/double-conversion/ya.make b/contrib/libs/double-conversion/ya.make index 848dabc59e..9ef47c4246 100644 --- a/contrib/libs/double-conversion/ya.make +++ b/contrib/libs/double-conversion/ya.make @@ -1,4 +1,4 @@ -# Generated by devtools/yamaker from nixpkgs 22.05. +# Generated by devtools/yamaker from nixpkgs 22.11. LIBRARY() @@ -6,9 +6,9 @@ LICENSE(BSD-3-Clause) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(3.2.1) +VERSION(3.3.0) -ORIGINAL_SOURCE(https://github.com/google/double-conversion/archive/v3.2.1.tar.gz) +ORIGINAL_SOURCE(https://github.com/google/double-conversion/archive/v3.3.0.tar.gz) ADDINCL( GLOBAL contrib/libs/double-conversion |