DNA Calib 1.1
Project brief
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
tdm::vec< L, T > Struct Template Reference

#include <Vec.h>

Inheritance diagram for tdm::vec< L, T >:
Inheritance graph
Collaboration diagram for tdm::vec< L, T >:
Collaboration graph

Public Types

using value_type = T
 

Public Member Functions

 vec ()
 
 ~vec ()=default
 
 vec (const vec &rhs)=default
 
vecoperator= (const vec &rhs)=default
 
 vec (vec &&rhs)=default
 
vecoperator= (vec &&rhs)=default
 
template<typename U >
 vec (const vec< L, U > &rhs)
 
template<typename U >
vecoperator= (const vec< L, U > &rhs)
 
template<typename ... Vs, typename std::enable_if<(sizeof...(Vs)==L)||(sizeof...(Vs)==0)>::type * = nullptr>
 vec (Vs... vs)
 
template<typename U , typename ... , typename std::enable_if< std::is_convertible< U, T >::value &&(L > 1)>::type * = nullptr>
 vec (U v)
 
template<typename U , typename ... , typename std::enable_if< std::is_convertible< U, T >::value >::type * = nullptr>
 vec (U *pv)
 
T & operator[] (dim_t index)
 
const T & operator[] (dim_t index) const
 
template<typename F >
vecapply (F func)
 
template<typename F >
const vecapply (F func) const
 
vecoperator++ ()
 
vecoperator-- ()
 
template<typename U >
vecoperator+= (U rhs)
 
template<typename U >
vecoperator+= (const vec< L, U > &rhs)
 
vecoperator+= (const vec &rhs)
 
template<typename U >
vecoperator-= (U rhs)
 
template<typename U >
vecoperator-= (const vec< L, U > &rhs)
 
vecoperator-= (const vec &rhs)
 
template<typename U >
vecoperator*= (U rhs)
 
template<typename U >
vecoperator*= (const vec< L, U > &rhs)
 
vecoperator*= (const vec &rhs)
 
template<typename U >
vecoperator/= (U rhs)
 
template<typename U >
vecoperator/= (const vec< L, U > &rhs)
 
vecoperator/= (const vec &rhs)
 
template<typename ... , typename V = T>
std::enable_if< std::is_floating_point< V >::value, V >::type length () const
 
template<typename ... , typename V = T>
std::enable_if< std::is_floating_point< V >::value, vec & >::type normalize ()
 
vecnegate ()
 
sum () const
 

Static Public Member Functions

static constexpr dim_t dimensions ()
 

Public Attributes

value_type values [L]
 

Member Typedef Documentation

◆ value_type

template<dim_t L, typename T >
using tdm::vec< L, T >::value_type = T

Constructor & Destructor Documentation

◆ vec() [1/7]

template<dim_t L, typename T >
tdm::vec< L, T >::vec ( )
inline
19 : values{} {
20 }
value_type values[L]
Definition: Vec.h:17

◆ ~vec()

template<dim_t L, typename T >
tdm::vec< L, T >::~vec ( )
default

◆ vec() [2/7]

template<dim_t L, typename T >
tdm::vec< L, T >::vec ( const vec< L, T > &  rhs)
default

◆ vec() [3/7]

template<dim_t L, typename T >
tdm::vec< L, T >::vec ( vec< L, T > &&  rhs)
default

◆ vec() [4/7]

template<dim_t L, typename T >
template<typename U >
tdm::vec< L, T >::vec ( const vec< L, U > &  rhs)
inline
31 {
32 std::copy(std::begin(rhs.values), std::end(rhs.values), std::begin(values));
33 }
void copy(const TSource &source, TDestination &destination)
Definition: utils/Extd.h:123

References extd::copy(), and tdm::vec< L, T >::values.

◆ vec() [5/7]

template<dim_t L, typename T >
template<typename ... Vs, typename std::enable_if<(sizeof...(Vs)==L)||(sizeof...(Vs)==0)>::type * = nullptr>
tdm::vec< L, T >::vec ( Vs...  vs)
inline
42 : values{vs ...} {
43 }

◆ vec() [6/7]

template<dim_t L, typename T >
template<typename U , typename ... , typename std::enable_if< std::is_convertible< U, T >::value &&(L > 1)>::type * = nullptr>
tdm::vec< L, T >::vec ( v)
inlineexplicit
46 {
47 std::fill_n(values, dimensions(), v);
48 }
static constexpr dim_t dimensions()
Definition: Vec.h:13

References tdm::vec< L, T >::dimensions(), and tdm::vec< L, T >::values.

◆ vec() [7/7]

template<dim_t L, typename T >
template<typename U , typename ... , typename std::enable_if< std::is_convertible< U, T >::value >::type * = nullptr>
tdm::vec< L, T >::vec ( U *  pv)
inlineexplicit
51 {
52 std::copy_n(pv, dimensions(), std::begin(values));
53 }

References tdm::vec< L, T >::dimensions(), and tdm::vec< L, T >::values.

Member Function Documentation

◆ apply() [1/2]

template<dim_t L, typename T >
template<typename F >
vec & tdm::vec< L, T >::apply ( func)
inline

◆ apply() [2/2]

template<dim_t L, typename T >
template<typename F >
const vec & tdm::vec< L, T >::apply ( func) const
inline
76 {
77 for (dim_t i{}; i < dimensions(); ++i) {
78 func(values[i], i);
79 }
80 return *this;
81 }

References tdm::vec< L, T >::dimensions(), and tdm::vec< L, T >::values.

◆ dimensions()

template<dim_t L, typename T >
static constexpr dim_t tdm::vec< L, T >::dimensions ( )
inlinestaticconstexpr

◆ length()

template<dim_t L, typename T >
template<typename ... , typename V = T>
std::enable_if< std::is_floating_point< V >::value, V >::type tdm::vec< L, T >::length ( ) const
inline
168 {
169 const auto& v = *this;
170 return std::sqrt((v * v).sum());
171 }
T sum() const
Definition: Vec.h:184

References tdm::vec< L, T >::sum().

Referenced by tdm::length(), and tdm::vec< L, T >::normalize().

◆ negate()

template<dim_t L, typename T >
vec & tdm::vec< L, T >::negate ( )
inline
178 {
179 return apply([](T& v, dim_t /*unused*/) {
180 v = -v;
181 });
182 }
vec & apply(F func)
Definition: Vec.h:68

References tdm::vec< L, T >::apply().

Referenced by tdm::mat< R, C, T >::negate(), tdm::negate(), and tdm::operator-().

◆ normalize()

template<dim_t L, typename T >
template<typename ... , typename V = T>
std::enable_if< std::is_floating_point< V >::value, vec & >::type tdm::vec< L, T >::normalize ( )
inline
174 {
175 return operator/=(length());
176 }
vec & operator/=(U rhs)
Definition: Vec.h:150
std::enable_if< std::is_floating_point< V >::value, V >::type length() const
Definition: Vec.h:168

References tdm::vec< L, T >::length(), and tdm::vec< L, T >::operator/=().

Referenced by tdm::normalize().

◆ operator*=() [1/3]

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator*= ( const vec< L, T > &  rhs)
inline
145 {
146 return operator*=<T>(rhs);
147 }

◆ operator*=() [2/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator*= ( const vec< L, U > &  rhs)
inline
139 {
140 return apply([&rhs](T& v, dim_t i) {
141 v *= rhs[i];
142 });
143 }

References tdm::vec< L, T >::apply().

◆ operator*=() [3/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator*= ( rhs)
inline
132 {
133 return apply([rhs](T& v, dim_t /*unused*/) {
134 v *= rhs;
135 });
136 }

References tdm::vec< L, T >::apply().

◆ operator++()

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator++ ( )
inline
83 {
84 return apply([](T& v, dim_t /*unused*/) {
85 ++v;
86 });
87 }

References tdm::vec< L, T >::apply().

◆ operator+=() [1/3]

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator+= ( const vec< L, T > &  rhs)
inline
109 {
110 return operator+=<T>(rhs);
111 }

◆ operator+=() [2/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator+= ( const vec< L, U > &  rhs)
inline
103 {
104 return apply([&rhs](T& v, dim_t i) {
105 v += rhs[i];
106 });
107 }

References tdm::vec< L, T >::apply().

◆ operator+=() [3/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator+= ( rhs)
inline
96 {
97 return apply([rhs](T& v, dim_t /*unused*/) {
98 v += rhs;
99 });
100 }

References tdm::vec< L, T >::apply().

◆ operator--()

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator-- ( )
inline
89 {
90 return apply([](T& v, dim_t /*unused*/) {
91 --v;
92 });
93 }

References tdm::vec< L, T >::apply().

◆ operator-=() [1/3]

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator-= ( const vec< L, T > &  rhs)
inline
127 {
128 return operator-=<T>(rhs);
129 }

◆ operator-=() [2/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator-= ( const vec< L, U > &  rhs)
inline
121 {
122 return apply([&rhs](T& v, dim_t i) {
123 v -= rhs[i];
124 });
125 }

References tdm::vec< L, T >::apply().

◆ operator-=() [3/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator-= ( rhs)
inline
114 {
115 return apply([rhs](T& v, dim_t /*unused*/) {
116 v -= rhs;
117 });
118 }

References tdm::vec< L, T >::apply().

◆ operator/=() [1/3]

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator/= ( const vec< L, T > &  rhs)
inline
163 {
164 return operator/=<T>(rhs);
165 }

◆ operator/=() [2/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator/= ( const vec< L, U > &  rhs)
inline
157 {
158 return apply([&rhs](T& v, dim_t i) {
159 v /= rhs[i];
160 });
161 }

References tdm::vec< L, T >::apply().

◆ operator/=() [3/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator/= ( rhs)
inline
150 {
151 return apply([rhs](T& v, dim_t /*unused*/) {
152 v /= rhs;
153 });
154 }

References tdm::vec< L, T >::apply().

Referenced by tdm::vec< L, T >::normalize().

◆ operator=() [1/3]

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator= ( const vec< L, T > &  rhs)
default

◆ operator=() [2/3]

template<dim_t L, typename T >
template<typename U >
vec & tdm::vec< L, T >::operator= ( const vec< L, U > &  rhs)
inline
36 {
37 std::copy(std::begin(rhs.values), std::end(rhs.values), std::begin(values));
38 return *this;
39 }

References extd::copy(), and tdm::vec< L, T >::values.

◆ operator=() [3/3]

template<dim_t L, typename T >
vec & tdm::vec< L, T >::operator= ( vec< L, T > &&  rhs)
default

◆ operator[]() [1/2]

template<dim_t L, typename T >
T & tdm::vec< L, T >::operator[] ( dim_t  index)
inline
55 {
56 assert(index < dimensions());
57 return values[index];
58 }

References tdm::vec< L, T >::dimensions(), and tdm::vec< L, T >::values.

◆ operator[]() [2/2]

template<dim_t L, typename T >
const T & tdm::vec< L, T >::operator[] ( dim_t  index) const
inline
60 {
61 assert(index < dimensions());
62 return values[index];
63 }

References tdm::vec< L, T >::dimensions(), and tdm::vec< L, T >::values.

◆ sum()

template<dim_t L, typename T >
T tdm::vec< L, T >::sum ( ) const
inline
184 {
185 T retval{};
186 apply([&retval](const T& v, dim_t /*unused*/) {
187 retval += v;
188 });
189 return retval;
190 }

References tdm::vec< L, T >::apply().

Referenced by tdm::vec< L, T >::length().

Member Data Documentation

◆ values

template<dim_t L, typename T >
value_type tdm::vec< L, T >::values[L]

The documentation for this struct was generated from the following files: