48 ::new (
data() + i) T();
67 for (T
const& v : init)
69 ::new (
data() + i++) T(v);
87 ::new (
data() + i) T(std::move(o.data()[i]));
120 ::new (
data() + i) T(std::move(o.data()[i]));
135 for (T
const& v : init)
137 ::new (
data() + i++) T(v);
145 if (pos >= size_)
throw std::out_of_range(
"static_vector::at");
151 if (pos >= size_)
throw std::out_of_range(
"static_vector::at");
182 return data()[size_ - 1];
188 return data()[size_ - 1];
191 [[nodiscard]]
pointer data() noexcept {
return reinterpret_cast<T*
>(storage_.buf); }
192 [[nodiscard]]
const_pointer data() const noexcept {
return reinterpret_cast<T const*
>(storage_.buf); }
210 [[nodiscard]]
bool empty() const noexcept {
return size_ == 0; }
237 ::new (
data() + size_) T(std::move(
value));
245 ::new (
data() + size_) T(std::forward<Args>(args)...);
253 data()[--size_].~T();
262 for (
size_type i = count; i < size_; ++i)
269 for (
size_type i = size_; i < count; ++i)
271 ::new (
data() + i) T();
280 size_type m = size_ < other.size_ ? size_ : other.size_;
286 if (size_ < other.size_)
288 for (
size_type i = m; i < other.size_; ++i)
294 else if (size_ > other.size_)
298 other.emplace_back(std::move(
data()[i]));
307 alignas(T)
unsigned char buf[MaxSize *
sizeof(T)];
345 [[nodiscard]]
constexpr bool empty() const noexcept {
return true; }
353 void push_back(T
const&) {
PANIC(
"unexpected: push_back() on a static_vector of size 0"); }
354 void push_back(T&&) {
PANIC(
"unexpected: push_back() on a static_vector of size 0"); }
357 PANIC(
"unexpected: emplace_back() on a static_vector of size 0");
359 void pop_back() {
PANIC(
"unexpected: pop_back() on a static_vector of size 0"); }
370 PANIC(
"unexpected: front() on a static_vector of size 0");
376 PANIC(
"unexpected: back() on a static_vector of size 0");
381 PANIC(
"unexpected: back() on a static_vector of size 0");
std::reverse_iterator< iterator > reverse_iterator
Definition static_vector.hpp:327
const_reverse_iterator crbegin() const noexcept
Definition static_vector.hpp:398
static constexpr size_type max_size() noexcept
Definition static_vector.hpp:347
std::size_t size_type
Definition static_vector.hpp:319
iterator begin() noexcept
Definition static_vector.hpp:388
void push_back(T const &)
Definition static_vector.hpp:353
void resize(size_type count)
Definition static_vector.hpp:351
const_reference front() const
Definition static_vector.hpp:368
T & reference
Definition static_vector.hpp:321
const_reverse_iterator rend() const noexcept
Definition static_vector.hpp:401
constexpr bool empty() const noexcept
Definition static_vector.hpp:345
reference front()
Definition static_vector.hpp:367
const_iterator cbegin() const noexcept
Definition static_vector.hpp:390
constexpr size_type size() const noexcept
Definition static_vector.hpp:346
void pop_back()
Definition static_vector.hpp:359
iterator end() noexcept
Definition static_vector.hpp:392
const_reverse_iterator rbegin() const noexcept
Definition static_vector.hpp:397
T const * const_pointer
Definition static_vector.hpp:324
static_vector(size_type count, T const &)
Definition static_vector.hpp:332
reference operator[](size_type)
Definition static_vector.hpp:364
T const & const_reference
Definition static_vector.hpp:322
reference at(size_type)
Definition static_vector.hpp:361
void clear() noexcept
Definition static_vector.hpp:350
T value_type
Definition static_vector.hpp:318
void emplace_back(Args &&...)
Definition static_vector.hpp:355
const_reference operator[](size_type) const
Definition static_vector.hpp:365
const_reference at(size_type) const
Definition static_vector.hpp:362
static constexpr size_type capacity() noexcept
Definition static_vector.hpp:348
T * iterator
Definition static_vector.hpp:325
const_iterator cend() const noexcept
Definition static_vector.hpp:394
reference back()
Definition static_vector.hpp:374
void swap(static_vector &) noexcept
Definition static_vector.hpp:404
reverse_iterator rbegin() noexcept
Definition static_vector.hpp:396
const_iterator begin() const noexcept
Definition static_vector.hpp:389
static_vector(static_vector const &)=default
void push_back(T &&)
Definition static_vector.hpp:354
const_reverse_iterator crend() const noexcept
Definition static_vector.hpp:402
pointer data() noexcept
Definition static_vector.hpp:385
static_vector(std::initializer_list< T > init)
Definition static_vector.hpp:333
const_iterator end() const noexcept
Definition static_vector.hpp:393
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition static_vector.hpp:328
const_pointer data() const noexcept
Definition static_vector.hpp:386
static_vector() noexcept=default
T * pointer
Definition static_vector.hpp:323
T const * const_iterator
Definition static_vector.hpp:326
static_vector(static_vector &&) noexcept=default
const_reference back() const
Definition static_vector.hpp:379
reverse_iterator rend() noexcept
Definition static_vector.hpp:400
std::ptrdiff_t difference_type
Definition static_vector.hpp:320
A fixed-capacity vector with stack storage and std::vector-like API.
Definition static_vector.hpp:24
static constexpr size_type max_size() noexcept
Definition static_vector.hpp:212
const_reverse_iterator rend() const noexcept
Definition static_vector.hpp:207
T * pointer
Definition static_vector.hpp:31
static_vector & operator=(static_vector const &o)
Copy assignment.
Definition static_vector.hpp:97
static_vector & operator=(std::initializer_list< T > init)
Assign from an initializer list.
Definition static_vector.hpp:129
reverse_iterator rbegin() noexcept
Definition static_vector.hpp:202
size_type size() const noexcept
Definition static_vector.hpp:211
void pop_back()
Remove the last element.
Definition static_vector.hpp:250
const_reverse_iterator crbegin() const noexcept
Definition static_vector.hpp:204
void clear() noexcept
Destroy all elements and reset size to zero.
Definition static_vector.hpp:216
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition static_vector.hpp:36
iterator end() noexcept
Definition static_vector.hpp:198
const_reference at(size_type pos) const
Definition static_vector.hpp:149
const_iterator cbegin() const noexcept
Definition static_vector.hpp:196
const_reference back() const
Definition static_vector.hpp:185
void resize(size_type count)
Resize the vector to count elements.
Definition static_vector.hpp:257
T value_type
Definition static_vector.hpp:26
const_iterator begin() const noexcept
Definition static_vector.hpp:195
reference back()
Definition static_vector.hpp:179
static constexpr size_type capacity() noexcept
Definition static_vector.hpp:213
std::reverse_iterator< iterator > reverse_iterator
Definition static_vector.hpp:35
static_vector(std::initializer_list< T > init)
Construct from an initializer list.
Definition static_vector.hpp:63
reference at(size_type pos)
Bounds-checked element access.
Definition static_vector.hpp:143
pointer data() noexcept
Definition static_vector.hpp:191
bool empty() const noexcept
Definition static_vector.hpp:210
T & reference
Definition static_vector.hpp:29
static_vector(static_vector const &o)
Copy constructor.
Definition static_vector.hpp:74
static_vector & operator=(static_vector &&o) noexcept(std::is_nothrow_move_assignable< T >::value)
Move assignment.
Definition static_vector.hpp:112
reference front()
Definition static_vector.hpp:167
T const * const_pointer
Definition static_vector.hpp:32
std::ptrdiff_t difference_type
Definition static_vector.hpp:28
static_vector(static_vector &&o) noexcept(std::is_nothrow_move_constructible< T >::value)
Move constructor.
Definition static_vector.hpp:83
const_iterator end() const noexcept
Definition static_vector.hpp:199
void emplace_back(Args &&... args)
Construct a new element in-place at the end.
Definition static_vector.hpp:242
const_iterator cend() const noexcept
Definition static_vector.hpp:200
iterator begin() noexcept
Definition static_vector.hpp:194
const_reference operator[](size_type pos) const
Definition static_vector.hpp:161
void push_back(T &&value)
Append a new moved value to the end.
Definition static_vector.hpp:234
const_reverse_iterator rbegin() const noexcept
Definition static_vector.hpp:203
static_vector() noexcept
Default-construct an empty static_vector.
Definition static_vector.hpp:39
~static_vector()
Destructor. Destroys all elements in-place.
Definition static_vector.hpp:94
const_reference front() const
Definition static_vector.hpp:173
T const & const_reference
Definition static_vector.hpp:30
std::size_t size_type
Definition static_vector.hpp:27
T * iterator
Definition static_vector.hpp:33
void swap(static_vector &other) noexcept(std::is_nothrow_swappable< T >::value)
Swap contents with another static_vector.
Definition static_vector.hpp:278
const_pointer data() const noexcept
Definition static_vector.hpp:192
static_vector(size_type count, T const &value)
Construct with count copies of value.
Definition static_vector.hpp:53
reference operator[](size_type pos)
Definition static_vector.hpp:155
T const * const_iterator
Definition static_vector.hpp:34
reverse_iterator rend() noexcept
Definition static_vector.hpp:206
static_vector(size_type count)
Construct with count default-initialized elements.
Definition static_vector.hpp:43
const_reverse_iterator crend() const noexcept
Definition static_vector.hpp:208
void push_back(T const &value)
Append a new copy of value to the end.
Definition static_vector.hpp:226
locale_t value
Definition data_table.cpp:49
#define DEBUG_PRECONDITION(cond,...)
Definition trace.hpp:648
#define PANIC(...)
Definition trace.hpp:382
#define DEBUG_CHECK_EQUAL(a, b,...)
Definition trace.hpp:618