16 #ifndef __vtkVectorOperators_h
17 #define __vtkVectorOperators_h
25 template<
typename A,
int Size>
30 for (
int i = 0; i < Size; ++i)
32 ret[i] = v1[i] + v2[i];
39 template<
typename A,
int Size>
44 for (
int i = 0; i < Size; ++i)
46 ret[i] = v1[i] - v2[i];
53 template<
typename A,
int Size>
58 for (
int i = 0; i < Size; ++i)
60 ret[i] = v1[i] * v2[i];
67 template<
typename A,
typename B,
int Size>
72 for (
int i = 0; i < Size; ++i)
74 ret[i] = v1[i] * scalar;
81 template<
typename A,
int Size>
86 for (
int i = 0; i < Size; ++i)
88 ret[i] = v1[i] / v2[i];
95 #define vtkVectorOperatorPlus(vectorType, type, size) \
96 inline vectorType operator+(const vectorType& v1, const vectorType& v2) \
98 return vectorType((static_cast<vtkVector<type, size> >(v1) + \
99 static_cast<vtkVector<type, size> >(v2)).GetData()); \
101 #define vtkVectorOperatorMinus(vectorType, type, size) \
102 inline vectorType operator-(const vectorType& v1, const vectorType& v2) \
104 return vectorType((static_cast<vtkVector<type, size> >(v1) - \
105 static_cast<vtkVector<type, size> >(v2)).GetData()); \
107 #define vtkVectorOperatorMultiply(vectorType, type, size) \
108 inline vectorType operator*(const vectorType& v1, const vectorType& v2) \
110 return vectorType((static_cast<vtkVector<type, size> >(v1) * \
111 static_cast<vtkVector<type, size> >(v2)).GetData()); \
113 #define vtkVectorOperatorMultiplyScalar(vectorType, type, size) \
114 template<typename B> \
115 inline vectorType operator*(const vectorType& v1, const B& scalar) \
117 return vectorType((static_cast<vtkVector<type, size> >(v1) * scalar).GetData()); \
119 #define vtkVectorOperatorMultiplyScalarPre(vectorType, type, size) \
120 template<typename B> \
121 inline vectorType operator*(const B& scalar, const vectorType& v1) \
123 return vectorType((static_cast<vtkVector<type, size> >(v1) * scalar).GetData()); \
125 #define vtkVectorOperatorDivide(vectorType, type, size) \
126 inline 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()); \
132 #define vtkVectorOperatorMacro(vectorType, type, size) \
133 vtkVectorOperatorPlus(vectorType, type, size) \
134 vtkVectorOperatorMinus(vectorType, type, size) \
135 vtkVectorOperatorMultiply(vectorType, type, size) \
136 vtkVectorOperatorMultiplyScalar(vectorType, type, size) \
137 vtkVectorOperatorMultiplyScalarPre(vectorType, type, size) \
138 vtkVectorOperatorDivide(vectorType, type, size)
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)
GLfloat GLfloat GLfloat v2
vtkVector< A, Size > operator*(const vtkVector< A, Size > &v1, const vtkVector< A, Size > &v2)