Go to the documentation of this file.
44 #ifndef GNSSTK_VECTOR_OPERATORS_HPP
45 #define GNSSTK_VECTOR_OPERATORS_HPP
55 #define VecBaseNewUnaryOperator(func) \
57 template <class T, class BaseClass> \
58 gnsstk::Vector<T> func(const gnsstk::ConstVectorBase<T, BaseClass>& x) \
60 BaseClass toReturn(x.size()); \
61 size_t i; for (i=0; i < x.size(); i++) toReturn[i] = func(x[i]); \
85 #define VecBaseNewBinaryOperator(func, retval) \
87 template <class T, class BaseClass, class BaseClass2> \
88 retval operator func(const ConstVectorBase<T, BaseClass>& l, \
89 const ConstVectorBase<T, BaseClass2>& r) \
91 if (l.size() != r.size()) \
93 VectorException e("Unequal lengths vectors"); \
96 retval toReturn(l.size()); \
98 for (i=0; i < l.size(); i++) toReturn[i] = l[i] func r[i]; \
102 template <class T, class BaseClass> \
103 retval operator func(const ConstVectorBase<T, BaseClass>& l, const T r) \
105 retval toReturn(l.size()); \
107 for (i=0; i < l.size(); i++) toReturn[i] = l[i] func r; \
111 template <class T, class BaseClass> \
112 retval operator func(const T l, const ConstVectorBase<T, BaseClass>& r) \
114 retval toReturn(r.size()); \
116 for (i=0; i < r.size(); i++) toReturn[i] = l func r[i]; \
136 #define VecBaseNewBinaryTranscendentalOperator(func, retval) \
138 template <class T, class BaseClass, class BaseClass2> \
139 retval func(const gnsstk::ConstVectorBase<T, BaseClass>& l, \
140 const gnsstk::ConstVectorBase<T, BaseClass2>& r) \
142 retval toReturn(l.size()); \
144 for (i=0; i < l.size(); i++) toReturn[i] = func(l[i], r[i]); \
148 template <class T, class BaseClass> \
149 retval func(const gnsstk::ConstVectorBase<T, BaseClass>& l, const T r) \
151 retval toReturn(l.size()); \
153 for (i=0; i < l.size(); i++) toReturn[i] = func(l[i], r); \
157 template <class T, class BaseClass> \
158 retval func(const T l, const gnsstk::ConstVectorBase<T, BaseClass>& r) \
160 retval toReturn(r.size()); \
162 for (i=0; i < r.size(); i++) toReturn[i] = func(l, r[i]); \
169 template <
class T,
class BaseClass,
class BaseClass2>
173 if ((l.
size() != 3) && (r.
size() != 3))
175 VectorException e(
"Cross product requires vectors of size 3");
178 BaseClass toReturn(3);
179 toReturn[0] = l[1] * r[2] - l[2] * r[1];
180 toReturn[1] = l[2] * r[0] - l[0] * r[2];
181 toReturn[2] = l[0] * r[1] - l[1] * r[0];
186 template <
class T,
class BaseClass>
188 {
return l /
norm(l); }
191 template <
class T,
class BaseClass>
196 template <
class T,
class BaseClass>
VecBaseNewBinaryOperator Vector VecBaseNewBinaryOperator(/, Vector< T >) VecBaseNewBinaryOperator(%
double sin(gnsstk::Angle x)
class BaseClass2 Vector< T > cross(const ConstVectorBase< T, BaseClass > &l, const ConstVectorBase< T, BaseClass2 > &r)
#define VecBaseNewUnaryOperator(func)
double cos(gnsstk::Angle x)
T RSS(T aa, T bb, T cc)
Perform the root sum square of aa, bb and cc.
size_t size() const
Returns the size of the base class.
Vector< T > normalize(const ConstVectorBase< T, BaseClass > &l)
double tan(gnsstk::Angle x)
VecBaseNewBinaryTranscendentalOperator(atan2, gnsstk::Vector< T >) VecBaseNewBinaryTranscendentalOperator(pow
#define GNSSTK_THROW(exc)
T norm(const SparseVector< T > &SV)
T RMS(const ConstVectorBase< T, BaseClass > &l)
gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:42