16#ifndef vtkVectorOperators_h
17#define vtkVectorOperators_h
25template <
typename A,
int Size>
29 for (
int i = 0; i < Size; ++i)
38template <
typename A,
int Size>
42 for (
int i = 0; i < Size; ++i)
44 ret[i] = v1[i] + v2[i];
51template <
typename T,
int Size>
54 for (
int dim = 0; dim < Size; ++dim)
64template <
typename A,
int Size>
68 for (
int i = 0; i < Size; ++i)
70 ret[i] = v1[i] - v2[i];
77template <
typename T,
int Size>
80 for (
int dim = 0; dim < Size; ++dim)
90template <
typename A,
int Size>
94 for (
int i = 0; i < Size; ++i)
96 ret[i] = v1[i] * v2[i];
103template <
typename A,
typename B,
int Size>
107 for (
int i = 0; i < Size; ++i)
109 ret[i] = v1[i] * scalar;
116template <
typename A,
int Size>
120 for (
int i = 0; i < Size; ++i)
122 ret[i] = v1[i] / v2[i];
129#define vtkVectorOperatorNegate(vectorType, type, size) \
130 inline vectorType operator-(const vectorType& v) \
132 return vectorType((-static_cast<vtkVector<type, size>>(v)).GetData()); \
134#define vtkVectorOperatorPlus(vectorType, type, size) \
135 inline vectorType operator+(const vectorType& v1, const vectorType& v2) \
138 (static_cast<vtkVector<type, size>>(v1) + static_cast<vtkVector<type, size>>(v2)) \
141#define vtkVectorOperatorMinus(vectorType, type, size) \
142 inline vectorType operator-(const vectorType& v1, const vectorType& v2) \
145 (static_cast<vtkVector<type, size>>(v1) - static_cast<vtkVector<type, size>>(v2)) \
148#define vtkVectorOperatorMultiply(vectorType, type, size) \
149 inline vectorType operator*(const vectorType& v1, const vectorType& v2) \
152 (static_cast<vtkVector<type, size>>(v1) * static_cast<vtkVector<type, size>>(v2)) \
155#define vtkVectorOperatorMultiplyScalar(vectorType, type, size) \
156 template <typename B> \
157 inline vectorType operator*(const vectorType& v1, const B& scalar) \
159 return vectorType((static_cast<vtkVector<type, size>>(v1) * scalar).GetData()); \
161#define vtkVectorOperatorMultiplyScalarPre(vectorType, type, size) \
162 template <typename B> \
163 inline vectorType operator*(const B& scalar, const vectorType& v1) \
165 return vectorType((static_cast<vtkVector<type, size>>(v1) * scalar).GetData()); \
167#define vtkVectorOperatorDivide(vectorType, type, size) \
168 inline vectorType operator/(const vectorType& v1, const vectorType& v2) \
171 (static_cast<vtkVector<type, size>>(v1) / static_cast<vtkVector<type, size>>(v2)) \
175#define vtkVectorOperatorMacro(vectorType, type, size) \
176 vtkVectorOperatorNegate(vectorType, type, size); \
177 vtkVectorOperatorPlus(vectorType, type, size); \
178 vtkVectorOperatorMinus(vectorType, type, size); \
179 vtkVectorOperatorMultiply(vectorType, type, size); \
180 vtkVectorOperatorMultiplyScalar(vectorType, type, size); \
181 vtkVectorOperatorMultiplyScalarPre(vectorType, type, size); \
182 vtkVectorOperatorDivide(vectorType, type, size)
Some derived classes for the different vectors commonly used.
templated base type for storage of vectors.
#define vtkVectorOperatorMacro(vectorType, type, size)
vtkVector< A, Size > operator/(const vtkVector< A, Size > &v1, const vtkVector< A, Size > &v2)
vtkVector< A, Size > operator+(const vtkVector< A, Size > &v1, const vtkVector< A, Size > &v2)
vtkVector< T, Size > & operator-=(vtkVector< T, Size > &a, const vtkVector< T, Size > &b)
vtkVector< A, Size > operator*(const vtkVector< A, Size > &v1, const vtkVector< A, Size > &v2)
vtkVector< A, Size > operator-(const vtkVector< A, Size > &v)
vtkVector< T, Size > & operator+=(vtkVector< T, Size > &a, const vtkVector< T, Size > &b)