Eigen::MaxSizeVector< T > Class Template Reference

The MaxSizeVector class. More...

#include <MaxSizeVector.h>

Public Member Functions

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE MaxSizeVector (size_t n)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE MaxSizeVector (size_t n, const T &init)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ~MaxSizeVector ()
 
void resize (size_t n)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void push_back (const T &t)
 
template<class X >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void emplace_back (const X &x)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Toperator[] (size_t i) const
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Toperator[] (size_t i)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tback ()
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Tback () const
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pop_back ()
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t size () const
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool empty () const
 
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE Tdata ()
 
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE const Tdata () const
 
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE Tbegin ()
 
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE Tend ()
 
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE const Tbegin () const
 
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE const Tend () const
 

Private Attributes

size_t reserve_
 
size_t size_
 
Tdata_
 

Static Private Attributes

static const size_t alignment = internal::plain_enum_max(EIGEN_ALIGNOF(T), sizeof(void*))
 

Detailed Description

template<typename T>
class Eigen::MaxSizeVector< T >

The MaxSizeVector class.

The MaxSizeVector provides a subset of std::vector functionality.

The goal is to provide basic std::vector operations when using std::vector is not an option (e.g. on GPU or when compiling using FMA/AVX, as this can cause either compilation failures or illegal instruction failures).

Beware: The constructors are not API compatible with these of std::vector.

Constructor & Destructor Documentation

◆ MaxSizeVector() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Eigen::MaxSizeVector< T >::MaxSizeVector ( size_t  n)
inlineexplicit
37  : reserve_(n), size_(0), data_(static_cast<T*>(internal::handmade_aligned_malloc(n * sizeof(T), alignment))) {}
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
static const size_t alignment
Definition: MaxSizeVector.h:32
size_t size_
Definition: MaxSizeVector.h:133
size_t reserve_
Definition: MaxSizeVector.h:132
T * data_
Definition: MaxSizeVector.h:134
EIGEN_DEVICE_FUNC void * handmade_aligned_malloc(std::size_t size, std::size_t alignment=EIGEN_DEFAULT_ALIGN_BYTES)
Definition: Memory.h:142

◆ MaxSizeVector() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Eigen::MaxSizeVector< T >::MaxSizeVector ( size_t  n,
const T init 
)
inline
42  : reserve_(n), size_(n), data_(static_cast<T*>(internal::handmade_aligned_malloc(n * sizeof(T), alignment))) {
43  size_t i = 0;
44  EIGEN_TRY {
45  for (; i < size_; ++i) {
46  new (&data_[i]) T(init);
47  }
48  }
49  EIGEN_CATCH(...) {
50  // Construction failed, destruct in reverse order:
51  for (; (i + 1) > 0; --i) {
52  data_[i - 1].~T();
53  }
56  }
57  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
#define EIGEN_CATCH(X)
Definition: Macros.h:1264
#define EIGEN_THROW
Definition: Macros.h:1261
#define EIGEN_TRY
Definition: Macros.h:1263
EIGEN_DEVICE_FUNC void handmade_aligned_free(void *ptr)
Definition: Memory.h:158
Definition: TutorialInplaceLU.cpp:2

References Eigen::MaxSizeVector< T >::data_, EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, Eigen::internal::handmade_aligned_free(), i, and Eigen::MaxSizeVector< T >::size_.

◆ ~MaxSizeVector()

Member Function Documentation

◆ back() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T& Eigen::MaxSizeVector< T >::back ( )
inline
100  {
101  eigen_assert(size_ > 0);
102  return data_[size_ - 1];
103  }
#define eigen_assert(x)
Definition: Macros.h:910

References Eigen::MaxSizeVector< T >::data_, eigen_assert, and Eigen::MaxSizeVector< T >::size_.

◆ back() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T& Eigen::MaxSizeVector< T >::back ( ) const
inline
105  {
106  eigen_assert(size_ > 0);
107  return data_[size_ - 1];
108  }

References Eigen::MaxSizeVector< T >::data_, eigen_assert, and Eigen::MaxSizeVector< T >::size_.

◆ begin() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE T* Eigen::MaxSizeVector< T >::begin ( )
inlineconstexpr
123 { return data_; }

References Eigen::MaxSizeVector< T >::data_.

◆ begin() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE const T* Eigen::MaxSizeVector< T >::begin ( ) const
inlineconstexpr
127 { return data_; }

References Eigen::MaxSizeVector< T >::data_.

◆ data() [1/2]

◆ data() [2/2]

◆ emplace_back()

template<typename T >
template<class X >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::MaxSizeVector< T >::emplace_back ( const X x)
inline

◆ empty()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool Eigen::MaxSizeVector< T >::empty ( ) const
inline
117 { return size_ == 0; }

References Eigen::MaxSizeVector< T >::size_.

◆ end() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE T* Eigen::MaxSizeVector< T >::end ( )
inlineconstexpr

◆ end() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE const T* Eigen::MaxSizeVector< T >::end ( ) const
inlineconstexpr

◆ operator[]() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T& Eigen::MaxSizeVector< T >::operator[] ( size_t  i)
inline

◆ operator[]() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T& Eigen::MaxSizeVector< T >::operator[] ( size_t  i) const
inline

◆ pop_back()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::MaxSizeVector< T >::pop_back ( )
inline
110  {
111  eigen_assert(size_ > 0);
112  data_[--size_].~T();
113  }

References Eigen::MaxSizeVector< T >::data_, eigen_assert, and Eigen::MaxSizeVector< T >::size_.

◆ push_back()

◆ resize()

template<typename T >
void Eigen::MaxSizeVector< T >::resize ( size_t  n)
inline
66  {
68  for (; size_ < n; ++size_) {
69  new (&data_[size_]) T;
70  }
71  for (; size_ > n; --size_) {
72  data_[size_ - 1].~T();
73  }
74  eigen_assert(size_ == n);
75  }

References Eigen::MaxSizeVector< T >::data_, eigen_assert, n, Eigen::MaxSizeVector< T >::reserve_, and Eigen::MaxSizeVector< T >::size_.

Referenced by test_basic_eventcount(), and test_stress_eventcount().

◆ size()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t Eigen::MaxSizeVector< T >::size ( ) const
inline
115 { return size_; }

References Eigen::MaxSizeVector< T >::size_.

Referenced by Eigen::EventCount::EventCount().

Member Data Documentation

◆ alignment

template<typename T >
const size_t Eigen::MaxSizeVector< T >::alignment = internal::plain_enum_max(EIGEN_ALIGNOF(T), sizeof(void*))
staticprivate

◆ data_

◆ reserve_

◆ size_


The documentation for this class was generated from the following file: