Merge #14266: refactor: Lift prevector default vals to the member declaration

d2eee87928 Lift prevector default vals to the member declaration (Ben Woosley)

Pull request description:

  I overlooked this possibility in #14028

ACKs for commit d2eee8:
  promag:
    utACK d2eee87, change looks good because members are always initialized.
  251Labs:
    utACK d2eee87 nice one.
  ken2812221:
    utACK d2eee87928
  practicalswift:
    utACK d2eee87928
  scravy:
    utACK d2eee87928

Tree-SHA512: f2726bae1cf892fd680cf8571027bcdc2e42ba567eaa901fb5fb5423b4d11b29e745e0163d82cb513d8c81399cc85933a16ed66d4a30829382d4721ffc41dc97
This commit is contained in:
MarcoFalke 2019-05-06 15:32:01 -04:00
commit 3632143ebb
No known key found for this signature in database
GPG key ID: D2EA4850E7528B25

View file

@ -147,14 +147,14 @@ public:
}; };
private: private:
size_type _size; size_type _size = 0;
union direct_or_indirect { union direct_or_indirect {
char direct[sizeof(T) * N]; char direct[sizeof(T) * N];
struct { struct {
size_type capacity; size_type capacity;
char* indirect; char* indirect;
}; };
} _union; } _union = {};
T* direct_ptr(difference_type pos) { return reinterpret_cast<T*>(_union.direct) + pos; } T* direct_ptr(difference_type pos) { return reinterpret_cast<T*>(_union.direct) + pos; }
const T* direct_ptr(difference_type pos) const { return reinterpret_cast<const T*>(_union.direct) + pos; } const T* direct_ptr(difference_type pos) const { return reinterpret_cast<const T*>(_union.direct) + pos; }
@ -230,34 +230,34 @@ public:
fill(item_ptr(0), first, last); fill(item_ptr(0), first, last);
} }
prevector() : _size(0), _union{{}} {} prevector() {}
explicit prevector(size_type n) : prevector() { explicit prevector(size_type n) {
resize(n); resize(n);
} }
explicit prevector(size_type n, const T& val) : prevector() { explicit prevector(size_type n, const T& val) {
change_capacity(n); change_capacity(n);
_size += n; _size += n;
fill(item_ptr(0), n, val); fill(item_ptr(0), n, val);
} }
template<typename InputIterator> template<typename InputIterator>
prevector(InputIterator first, InputIterator last) : prevector() { prevector(InputIterator first, InputIterator last) {
size_type n = last - first; size_type n = last - first;
change_capacity(n); change_capacity(n);
_size += n; _size += n;
fill(item_ptr(0), first, last); fill(item_ptr(0), first, last);
} }
prevector(const prevector<N, T, Size, Diff>& other) : prevector() { prevector(const prevector<N, T, Size, Diff>& other) {
size_type n = other.size(); size_type n = other.size();
change_capacity(n); change_capacity(n);
_size += n; _size += n;
fill(item_ptr(0), other.begin(), other.end()); fill(item_ptr(0), other.begin(), other.end());
} }
prevector(prevector<N, T, Size, Diff>&& other) : prevector() { prevector(prevector<N, T, Size, Diff>&& other) {
swap(other); swap(other);
} }