OpenABF 2.1.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Types | Private Attributes | Friends | List of all members
OpenABF::Vec< T, Dims, > Class Template Reference

N-dimensional vector class. More...

#include <OpenABF/OpenABF.hpp>

Inheritance diagram for OpenABF::Vec< T, Dims, >:
[legend]

Public Types

using value_type = T
 
using size_type = typename Container::size_type
 
using difference_type = typename Container::difference_type
 
using reference = value_type &
 
using const_reference = const value_type &
 
using pointer = value_type *
 
using const_pointer = const value_type *
 
using iterator = typename Container::iterator
 
using const_iterator = typename Container::const_iterator
 
using reverse_iterator = typename Container::reverse_iterator
 
using const_reverse_iterator = typename Container::const_reverse_iterator
 

Public Member Functions

 Vec ()
 Default constructor.
 
template<typename... Args>
 Vec (Args... args)
 Construct with element values.
 
template<typename Vector >
 Vec (const Vector &vec)
 Copy constructor.
 
constexpr reference at (size_type pos)
 Bounds-checked element access.
 
constexpr const_reference at (size_type pos) const
 Bounds-checked element access.
 
constexpr reference operator[] (size_type i)
 Element access.
 
constexpr const_reference operator[] (size_type i) const
 Element access.
 
constexpr reference front ()
 First element.
 
constexpr const_reference front () const
 First element.
 
constexpr reference back ()
 Last element.
 
constexpr const_reference back () const
 Last element.
 
constexpr pointer data ()
 Get a pointer to the first element of the raw data.
 
constexpr const_pointer data () const
 Get a pointer to the first element of the raw data.
 
constexpr iterator begin () noexcept
 Get an iterator to the first element of the vector.
 
constexpr const_iterator begin () const noexcept
 Get an iterator to the first element of the vector.
 
constexpr const_iterator cbegin () const noexcept
 Get an iterator to the first element of the vector.
 
constexpr iterator end () noexcept
 Get an iterator to one past the last element in the vector.
 
constexpr const_iterator end () const noexcept
 Get an iterator to one past the last element in the vector.
 
constexpr const_iterator cend () const noexcept
 Get an iterator to one past the last element in the vector.
 
constexpr reverse_iterator rbegin () noexcept
 Get an iterator to the first element of the reverse vector.
 
constexpr const_reverse_iterator rbegin () const noexcept
 Get an iterator to the first element of the reverse vector.
 
constexpr const_reverse_iterator crbegin () const noexcept
 Get an iterator to the first element of the reverse vector.
 
constexpr reverse_iterator rend () noexcept
 Get an iterator to one past the last element in the reverse vector.
 
constexpr const_reverse_iterator rend () const noexcept
 Get an iterator to one past the last element in the reverse vector.
 
constexpr const_reverse_iterator crend () const noexcept
 Get an iterator to one past the last element in the reverse vector.
 
constexpr bool empty () const noexcept
 Return whether the vector is empty (uninitialized)
 
constexpr size_type size () const noexcept
 Return the number of elements in the vector.
 
constexpr void fill (const T &value)
 Fill the vector with a value.
 
constexpr void swap (Vec &other) noexcept
 Swap this vector with another vector.
 
bool operator== (const Vec &rhs) const
 Equality comparison operator.
 
bool operator!= (const Vec &rhs) const
 Inequality comparison operator.
 
template<class Vector >
Vecoperator= (const Vector &b)
 Assignment operator.
 
template<typename T2 >
Vecoperator= (const std::initializer_list< T2 > &b)
 Assignment operator for std::initializer_list.
 
template<class Vector >
Vecoperator+= (const Vector &b)
 Addition assignment operator.
 
template<class Vector >
Vecoperator-= (const Vector &b)
 Subtraction assignment operator.
 
template<typename T2 , std::enable_if_t< std::is_arithmetic< T2 >::value, bool > = true>
Vecoperator*= (const T2 &b)
 Multiplication assignment operator.
 
template<typename T2 , std::enable_if_t< std::is_arithmetic< T2 >::value, bool > = true>
Vecoperator/= (const T2 &b)
 Division assignment operator.
 
template<class Vector >
dot (const Vector &v)
 Compute the vector dot product (i.e. inner product)
 
template<class Vector , std::size_t D = Dims>
std::enable_if_t< D==3, Veccross (const Vector &v)
 Compute the vector cross product.
 
magnitude () const
 Compute the vector magnitude.
 
Vec unit () const
 Return the unit vector of this vector.
 

Private Types

using Container = std::array< T, Dims >
 

Private Attributes

Container val_ {}
 

Friends

template<class Vector >
Vec operator+ (Vec lhs, const Vector &rhs)
 Addition operator.
 
template<class Vector >
Vec operator- (Vec lhs, const Vector &rhs)
 Subtraction operator.
 
template<typename T2 , std::enable_if_t< std::is_arithmetic< T2 >::value, bool > = true>
Vec operator* (Vec lhs, const T2 &rhs)
 Multiplication operator.
 
template<typename T2 , std::enable_if_t< std::is_arithmetic< T2 >::value, bool > = true>
Vec operator/ (Vec lhs, const T2 &rhs)
 Division operator.
 

Detailed Description

template<typename T, std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
class OpenABF::Vec< T, Dims, >

N-dimensional vector class.

Essentially a wrapper around std::array that makes it more convenient for vector math purposes.

Template Parameters
TElement type
DimsNumber of elements

Member Typedef Documentation

◆ const_iterator

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::const_iterator = typename Container::const_iterator

Const iterator type

◆ const_pointer

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::const_pointer = const value_type*

Const pointer type

◆ const_reference

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::const_reference = const value_type&

Const reference type

◆ const_reverse_iterator

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::const_reverse_iterator = typename Container::const_reverse_iterator

Const reverse iterator type

◆ Container

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::Container = std::array<T, Dims>
private

Underlying element storage

◆ difference_type

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::difference_type = typename Container::difference_type

Difference type

◆ iterator

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::iterator = typename Container::iterator

Iterator type

◆ pointer

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::pointer = value_type*

Pointer type

◆ reference

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::reference = value_type&

Reference type

◆ reverse_iterator

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::reverse_iterator = typename Container::reverse_iterator

Reverse iterator type

◆ size_type

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::size_type = typename Container::size_type

Vector size type

◆ value_type

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
using OpenABF::Vec< T, Dims, >::value_type = T

Element type

Constructor & Destructor Documentation

◆ Vec()

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
template<typename... Args>
OpenABF::Vec< T, Dims, >::Vec ( Args...  args)
inlineexplicit

Construct with element values.

The number of arguments provided must match Dims.

Member Data Documentation

◆ val_

template<typename T , std::size_t Dims, std::enable_if_t< std::is_arithmetic< T >::value, bool > = true>
Container OpenABF::Vec< T, Dims, >::val_ {}
private

Values