Changes imported from Abseil "staging" branch:

- d1a8e5ddbf9f96a4ca020260b21e03820c5ff966 Remove references to the non-existing StringPrintf API to... by Abseil Team <absl-team@google.com>
  - 64a422bc1620b29247a81fab2b08a7f23dfc1461 Add a copy and move constructor to FixedArray.  This does... by Jon Cohen <cohenjon@google.com>

GitOrigin-RevId: d1a8e5ddbf9f96a4ca020260b21e03820c5ff966
Change-Id: I4388bdf1260702f2847307abbac4bf265e8cf90f
This commit is contained in:
Abseil Team 2018-01-02 08:53:02 -08:00 committed by Jon Cohen
parent eb5bbdda6c
commit 6365d1744b
5 changed files with 53 additions and 22 deletions

View file

@ -47,6 +47,7 @@
#include "absl/base/macros.h"
#include "absl/base/optimization.h"
#include "absl/base/port.h"
#include "absl/memory/memory.h"
namespace absl {
@ -107,6 +108,15 @@ class FixedArray {
? kInlineBytesDefault / sizeof(value_type)
: inlined;
FixedArray(const FixedArray& other) : rep_(other.begin(), other.end()) {}
FixedArray(FixedArray&& other) noexcept(
// clang-format off
absl::allocator_is_nothrow<std::allocator<value_type>>::value &&
// clang-format on
std::is_nothrow_move_constructible<value_type>::value)
: rep_(std::make_move_iterator(other.begin()),
std::make_move_iterator(other.end())) {}
// Creates an array object that can store `n` elements.
// Note that trivially constructible elements will be uninitialized.
explicit FixedArray(size_type n) : rep_(n) {}
@ -126,11 +136,9 @@ class FixedArray {
~FixedArray() {}
// Copy and move construction and assignment are deleted because (1) you can't
// copy or move an array, (2) assignment breaks the invariant that the size of
// a `FixedArray` never changes, and (3) there's no clear answer as to what
// should happen to a moved-from `FixedArray`.
FixedArray(const FixedArray&) = delete;
// Assignments are deleted because they break the invariant that the size of a
// `FixedArray` never changes.
void operator=(FixedArray&&) = delete;
void operator=(const FixedArray&) = delete;
// FixedArray::size()