about summary refs log tree commit diff
path: root/absl/types
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2018-09-11T18·22-0700
committerGennadiy Civil <misterg@google.com>2018-09-11T18·28-0400
commit02451914b9ad5320f81f56a89f3eef1f8683227c (patch)
tree99b17555d1d04114190048a9fca05841ac39287e /absl/types
parent921fd5cf02ec0d665439a790148d59faa7d4a72c (diff)
Export of internal Abseil changes.
--
74c1330e29f1501f2738258faf9ec4564395c90a by Gennadiy Civil <misterg@google.com>:

Merging https://github.com/abseil/abseil-cpp/pull/166

PiperOrigin-RevId: 212487256

--
4ac236574ff8fb3cc1125505292b0bd8c8192da9 by Abseil Team <absl-team@google.com>:

Allow c_move to take rvalue containers.

PiperOrigin-RevId: 212458618

--
ce94e23984870db666d4c91623ae45b3c60b5b61 by Matt Armstrong <marmstrong@google.com>:

Internal change.

PiperOrigin-RevId: 212153041

--
7d88d286821c5839934756dd63a704ed162c49cb by Chris Kennelly <ckennelly@google.com>:

Internal change

PiperOrigin-RevId: 211982309

--
ddae814b3f609948c20551ea3d80bf51b973f480 by Abseil Team <absl-team@google.com>:

Remove unused argument from InlinedVector's AllocatorAndTag

This is not part of InlinedVector's public interface.

PiperOrigin-RevId: 211973017

--
051fbfd81648a8da66c62c6603af63038d709c15 by Abseil Team <absl-team@google.com>:

Minor performance fix

PiperOrigin-RevId: 211820453

--
c205cb2add7400bc8caf2131cb700eea560b7dbf by Laramie Leavitt <lar@google.com>:

Make absl::Span a tiny bit more consistent.

Add constexper to equivalent absl::Span members as described by
http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0122r7.pdf

* Span constructor use consistently delegate to Span(ptr, length)
* Mark more member methods as constexpr.
* Use data() and size() consistently in member methods.

PiperOrigin-RevId: 211707244

--
55500c9e941f2f58f4a95c121f32772408866eee by Derek Mauro <dmauro@google.com>:

Stop catching polymorphic exception types by value.
GCC 8 emits a warning for this.

PiperOrigin-RevId: 211684466
GitOrigin-RevId: 74c1330e29f1501f2738258faf9ec4564395c90a
Change-Id: Iceab4a5b30ee35d82ef494830262ad29c028cb0a
Diffstat (limited to 'absl/types')
-rw-r--r--absl/types/any_exception_safety_test.cc2
-rw-r--r--absl/types/optional_exception_safety_test.cc2
-rw-r--r--absl/types/span.h42
-rw-r--r--absl/types/variant_exception_safety_test.cc4
4 files changed, 28 insertions, 22 deletions
diff --git a/absl/types/any_exception_safety_test.cc b/absl/types/any_exception_safety_test.cc
index 36955f6c5c37..cfb82d80445c 100644
--- a/absl/types/any_exception_safety_test.cc
+++ b/absl/types/any_exception_safety_test.cc
@@ -62,7 +62,7 @@ testing::AssertionResult AnyInvariants(absl::any* a) {
     static_cast<void>(unused);
     return AssertionFailure()
            << "A reset `any` should not be able to be any_cast";
-  } catch (absl::bad_any_cast) {
+  } catch (const absl::bad_any_cast&) {
   } catch (...) {
     return AssertionFailure()
            << "Unexpected exception thrown from absl::any_cast";
diff --git a/absl/types/optional_exception_safety_test.cc b/absl/types/optional_exception_safety_test.cc
index d2ef04b8d1b0..31eb66df5445 100644
--- a/absl/types/optional_exception_safety_test.cc
+++ b/absl/types/optional_exception_safety_test.cc
@@ -38,7 +38,7 @@ constexpr int kUpdatedInteger = 10;
 template <typename OptionalT>
 bool ValueThrowsBadOptionalAccess(const OptionalT& optional) try {
   return (static_cast<void>(optional.value()), false);
-} catch (absl::bad_optional_access) {
+} catch (const absl::bad_optional_access&) {
   return true;
 }
 
diff --git a/absl/types/span.h b/absl/types/span.h
index 5387e8e027df..3359ce5093c5 100644
--- a/absl/types/span.h
+++ b/absl/types/span.h
@@ -379,64 +379,70 @@ class Span {
   //
   // Returns a reference to the i'th element of this span.
   constexpr reference at(size_type i) const {
-    return ABSL_PREDICT_TRUE(i < size())
-               ? ptr_[i]
+    return ABSL_PREDICT_TRUE(i < size())  //
+               ? *(data() + i)
                : (base_internal::ThrowStdOutOfRange(
                       "Span::at failed bounds check"),
-                  ptr_[i]);
+                  *(data() + i));
   }
 
   // Span::front()
   //
   // Returns a reference to the first element of this span.
-  reference front() const noexcept { return ABSL_ASSERT(size() > 0), ptr_[0]; }
+  constexpr reference front() const noexcept {
+    return ABSL_ASSERT(size() > 0), *data();
+  }
 
   // Span::back()
   //
   // Returns a reference to the last element of this span.
-  reference back() const noexcept {
-    return ABSL_ASSERT(size() > 0), ptr_[size() - 1];
+  constexpr reference back() const noexcept {
+    return ABSL_ASSERT(size() > 0), *(data() + size() - 1);
   }
 
   // Span::begin()
   //
   // Returns an iterator to the first element of this span.
-  constexpr iterator begin() const noexcept { return ptr_; }
+  constexpr iterator begin() const noexcept { return data(); }
 
   // Span::cbegin()
   //
   // Returns a const iterator to the first element of this span.
-  constexpr const_iterator cbegin() const noexcept { return ptr_; }
+  constexpr const_iterator cbegin() const noexcept { return begin(); }
 
   // Span::end()
   //
   // Returns an iterator to the last element of this span.
-  iterator end() const noexcept { return ptr_ + len_; }
+  constexpr iterator end() const noexcept { return data() + size(); }
 
   // Span::cend()
   //
   // Returns a const iterator to the last element of this span.
-  const_iterator cend() const noexcept { return end(); }
+  constexpr const_iterator cend() const noexcept { return end(); }
 
   // Span::rbegin()
   //
   // Returns a reverse iterator starting at the last element of this span.
-  reverse_iterator rbegin() const noexcept { return reverse_iterator(end()); }
+  constexpr reverse_iterator rbegin() const noexcept {
+    return reverse_iterator(end());
+  }
 
   // Span::crbegin()
   //
   // Returns a reverse const iterator starting at the last element of this span.
-  const_reverse_iterator crbegin() const noexcept { return rbegin(); }
+  constexpr const_reverse_iterator crbegin() const noexcept { return rbegin(); }
 
   // Span::rend()
   //
   // Returns a reverse iterator starting at the first element of this span.
-  reverse_iterator rend() const noexcept { return reverse_iterator(begin()); }
+  constexpr reverse_iterator rend() const noexcept {
+    return reverse_iterator(begin());
+  }
 
   // Span::crend()
   //
   // Returns a reverse iterator starting at the first element of this span.
-  const_reverse_iterator crend() const noexcept { return rend(); }
+  constexpr const_reverse_iterator crend() const noexcept { return rend(); }
 
   // Span mutations
 
@@ -444,7 +450,7 @@ class Span {
   //
   // Removes the first `n` elements from the span.
   void remove_prefix(size_type n) noexcept {
-    assert(len_ >= n);
+    assert(size() >= n);
     ptr_ += n;
     len_ -= n;
   }
@@ -453,7 +459,7 @@ class Span {
   //
   // Removes the last `n` elements from the span.
   void remove_suffix(size_type n) noexcept {
-    assert(len_ >= n);
+    assert(size() >= n);
     len_ -= n;
   }
 
@@ -474,8 +480,8 @@ class Span {
   //   absl::MakeSpan(vec).subspan(4);     // {}
   //   absl::MakeSpan(vec).subspan(5);     // throws std::out_of_range
   constexpr Span subspan(size_type pos = 0, size_type len = npos) const {
-    return (pos <= len_)
-               ? Span(ptr_ + pos, span_internal::Min(len_ - pos, len))
+    return (pos <= size())
+               ? Span(data() + pos, span_internal::Min(size() - pos, len))
                : (base_internal::ThrowStdOutOfRange("pos > size()"), Span());
   }
 
diff --git a/absl/types/variant_exception_safety_test.cc b/absl/types/variant_exception_safety_test.cc
index 27c0b96ca6f3..a3c9eac33a75 100644
--- a/absl/types/variant_exception_safety_test.cc
+++ b/absl/types/variant_exception_safety_test.cc
@@ -53,7 +53,7 @@ void ToValuelessByException(ThrowingVariant& v) {  // NOLINT
   try {
     v.emplace<Thrower>();
     v.emplace<Thrower>(ExceptionOnConversion<Thrower>());
-  } catch (ConversionException& /*e*/) {
+  } catch (const ConversionException&) {
     // This space intentionally left blank.
   }
 }
@@ -100,7 +100,7 @@ testing::AssertionResult CheckInvariants(ThrowingVariant* v) {
     auto unused = absl::get<Thrower>(*v);
     static_cast<void>(unused);
     return AssertionFailure() << "Variant should not contain Thrower";
-  } catch (absl::bad_variant_access) {
+  } catch (const absl::bad_variant_access&) {
   } catch (...) {
     return AssertionFailure() << "Unexpected exception throw from absl::get";
   }