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>
43 for (
int i = 0; i < Size; ++i)
45 ret[i] = v1[i] + v2[i];
52template<
typename A,
int Size>
57 for (
int i = 0; i < Size; ++i)
59 ret[i] = v1[i] - v2[i];
66template<
typename A,
int Size>
71 for (
int i = 0; i < Size; ++i)
73 ret[i] = v1[i] * v2[i];
80template<
typename A,
typename B,
int Size>
85 for (
int i = 0; i < Size; ++i)
87 ret[i] = v1[i] * scalar;
94template<
typename A,
int Size>
99 for (
int i = 0; i < Size; ++i)
101 ret[i] = v1[i] / v2[i];
108#define vtkVectorOperatorNegate(vectorType, type, size) \
109inline vectorType operator-(const vectorType& v) \
111 return vectorType((-static_cast<vtkVector<type, size> >(v)).GetData()); \
113#define vtkVectorOperatorPlus(vectorType, type, size) \
114inline vectorType operator+(const vectorType& v1, const vectorType& v2) \
116 return vectorType((static_cast<vtkVector<type, size> >(v1) + \
117 static_cast<vtkVector<type, size> >(v2)).GetData()); \
119#define vtkVectorOperatorMinus(vectorType, type, size) \
120inline vectorType operator-(const vectorType& v1, const vectorType& v2) \
122 return vectorType((static_cast<vtkVector<type, size> >(v1) - \
123 static_cast<vtkVector<type, size> >(v2)).GetData()); \
125#define vtkVectorOperatorMultiply(vectorType, type, size) \
126inline vectorType operator*(const vectorType& v1, const vectorType& v2) \
128 return vectorType((static_cast<vtkVector<type, size> >(v1) * \
129 static_cast<vtkVector<type, size> >(v2)).GetData()); \
131#define vtkVectorOperatorMultiplyScalar(vectorType, type, size) \
132template<typename B> \
133inline vectorType operator*(const vectorType& v1, const B& scalar) \
135 return vectorType((static_cast<vtkVector<type, size> >(v1) * scalar).GetData()); \
137#define vtkVectorOperatorMultiplyScalarPre(vectorType, type, size) \
138template<typename B> \
139inline vectorType operator*(const B& scalar, const vectorType& v1) \
141 return vectorType((static_cast<vtkVector<type, size> >(v1) * scalar).GetData()); \
143#define vtkVectorOperatorDivide(vectorType, type, size) \
144inline vectorType operator/(const vectorType& v1, const vectorType& v2) \
146 return vectorType((static_cast<vtkVector<type, size> >(v1) / \
147 static_cast<vtkVector<type, size> >(v2)).GetData()); \
150#define vtkVectorOperatorMacro(vectorType, type, size) \
151vtkVectorOperatorNegate(vectorType, type, size) \
152vtkVectorOperatorPlus(vectorType, type, size) \
153vtkVectorOperatorMinus(vectorType, type, size) \
154vtkVectorOperatorMultiply(vectorType, type, size) \
155vtkVectorOperatorMultiplyScalar(vectorType, type, size) \
156vtkVectorOperatorMultiplyScalarPre(vectorType, type, size) \
157vtkVectorOperatorDivide(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< A, Size > operator*(const vtkVector< A, Size > &v1, const vtkVector< A, Size > &v2)
vtkVector< A, Size > operator-(const vtkVector< A, Size > &v)