SmallVector< numberOfRows > Class Template Reference

#include <SmallVector.h>

Public Member Functions

 SmallVector ()
 
 SmallVector (const SmallVector &other)
 
 SmallVector (SmallVector &&other)
 
 SmallVector (const Mdouble array[])
 
 SmallVector (std::initializer_list< Mdouble > data)
 
SmallVectoroperator= (const SmallVector &right)
 
SmallVectoroperator= (const std::array< Mdouble, numberOfRows > l)
 
SmallVector operator+ (const SmallVector &right) const
 
SmallVector operator- (const SmallVector &right) const
 
SmallVector operator* (const Mdouble &right) const
 
Mdouble operator* (const SmallVector &right) const
 Computes inner product between two vectors. More...
 
SmallVectoroperator/= (const Mdouble &right)
 
SmallVector operator/ (const Mdouble &right) const
 
void axpy (Mdouble a, const SmallVector &x)
 
bool operator== (const SmallVector &right) const
 
bool operator< (const SmallVector &right) const
 
SmallVectoroperator+= (const SmallVector &right)
 
SmallVectoroperator-= (const SmallVector &right)
 
SmallVectoroperator*= (const double &right)
 
Mdoubleoperator[] (unsigned int n)
 
const Mdoubleoperator[] (unsigned int n) const
 
Mdoubleoperator() (unsigned int n)
 
const Mdoubleoperator() (unsigned int n) const
 
unsigned int size () const
 
const Mdoubledata () const
 
Mdoubledata ()
 
SmallVector operator- () const
 
Mdouble length () const
 
SmallVector< numberOfRows > getNormalised () const
 

Private Attributes

std::array< Mdouble, numberOfRows > data_
 

Detailed Description

template<unsigned int numberOfRows>
class SmallVector< numberOfRows >

Implementation of a 3D vector (by Vitaliy). Modifications 21:9:2009 - Added the inclusion guards and some include objects

Todo:
Need to generalize this to n-dimensional vectors of any type

Constructor & Destructor Documentation

◆ SmallVector() [1/5]

template<unsigned int numberOfRows>
SmallVector< numberOfRows >::SmallVector ( )
inline
47  : data_()
48  {
49  }
std::array< Mdouble, numberOfRows > data_
Definition: SmallVector.h:250

◆ SmallVector() [2/5]

template<unsigned int numberOfRows>
SmallVector< numberOfRows >::SmallVector ( const SmallVector< numberOfRows > &  other)
inline
52  : data_(other.data_)
53  {
54  }

◆ SmallVector() [3/5]

template<unsigned int numberOfRows>
SmallVector< numberOfRows >::SmallVector ( SmallVector< numberOfRows > &&  other)
inline
57  : data_(std::move(other.data_))
58  {
59  }

◆ SmallVector() [4/5]

template<unsigned int numberOfRows>
SmallVector< numberOfRows >::SmallVector ( const Mdouble  array[])
inline
62  : data_()
63  {
64  std::copy(array, array + numberOfRows, data_.begin());
65  }
EIGEN_BLAS_FUNC() copy(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition: level1_impl.h:32
std::array< T, N > array
Definition: EmulateArray.h:231

References copy(), and SmallVector< numberOfRows >::data_.

◆ SmallVector() [5/5]

template<unsigned int numberOfRows>
SmallVector< numberOfRows >::SmallVector ( std::initializer_list< Mdouble data)
inline
68  : data_()
69  {
70  logger.assert_debug(data.size() == numberOfRows, "provided array has size %, but should have size %",
71  data.size(), numberOfRows);
72  std::copy(data.begin(), data.end(), data_.begin());
73  }
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
const Mdouble * data() const
Definition: SmallVector.h:218

References copy(), SmallVector< numberOfRows >::data(), SmallVector< numberOfRows >::data_, and logger.

Member Function Documentation

◆ axpy()

template<unsigned int numberOfRows>
void SmallVector< numberOfRows >::axpy ( Mdouble  a,
const SmallVector< numberOfRows > &  x 
)
inline
131  {
132  for (unsigned int i = 0; i < numberOfRows; ++i)
133  {
134  data_[i] += a * x[i];
135  }
136  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const Scalar * a
Definition: level2_cplx_impl.h:32
list x
Definition: plotDoE.py:28

References a, SmallVector< numberOfRows >::data_, i, and plotDoE::x.

Referenced by main().

◆ data() [1/2]

◆ data() [2/2]

◆ getNormalised()

template<unsigned int numberOfRows>
SmallVector<numberOfRows> SmallVector< numberOfRows >::getNormalised ( ) const
inline
245  {
246  return (*this) / length();
247  }
Mdouble length() const
Definition: SmallVector.h:233

References SmallVector< numberOfRows >::length().

◆ length()

template<unsigned int numberOfRows>
Mdouble SmallVector< numberOfRows >::length ( ) const
inline
234  {
235  Mdouble sum = 0;
236  for (Mdouble x : data_)
237  {
238  sum += x * x;
239  logger(DEBUG, "x: %, sum: %", x, sum);
240  }
241  return std::sqrt(sum);
242  }
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
double Mdouble
Definition: GeneralDefine.h:13
@ DEBUG

References SmallVector< numberOfRows >::data_, DEBUG, logger, sqrt(), and plotDoE::x.

Referenced by SuperQuadricParticle::getCurvature(), and SmallVector< numberOfRows >::getNormalised().

◆ operator()() [1/2]

template<unsigned int numberOfRows>
Mdouble& SmallVector< numberOfRows >::operator() ( unsigned int  n)
inline
202  {
203  logger.assert_debug(n < numberOfRows, "Requested entry %, but there are only % entries", n, numberOfRows);
204  return data_[n];
205  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11

References SmallVector< numberOfRows >::data_, logger, and n.

◆ operator()() [2/2]

template<unsigned int numberOfRows>
const Mdouble& SmallVector< numberOfRows >::operator() ( unsigned int  n) const
inline
208  {
209  logger.assert_debug(n < numberOfRows, "Requested entry %, but there are only % entries", n, numberOfRows);
210  return data_[n];
211  }

References SmallVector< numberOfRows >::data_, logger, and n.

◆ operator*() [1/2]

template<unsigned int numberOfRows>
SmallVector SmallVector< numberOfRows >::operator* ( const Mdouble right) const
inline
102  {
103  SmallVector result;
104  std::transform(data_.begin(), data_.end(), result.data_.begin(), std::bind(std::multiplies<Mdouble>(),
105  std::placeholders::_1, right));
106  return result;
107  }
Definition: SmallVector.h:42
EIGEN_DONT_INLINE void transform(const Transformation &t, Data &data)
Definition: geometry.cpp:25

References SmallVector< numberOfRows >::data_, and transform().

◆ operator*() [2/2]

template<unsigned int numberOfRows>
Mdouble SmallVector< numberOfRows >::operator* ( const SmallVector< numberOfRows > &  right) const
inline

Computes inner product between two vectors.

111  {
112  return std::inner_product(right.data_.begin(), right.data_.end(), data_.begin(), 0.0);
113  }

References SmallVector< numberOfRows >::data_.

◆ operator*=()

template<unsigned int numberOfRows>
SmallVector& SmallVector< numberOfRows >::operator*= ( const double right)
inline
183  {
184  std::transform(data_.begin(), data_.end(), data_.begin(), std::bind(std::multiplies<Mdouble>(),
185  std::placeholders::_1, right));
186  return *this;
187  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator+()

template<unsigned int numberOfRows>
SmallVector SmallVector< numberOfRows >::operator+ ( const SmallVector< numberOfRows > &  right) const
inline
88  {
89  SmallVector result;
90  std::transform(data_.begin(), data_.end(), right.data_.begin(), result.data_.begin(), std::plus<Mdouble>());
91  return result;
92  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator+=()

template<unsigned int numberOfRows>
SmallVector& SmallVector< numberOfRows >::operator+= ( const SmallVector< numberOfRows > &  right)
inline
171  {
172  std::transform(data_.begin(), data_.end(), right.data_.begin(), data_.begin(), std::plus<Mdouble>());
173  return *this;
174  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator-() [1/2]

template<unsigned int numberOfRows>
SmallVector SmallVector< numberOfRows >::operator- ( void  ) const
inline
229  {
230  return *this * -1.0;
231  }

◆ operator-() [2/2]

template<unsigned int numberOfRows>
SmallVector SmallVector< numberOfRows >::operator- ( const SmallVector< numberOfRows > &  right) const
inline
95  {
96  SmallVector result;
97  std::transform(data_.begin(), data_.end(), right.data_.begin(), result.data_.begin(), std::minus<Mdouble>());
98  return result;
99  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator-=()

template<unsigned int numberOfRows>
SmallVector& SmallVector< numberOfRows >::operator-= ( const SmallVector< numberOfRows > &  right)
inline
177  {
178  std::transform(data_.begin(), data_.end(), right.data_.begin(), data_.begin(), std::minus<Mdouble>());
179  return *this;
180  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator/()

template<unsigned int numberOfRows>
SmallVector SmallVector< numberOfRows >::operator/ ( const Mdouble right) const
inline
123  {
124  SmallVector result;
125  std::transform(data_.begin(), data_.end(), result.data_.begin(), std::bind(std::divides<Mdouble>(),
126  std::placeholders::_1, right));
127  return result;
128  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator/=()

template<unsigned int numberOfRows>
SmallVector& SmallVector< numberOfRows >::operator/= ( const Mdouble right)
inline
116  {
117  std::transform(data_.begin(), data_.end(), data_.begin(), std::bind(std::divides<Mdouble>(),
118  std::placeholders::_1, right));
119  return *this;
120  }

References SmallVector< numberOfRows >::data_, and transform().

◆ operator<()

template<unsigned int numberOfRows>
bool SmallVector< numberOfRows >::operator< ( const SmallVector< numberOfRows > &  right) const
inline

This function is dangerous to use, since it compares doubles without a tolerance interval to see if they are equal.

155  {
156  for (unsigned int i = 0; i < numberOfRows; ++i)
157  {
158  if (data_[i] < right[i])
159  {
160  return true;
161  }
162  if (data_[i] > right[i])
163  {
164  return false;
165  }
166  }
167  return false;
168  }

References SmallVector< numberOfRows >::data_, and i.

◆ operator=() [1/2]

template<unsigned int numberOfRows>
SmallVector& SmallVector< numberOfRows >::operator= ( const SmallVector< numberOfRows > &  right)
inline
76  {
77  std::copy(right.data_.begin(), right.data_.end(), data_.begin());
78  return *this;
79  }

References copy(), and SmallVector< numberOfRows >::data_.

◆ operator=() [2/2]

template<unsigned int numberOfRows>
SmallVector& SmallVector< numberOfRows >::operator= ( const std::array< Mdouble, numberOfRows >  l)
inline
82  {
83  std::copy(l.begin(), l.end(), data_.begin());
84  return *this;
85  }

References copy(), and SmallVector< numberOfRows >::data_.

◆ operator==()

template<unsigned int numberOfRows>
bool SmallVector< numberOfRows >::operator== ( const SmallVector< numberOfRows > &  right) const
inline

This function is dangerous to use, since it compares doubles without a tolerance interval to see if they are equal.

141  {
142  for (unsigned int i = 0; i < numberOfRows; ++i)
143  {
144  if (data_[i] != right[i])
145  {
146  return false;
147  }
148  }
149  return true;
150  }

References SmallVector< numberOfRows >::data_, and i.

◆ operator[]() [1/2]

template<unsigned int numberOfRows>
Mdouble& SmallVector< numberOfRows >::operator[] ( unsigned int  n)
inline
190  {
191  logger.assert_debug(n < numberOfRows, "Requested entry %, but there are only % entries", n, numberOfRows);
192  return data_[n];
193  }

References SmallVector< numberOfRows >::data_, logger, and n.

◆ operator[]() [2/2]

template<unsigned int numberOfRows>
const Mdouble& SmallVector< numberOfRows >::operator[] ( unsigned int  n) const
inline
196  {
197  logger.assert_debug(n < numberOfRows, "Requested entry %, but there are only % entries", n, numberOfRows);
198  return data_[n];
199  }

References SmallVector< numberOfRows >::data_, logger, and n.

◆ size()

template<unsigned int numberOfRows>
unsigned int SmallVector< numberOfRows >::size ( ) const
inline
214  {
215  return numberOfRows;
216  }

Referenced by main(), SmallMatrix< numberOfRows, numberOfColumns >::operator*(), and operator*().

Member Data Documentation

◆ data_


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