From fbdff6f3ae0ba977a69f172e85ecaede535e70f6 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 7 Dec 2020 09:56:14 -0800 Subject: Export of internal Abseil changes -- ff793052bd01e1e4fcf639f94d7c30c4855a9372 by Evan Brown : Roll forward of btree_iterator refactoring. PiperOrigin-RevId: 346116047 -- 17984679f16e3e2139b0f14fa76f4a6ca16a3ef9 by Chris Kennelly : Extend absl::StrContains to accept single character needles. Single characters are more efficient to search for. Extending this API allows the abseil-string-find-str-contains Clang Tidy to include this pattern. The C++ committee has adopted http://wg21.link/P1679 for inclusion in C++23. PiperOrigin-RevId: 346095060 -- ef20b31c501b1dcaa25e244fd8f8aa43dec09bd6 by Jorg Brown : Internal change for cord ring PiperOrigin-RevId: 346087545 -- b70f2c1cb77fc9e733a126e790967d45c5fd1dc7 by Derek Mauro : Release layout_benchmark PiperOrigin-RevId: 345968909 -- 3a0eda337ee43622f92cfe14c2aa06f72dc71ee5 by Derek Mauro : Release raw_hash_set_probe_benchmark PiperOrigin-RevId: 345965969 -- abffdb4bb241a2264cb4e73a6262b660bb10447d by Derek Mauro : Internal change PiperOrigin-RevId: 345733599 -- 7c9e24a71188df945be17fe98f700bdb51f81b16 by Derek Mauro : Release hash_benchmark PiperOrigin-RevId: 345721635 -- d68f33f17f9a8cd3f6da8eee3870bdb46402cdc8 by Derek Mauro : Release raw_hash_set_benchmark PiperOrigin-RevId: 345708384 -- 6e6c547d4d1327b226c0ffe8ff34d0aa103ce24b by Abseil Team : Updates the implementation of InlinedVector to accurately express the value-initialization semantics of the default constructor PiperOrigin-RevId: 345548260 -- 1532424deda97d468444c217cc0fa4614099c7c1 by Evan Brown : Rollback btree_iterator refactoring. PiperOrigin-RevId: 345543900 GitOrigin-RevId: ff793052bd01e1e4fcf639f94d7c30c4855a9372 Change-Id: I719831981fd056de41939f9addfee3d85e3b49b2 --- absl/strings/internal/cord_internal.h | 2 ++ absl/strings/internal/cord_rep_flat.h | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'absl/strings/internal') diff --git a/absl/strings/internal/cord_internal.h b/absl/strings/internal/cord_internal.h index ec2c767b..6fb75c4f 100644 --- a/absl/strings/internal/cord_internal.h +++ b/absl/strings/internal/cord_internal.h @@ -149,6 +149,8 @@ struct CordRep { inline const CordRepSubstring* substring() const; inline CordRepExternal* external(); inline const CordRepExternal* external() const; + inline CordRepFlat* flat(); + inline const CordRepFlat* flat() const; }; struct CordRepConcat : public CordRep { diff --git a/absl/strings/internal/cord_rep_flat.h b/absl/strings/internal/cord_rep_flat.h index 3e2cd33c..80391a5e 100644 --- a/absl/strings/internal/cord_rep_flat.h +++ b/absl/strings/internal/cord_rep_flat.h @@ -43,7 +43,7 @@ static constexpr size_t kMaxFlatSize = 4096; static constexpr size_t kMaxFlatLength = kMaxFlatSize - kFlatOverhead; static constexpr size_t kMinFlatLength = kMinFlatSize - kFlatOverhead; -static constexpr size_t AllocatedSizeToTagUnchecked(size_t size) { +constexpr size_t AllocatedSizeToTagUnchecked(size_t size) { return (size <= 1024) ? size / 8 : 128 + size / 32 - 1024 / 32; } @@ -51,12 +51,12 @@ static_assert(kMinFlatSize / 8 >= FLAT, ""); static_assert(AllocatedSizeToTagUnchecked(kMaxFlatSize) <= MAX_FLAT_TAG, ""); // Helper functions for rounded div, and rounding to exact sizes. -static size_t DivUp(size_t n, size_t m) { return (n + m - 1) / m; } -static size_t RoundUp(size_t n, size_t m) { return DivUp(n, m) * m; } +constexpr size_t DivUp(size_t n, size_t m) { return (n + m - 1) / m; } +constexpr size_t RoundUp(size_t n, size_t m) { return DivUp(n, m) * m; } // Returns the size to the nearest equal or larger value that can be // expressed exactly as a tag value. -static size_t RoundUpForTag(size_t size) { +inline size_t RoundUpForTag(size_t size) { return RoundUp(size, (size <= 1024) ? 8 : 32); } @@ -64,19 +64,19 @@ static size_t RoundUpForTag(size_t size) { // does not exactly match a 'tag expressible' size value. The result is // undefined if the size exceeds the maximum size that can be encoded in // a tag, i.e., if size is larger than TagToAllocatedSize(). -static uint8_t AllocatedSizeToTag(size_t size) { +inline uint8_t AllocatedSizeToTag(size_t size) { const size_t tag = AllocatedSizeToTagUnchecked(size); assert(tag <= MAX_FLAT_TAG); return tag; } // Converts the provided tag to the corresponding allocated size -static constexpr size_t TagToAllocatedSize(uint8_t tag) { +constexpr size_t TagToAllocatedSize(uint8_t tag) { return (tag <= 128) ? (tag * 8) : (1024 + (tag - 128) * 32); } // Converts the provided tag to the corresponding available data length -static constexpr size_t TagToLength(uint8_t tag) { +constexpr size_t TagToLength(uint8_t tag) { return TagToAllocatedSize(tag) - kFlatOverhead; } -- cgit v1.2.3