4 #ifndef ROOT_Math_SVector
5 #define ROOT_Math_SVector
74 template <
class T,
unsigned int D>
85 typedef const T* const_iterator;
95 SVector(
const VecExpr<A,T,D>& rhs);
97 SVector(
const SVector<T,D>& rhs);
106 template<
class InputIterator>
107 explicit SVector(InputIterator begin, InputIterator end);
113 template<
class InputIterator>
114 explicit SVector(InputIterator begin,
unsigned int size);
120 SVector(
const T * a,
unsigned int len);
125 SVector(const_iterator begin, const_iterator end);
129 explicit SVector(
const T& a1);
131 SVector(
const T& a1,
const T& a2);
133 SVector(
const T& a1,
const T& a2,
const T& a3);
135 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4);
137 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
140 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
141 const T& a5,
const T& a6);
143 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
144 const T& a5,
const T& a6,
const T& a7);
146 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
147 const T& a5,
const T& a6,
const T& a7,
const T& a8);
149 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
150 const T& a5,
const T& a6,
const T& a7,
const T& a8,
153 SVector(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
154 const T& a5,
const T& a6,
const T& a7,
const T& a8,
155 const T& a9,
const T& a10);
160 SVector<T,D>& operator=(
const T& a1);
162 SVector<T,D>& operator=(
const SVector<T,D>& rhs);
165 SVector<T,D>& operator=(
const VecExpr<A,T,D>& rhs);
179 inline static unsigned int Dim() {
return D; }
181 T apply(
unsigned int i)
const;
183 const T* Array()
const;
197 const_iterator begin()
const;
200 const_iterator end()
const;
204 template<
class InputIterator>
205 void SetElements(InputIterator begin, InputIterator end);
209 template<
class InputIterator>
210 void SetElements(InputIterator begin,
unsigned int size);
216 bool operator==(
const T& rhs)
const;
218 bool operator!=(
const T& rhs)
const;
220 bool operator==(
const SVector<T,D>& rhs)
const;
222 bool operator!=(
const SVector<T,D>& rhs)
const;
225 bool operator==(
const VecExpr<A,T,D>& rhs)
const;
228 bool operator!=(
const VecExpr<A,T,D>& rhs)
const;
231 bool operator>(
const T& rhs)
const;
233 bool operator<(
const T& rhs)
const;
235 bool operator>(
const SVector<T,D>& rhs)
const;
237 bool operator<(const SVector<T,D>& rhs)
const;
240 bool operator>(
const VecExpr<A,T,D>& rhs)
const;
243 bool operator<(const VecExpr<A,T,D>& rhs)
const;
246 const T& operator[](
unsigned int i)
const;
248 const T& operator()(
unsigned int i)
const;
250 const T& At(
unsigned int i)
const;
252 T& operator[](
unsigned int i);
254 T& operator()(
unsigned int i);
256 T& At(
unsigned int i);
259 SVector<T,D>& operator+=(
const T& rhs);
261 SVector<T,D>& operator-=(
const T& rhs);
263 SVector<T,D>& operator*=(
const T& rhs);
265 SVector<T,D>& operator/=(
const T& rhs);
269 SVector<T,D>& operator+=(
const SVector<T,D>& rhs);
271 SVector<T,D>& operator-=(
const SVector<T,D>& rhs);
274 SVector<T,D>& operator+=(
const VecExpr<A,T,D>& rhs);
277 SVector<T,D>& operator-=(
const VecExpr<A,T,D>& rhs);
283 SVector<T,D>& operator*=(
const SVector<T,D>& rhs);
285 SVector<T,D>& operator/=(
const SVector<T,D>& rhs);
289 SVector<T,D>& operator*=(
const VecExpr<A,T,D>& rhs);
292 SVector<T,D>& operator/=(
const VecExpr<A,T,D>& rhs);
299 SVector<T,D>& Unit();
301 template <
unsigned int D2>
302 SVector<T,D>& Place_at(
const SVector<T,D2>& rhs,
unsigned int row);
304 template <
class A,
unsigned int D2>
305 SVector<T,D>& Place_at(
const VecExpr<A,T,D2>& rhs,
unsigned int row);
312 template <
class SubVector >
313 SubVector Sub(
unsigned int row)
const;
324 bool IsInUse(
const T* p)
const;
328 std::ostream& Print(std::ostream& os)
const;
342 template <
class T,
unsigned int D>
343 std::ostream& operator<<(std::ostream& os, const ROOT::Math::SVector<T,D>& rhs);