4 #ifndef vtkVectorOperators_h
5 #define vtkVectorOperators_h
13 VTK_ABI_NAMESPACE_BEGIN
14 template <
typename A,
int Size>
18 for (
int i = 0; i < Size; ++i)
27 template <
typename A,
int Size>
31 for (
int i = 0; i < Size; ++i)
33 ret[i] = v1[i] + v2[i];
40 template <
typename T,
int Size>
43 for (
int dim = 0; dim < Size; ++dim)
53 template <
typename A,
int Size>
57 for (
int i = 0; i < Size; ++i)
59 ret[i] = v1[i] - v2[i];
66 template <
typename T,
int Size>
69 for (
int dim = 0; dim < Size; ++dim)
79 template <
typename A,
int Size>
83 for (
int i = 0; i < Size; ++i)
85 ret[i] = v1[i] * v2[i];
92 template <
typename A,
typename B,
int Size>
96 for (
int i = 0; i < Size; ++i)
98 ret[i] = v1[i] * scalar;
105 template <
typename A,
int Size>
109 for (
int i = 0; i < Size; ++i)
111 ret[i] = v1[i] / v2[i];
118 #define vtkVectorOperatorNegate(vectorType, type, size) \
119 inline vectorType operator-(const vectorType& v) \
121 return vectorType((-static_cast<vtkVector<type, size>>(v)).GetData()); \
123 #define vtkVectorOperatorPlus(vectorType, type, size) \
124 inline vectorType operator+(const vectorType& v1, const vectorType& v2) \
127 (static_cast<vtkVector<type, size>>(v1) + static_cast<vtkVector<type, size>>(v2)) \
130 #define vtkVectorOperatorMinus(vectorType, type, size) \
131 inline vectorType operator-(const vectorType& v1, const vectorType& v2) \
134 (static_cast<vtkVector<type, size>>(v1) - static_cast<vtkVector<type, size>>(v2)) \
137 #define vtkVectorOperatorMultiply(vectorType, type, size) \
138 inline vectorType operator*(const vectorType& v1, const vectorType& v2) \
141 (static_cast<vtkVector<type, size>>(v1) * static_cast<vtkVector<type, size>>(v2)) \
144 #define vtkVectorOperatorMultiplyScalar(vectorType, type, size) \
145 template <typename B> \
146 inline vectorType operator*(const vectorType& v1, const B& scalar) \
148 return vectorType((static_cast<vtkVector<type, size>>(v1) * scalar).GetData()); \
150 #define vtkVectorOperatorMultiplyScalarPre(vectorType, type, size) \
151 template <typename B> \
152 inline vectorType operator*(const B& scalar, const vectorType& v1) \
154 return vectorType((static_cast<vtkVector<type, size>>(v1) * scalar).GetData()); \
156 #define vtkVectorOperatorDivide(vectorType, type, size) \
157 inline vectorType operator/(const vectorType& v1, const vectorType& v2) \
160 (static_cast<vtkVector<type, size>>(v1) / static_cast<vtkVector<type, size>>(v2)) \
164 #define vtkVectorOperatorMacro(vectorType, type, size) \
165 vtkVectorOperatorNegate(vectorType, type, size); \
166 vtkVectorOperatorPlus(vectorType, type, size); \
167 vtkVectorOperatorMinus(vectorType, type, size); \
168 vtkVectorOperatorMultiply(vectorType, type, size); \
169 vtkVectorOperatorMultiplyScalar(vectorType, type, size); \
170 vtkVectorOperatorMultiplyScalarPre(vectorType, type, size); \
171 vtkVectorOperatorDivide(vectorType, type, size)
182 VTK_ABI_NAMESPACE_END
Some derived classes for the different vectors commonly used.
templated base type for storage of vectors.
vtkVector< A, Size > operator-(const vtkVector< A, Size > &v)
#define vtkVectorOperatorMacro(vectorType, type, size)
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< 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 > &v1, const vtkVector< A, Size > &v2)