10#ifndef EIGEN_FIXEDSIZEVECTOR_H
11#define EIGEN_FIXEDSIZEVECTOR_H
32 static const size_t alignment = EIGEN_PLAIN_ENUM_MAX(EIGEN_ALIGNOF(T),
sizeof(
void*));
35 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
37 : reserve_(n), size_(0),
38 data_(
static_cast<T*
>(internal::handmade_aligned_malloc(n *
sizeof(T), alignment))) {
43 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
45 : reserve_(n), size_(n),
46 data_(
static_cast<T*
>(internal::handmade_aligned_malloc(n *
sizeof(T), alignment))) {
50 for(; i < size_; ++i) {
new (&data_[i]) T(init); }
55 for(; (i+1) > 0; --i) { data_[i-1].~T(); }
56 internal::handmade_aligned_free(data_);
61 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
63 for (
size_t i = size_; i > 0; --i) {
66 internal::handmade_aligned_free(data_);
69 void resize(
size_t n) {
70 eigen_assert(n <= reserve_);
71 for (; size_ < n; ++size_) {
72 new (&data_[size_]) T;
74 for (; size_ > n; --size_) {
77 eigen_assert(size_ == n);
81 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
82 void push_back(
const T& t) {
83 eigen_assert(size_ < reserve_);
84 new (&data_[size_++]) T(t);
89 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
90 void emplace_back(
const X& x) {
91 eigen_assert(size_ < reserve_);
92 new (&data_[size_++]) T(x);
96 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
97 const T& operator[] (
size_t i)
const {
98 eigen_assert(i < size_);
102 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
103 T& operator[] (
size_t i) {
104 eigen_assert(i < size_);
108 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
110 eigen_assert(size_ > 0);
111 return data_[size_ - 1];
114 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
115 const T& back()
const {
116 eigen_assert(size_ > 0);
117 return data_[size_ - 1];
120 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
122 eigen_assert(size_ > 0);
126 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
127 size_t size()
const {
return size_; }
129 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
130 bool empty()
const {
return size_ == 0; }
132 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
133 T* data() {
return data_; }
135 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
136 const T* data()
const {
return data_; }
138 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
139 T* begin() {
return data_; }
141 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
142 T* end() {
return data_ + size_; }
144 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
145 const T* begin()
const {
return data_; }
147 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
148 const T* end()
const {
return data_ + size_; }
The MaxSizeVector class.
Definition: MaxSizeVector.h:31
Namespace containing all symbols from the Eigen library.