3 #ifndef VISR_EFL_BASIC_VECTOR_HPP_INCLUDED 4 #define VISR_EFL_BASIC_VECTOR_HPP_INCLUDED 27 template<
typename ElementType >
36 : mData( alignmentElements )
46 explicit BasicVector( std::size_t size, std::size_t alignmentElements )
47 : mData( size, alignmentElements )
59 explicit BasicVector( std::initializer_list< ElementType >
const & initialValues,
60 std::size_t alignmentElements = 0 )
61 : mData( initialValues.size(), alignmentElements )
63 std::copy( initialValues.begin(), initialValues.end(), data() );
89 throw std::runtime_error(
"Zeroing of Vector failed" );
92 mData.swap( newData );
102 if( rhs.
size() != size() )
104 resize( rhs.
size() );
118 throw std::runtime_error(
"Zeroing of vector failed" );
132 throw std::runtime_error(
"Filling of vector failed" );
146 throw std::logic_error(
"BasicVector::swap(): Vector layouts must be consistent for swapping" );
148 mData.swap( rhs.mData );
158 const std::size_t minAlignment = std::min( alignmentElements(), rhs.
alignmentElements() );
159 if( size() != rhs.
size() )
161 throw std::invalid_argument(
"BasicVector::copy(): Vector size inconsistent." );
165 throw std::runtime_error(
"BasicVector::copy() failed: " );
179 std::size_t
size( )
const {
return mData.size(); }
214 ElementType&
at( std::size_t idx )
218 throw std::out_of_range(
"Vector index exceeds size." );
220 return operator[]( idx );
231 ElementType
const &
at( std::size_t idx )
const 235 throw std::out_of_range(
"Vector index exceeds dimension." );
237 return operator[]( idx );
244 ElementType *
data( ) {
return mData.data( ); }
250 ElementType
const *
data()
const {
return mData.data(); }
276 #endif // #ifndef VISR_EFL_BASIC_VECTOR_HPP_INCLUDED ElementType * data()
Definition: aligned_array.hpp:108
BasicVector(std::size_t alignmentElements=0)
Definition: basic_vector.hpp:35
void swap(BasicVector< ElementType > &rhs)
Definition: basic_vector.hpp:142
void fillValue(ElementType val)
Definition: basic_vector.hpp:127
ElementType const & at(std::size_t idx) const
Definition: basic_vector.hpp:231
~BasicVector()
Definition: basic_vector.hpp:74
ElementType const * data() const
Definition: basic_vector.hpp:250
ElementType * data()
Definition: basic_vector.hpp:244
Definition: error_codes.hpp:15
ErrorCode vectorZero(T *const dest, std::size_t numElements, std::size_t alignment)
Definition: vector_functions.cpp:40
void copy(BasicVector< ElementType > const &rhs)
Definition: basic_vector.hpp:156
void assign(const BasicVector< ElementType > &rhs)
Definition: basic_vector.hpp:100
ElementType const & operator[](std::size_t idx) const
Definition: basic_vector.hpp:201
Definition: options.cpp:10
std::size_t size() const
Definition: basic_vector.hpp:179
ErrorCode vectorFill(const T value, T *const dest, std::size_t numElements, std::size_t alignment)
Definition: vector_functions.cpp:51
ErrorCode vectorCopy(T const *const source, T *const dest, std::size_t numElements, std::size_t alignment)
Definition: vector_functions.cpp:73
BasicVector(std::initializer_list< ElementType > const &initialValues, std::size_t alignmentElements=0)
Definition: basic_vector.hpp:59
BasicVector(std::size_t size, std::size_t alignmentElements)
Definition: basic_vector.hpp:46
ElementType & at(std::size_t idx)
Definition: basic_vector.hpp:214
std::size_t alignmentElements() const
Definition: basic_vector.hpp:173
ElementType & operator[](std::size_t idx)
Definition: basic_vector.hpp:189
void resize(std::size_t newSize)
Definition: basic_vector.hpp:82
ErrorCode
Definition: error_codes.hpp:13
void zeroFill()
Definition: basic_vector.hpp:113
Definition: aligned_array.hpp:33
Definition: basic_vector.hpp:28