diff options
author | Abseil Team <absl-team@google.com> | 2019-12-06T13·36-0800 |
---|---|---|
committer | Mark Barolak <mbar@google.com> | 2019-12-06T15·28-0500 |
commit | 77f87009a34c745255bd84d8f2647040d831a2b3 (patch) | |
tree | c3ad7ba85325074fa1ae50590c90e6b4b331fa4f | |
parent | d659fe54b35ab9b8e35c72e50a4b8814167d5a84 (diff) |
Export of internal Abseil changes
-- d8ddeda8e52132b908fae89b25f117a055d78c04 by Abseil Team <absl-team@google.com>: Improve performance of ByteStringFromAscii by changing kHexValue to have -1 in invalid value slots. This way a single load can do both the validation and conversion. PiperOrigin-RevId: 284167344 -- 5037e97e2eaaac8ced9a5290949deda4b43b9ceb by Mark Barolak <mbar@google.com>: Change the underlying symbol name of Cord to absl::Cord. PiperOrigin-RevId: 284005429 -- 4ef66c72aedf135f2b4fd0ba7a73de6642decfff by Abseil Team <absl-team@google.com>: Eliminate an unnecessary load when futex is contended in Waiter::Wait() The first argument to compare_exchange_weak() is a reference and will be updated upon failure. There is no need to do an additional load on the same variable. PiperOrigin-RevId: 284002752 GitOrigin-RevId: d8ddeda8e52132b908fae89b25f117a055d78c04 Change-Id: Idac68a1901eb8c30050adc3860765b1a6fa085c7
-rw-r--r-- | absl/strings/escaping.cc | 9 | ||||
-rw-r--r-- | absl/strings/internal/str_format/arg.h | 4 | ||||
-rw-r--r-- | absl/strings/internal/str_format/extension.h | 4 | ||||
-rw-r--r-- | absl/strings/internal/str_format/output.h | 5 | ||||
-rw-r--r-- | absl/synchronization/internal/waiter.cc | 4 |
5 files changed, 14 insertions, 12 deletions
diff --git a/absl/strings/escaping.cc b/absl/strings/escaping.cc index 88390fbfa82f..18b746e37d2a 100644 --- a/absl/strings/escaping.cc +++ b/absl/strings/escaping.cc @@ -961,7 +961,7 @@ bool Base64UnescapeInternal(const char* src, size_t slen, String* dest, } /* clang-format off */ -constexpr char kHexValue[256] = { +constexpr char kHexValueLenient[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -977,8 +977,9 @@ constexpr char kHexValue[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; + /* clang-format on */ // This is a templated function so that T can be either a char* @@ -987,8 +988,8 @@ constexpr char kHexValue[256] = { template <typename T> void HexStringToBytesInternal(const char* from, T to, ptrdiff_t num) { for (int i = 0; i < num; i++) { - to[i] = (kHexValue[from[i * 2] & 0xFF] << 4) + - (kHexValue[from[i * 2 + 1] & 0xFF]); + to[i] = (kHexValueLenient[from[i * 2] & 0xFF] << 4) + + (kHexValueLenient[from[i * 2 + 1] & 0xFF]); } } diff --git a/absl/strings/internal/str_format/arg.h b/absl/strings/internal/str_format/arg.h index 2119ca0036e5..79416cc8bc62 100644 --- a/absl/strings/internal/str_format/arg.h +++ b/absl/strings/internal/str_format/arg.h @@ -18,11 +18,11 @@ #include "absl/strings/internal/str_format/extension.h" #include "absl/strings/string_view.h" -class Cord; class CordReader; namespace absl { +class Cord; class FormatCountCapture; class FormatSink; @@ -67,7 +67,7 @@ ConvertResult<Conv::s | Conv::p> FormatConvertImpl(const char* v, FormatSinkImpl* sink); template <class AbslCord, typename std::enable_if< - std::is_same<AbslCord, ::Cord>::value>::type* = nullptr, + std::is_same<AbslCord, absl::Cord>::value>::type* = nullptr, class AbslCordReader = ::CordReader> ConvertResult<Conv::s> FormatConvertImpl(const AbslCord& value, ConversionSpec conv, diff --git a/absl/strings/internal/str_format/extension.h b/absl/strings/internal/str_format/extension.h index eb81f8a17ca4..3f4788c9f502 100644 --- a/absl/strings/internal/str_format/extension.h +++ b/absl/strings/internal/str_format/extension.h @@ -25,10 +25,10 @@ #include "absl/strings/internal/str_format/output.h" #include "absl/strings/string_view.h" -class Cord; - namespace absl { +class Cord; + namespace str_format_internal { class FormatRawSinkImpl { diff --git a/absl/strings/internal/str_format/output.h b/absl/strings/internal/str_format/output.h index 42da6417be07..6dc2f3f721f6 100644 --- a/absl/strings/internal/str_format/output.h +++ b/absl/strings/internal/str_format/output.h @@ -28,9 +28,10 @@ #include "absl/base/port.h" #include "absl/strings/string_view.h" +namespace absl { + class Cord; -namespace absl { namespace str_format_internal { // RawSink implementation that writes into a char* buffer. @@ -76,7 +77,7 @@ inline void AbslFormatFlush(std::ostream* out, string_view s) { } template <class AbslCord, typename = typename std::enable_if< - std::is_same<AbslCord, ::Cord>::value>::type> + std::is_same<AbslCord, absl::Cord>::value>::type> inline void AbslFormatFlush(AbslCord* out, string_view s) { out->Append(s); } diff --git a/absl/synchronization/internal/waiter.cc b/absl/synchronization/internal/waiter.cc index f1425872e5b6..e7000d3a56e1 100644 --- a/absl/synchronization/internal/waiter.cc +++ b/absl/synchronization/internal/waiter.cc @@ -136,7 +136,7 @@ bool Waiter::Wait(KernelTimeout t) { bool first_pass = true; while (true) { int32_t x = futex_.load(std::memory_order_relaxed); - if (x != 0) { + while (x != 0) { if (!futex_.compare_exchange_weak(x, x - 1, std::memory_order_acquire, std::memory_order_relaxed)) { @@ -313,7 +313,7 @@ bool Waiter::Wait(KernelTimeout t) { bool first_pass = true; while (true) { int x = wakeups_.load(std::memory_order_relaxed); - if (x != 0) { + while (x != 0) { if (!wakeups_.compare_exchange_weak(x, x - 1, std::memory_order_acquire, std::memory_order_relaxed)) { |