FEDRA emulsion software from the OPERA Collaboration
SVector.hh
Go to the documentation of this file.
1#ifndef __SVECTOR_HH
2#define __SVECTOR_HH
3// ********************************************************************
4//
5// source:
6//
7// type: source code
8//
9// created: 16. Mar 2001
10//
11// author: Thorsten Glebe
12// HERA-B Collaboration
13// Max-Planck-Institut fuer Kernphysik
14// Saupfercheckweg 1
15// 69117 Heidelberg
16// Germany
17// E-mail: T.Glebe@mpi-hd.mpg.de
18//
19// Description: A fixed size Vector class
20//
21// changes:
22// 16 Mar 2001 (TG) creation
23// 21 Mar 2001 (TG) SVector::value_type added
24// 21 Mar 2001 (TG) added operators +=, -=, *=, /=
25// 26 Mar 2001 (TG) added place_at()
26// 03 Apr 2001 (TG) Array() added
27// 06 Apr 2001 (TG) CTORS added
28// 07 Apr 2001 (TG) CTORS added
29// 22 Aug 2001 (TG) CTOR(T*,len) added
30// 04 Sep 2001 (TG) moved inlined functions to .icc file
31// 14 Jan 2002 (TG) added operator==(), operator!=(), operator>(), operator<()
32//
33// ********************************************************************
34#include <iosfwd>
35
36template <class A, class T, unsigned int D, unsigned int D2> class Expr;
37
38// expression engine
39#include "Expression.hh"
40
47//==============================================================================
48// SVector
49//==============================================================================
50template <class T, unsigned int D>
51class SVector {
52public:
55 typedef T value_type;
56
61 template <class A>
62 SVector(const Expr<A,T,D>& rhs);
64 SVector(const SVector<T,D>& rhs);
66 template <unsigned int D1>
69 template <unsigned int D1>
70 SVector(const T& a1, const SVector<T,D1>& rhs);
72 SVector(const T* a, unsigned int len);
74 SVector(const T& rhs);
76 SVector(const T& a1, const T& a2);
78 SVector(const T& a1, const T& a2, const T& a3);
80 SVector(const T& a1, const T& a2, const T& a3, const T& a4);
82 SVector(const T& a1, const T& a2, const T& a3, const T& a4,
83 const T& a5);
85 SVector(const T& a1, const T& a2, const T& a3, const T& a4,
86 const T& a5, const T& a6);
88 SVector(const T& a1, const T& a2, const T& a3, const T& a4,
89 const T& a5, const T& a6, const T& a7);
91 SVector(const T& a1, const T& a2, const T& a3, const T& a4,
92 const T& a5, const T& a6, const T& a7, const T& a8);
94 SVector(const T& a1, const T& a2, const T& a3, const T& a4,
95 const T& a5, const T& a6, const T& a7, const T& a8,
96 const T& a9);
98 SVector(const T& a1, const T& a2, const T& a3, const T& a4,
99 const T& a5, const T& a6, const T& a7, const T& a8,
100 const T& a9, const T& a10);
101
103 SVector<T,D>& operator=(const T& rhs);
105 template <class A>
107
110 inline static unsigned int dim() { return D; }
112 T apply(unsigned int i) const;
114 const T* Array() const;
116 T* Array();
117
120 bool operator==(const T& rhs) const;
122 bool operator!=(const T& rhs) const;
124 bool operator==(const SVector<T,D>& rhs) const;
126 bool operator!=(const SVector<T,D>& rhs) const;
128 template <class A>
129 bool operator==(const Expr<A,T,D>& rhs) const;
131 template <class A>
132 bool operator!=(const Expr<A,T,D>& rhs) const;
133
135 bool operator>(const T& rhs) const;
137 bool operator<(const T& rhs) const;
139 bool operator>(const SVector<T,D>& rhs) const;
141 bool operator<(const SVector<T,D>& rhs) const;
143 template <class A>
144 bool operator>(const Expr<A,T,D>& rhs) const;
146 template <class A>
147 bool operator<(const Expr<A,T,D>& rhs) const;
148
150 const T& operator[](unsigned int i) const;
152 const T& operator()(unsigned int i) const;
154 T& operator[](unsigned int i);
156 T& operator()(unsigned int i);
157
161 template <class A>
166 template <class A>
171 template <class A>
176 template <class A>
178
179
184 template <unsigned int D2>
185 SVector<T,D>& place_at(const SVector<T,D2>& rhs, const unsigned int row);
187 template <class A, unsigned int D2>
188 SVector<T,D>& place_at(const Expr<A,T,D2>& rhs, const unsigned int row);
190 std::ostream& print(std::ostream& os) const;
191
192private:
193 T array[D];
194}; // end of class SVector
195
196//==============================================================================
197// operator<<
198//==============================================================================
199template <class T, unsigned int D>
200std::ostream& operator<<(std::ostream& os, const SVector<T,D>& rhs);
201
202// include implementation file
203#include "SVector.icc"
204
205// include operators and functions
206#include "UnaryOperators.hh"
207#include "BinaryOperators.hh"
208#include "Functions.hh"
209#endif
std::ostream & operator<<(std::ostream &os, const SVector< T, D > &rhs)
void a()
Definition: check_aligned.C:59
Definition: Expression.hh:43
Definition: SVector.hh:51
const T & operator()(unsigned int i) const
read-only access
SVector(const T &a1, const T &a2, const T &a3)
SVector(const T &a1, const T &a2)
T apply(unsigned int i) const
access the parse tree
SVector(const T *a, unsigned int len)
fill from array, len must be equal to D!
SVector(const T &rhs)
bool operator!=(const T &rhs) const
element wise comparison
SVector(const T &a1, const SVector< T, D1 > &rhs)
$D1\le D-1$ required!
SVector< T, D > & operator=(const T &rhs)
SVector(const T &a1, const T &a2, const T &a3, const T &a4, const T &a5, const T &a6, const T &a7, const T &a8, const T &a9, const T &a10)
T & operator[](unsigned int i)
read/write access
bool operator==(const Expr< A, T, D > &rhs) const
element wise comparison
bool operator==(const T &rhs) const
element wise comparison
T * Array()
return pointer to internal array
bool operator!=(const SVector< T, D > &rhs) const
element wise comparison
SVector< T, D > & operator/=(const SVector< T, D > &rhs)
SVector< T, D > & operator-=(const Expr< A, T, D > &rhs)
bool operator>(const T &rhs) const
element wise comparison
SVector< T, D > & operator+=(const SVector< T, D > &rhs)
SVector(const T &a1, const T &a2, const T &a3, const T &a4, const T &a5, const T &a6, const T &a7, const T &a8, const T &a9)
SVector(const T &a1, const T &a2, const T &a3, const T &a4, const T &a5, const T &a6, const T &a7)
static unsigned int dim()
return dimension $D$
Definition: SVector.hh:110
T & operator()(unsigned int i)
read/write access
bool operator<(const Expr< A, T, D > &rhs) const
element wise comparison
bool operator>(const SVector< T, D > &rhs) const
element wise comparison
SVector(const T &a1, const T &a2, const T &a3, const T &a4, const T &a5)
SVector(const T &a1, const T &a2, const T &a3, const T &a4, const T &a5, const T &a6)
SVector< T, D > & operator*=(const Expr< A, T, D > &rhs)
SVector(const T &a1, const T &a2, const T &a3, const T &a4, const T &a5, const T &a6, const T &a7, const T &a8)
T array[D]
Definition: SVector.hh:193
SVector< T, D > & place_at(const Expr< A, T, D2 > &rhs, const unsigned int row)
place a sub-vector starting at <row>
SVector< T, D > & unit()
transform vector into a vector of lenght 1
std::ostream & print(std::ostream &os) const
used by operator<<()
SVector(const Expr< A, T, D > &rhs)
SVector< T, D > & operator=(const Expr< A, T, D > &rhs)
bool operator!=(const Expr< A, T, D > &rhs) const
element wise comparison
SVector< T, D > & place_at(const SVector< T, D2 > &rhs, const unsigned int row)
place a sub-vector starting at <row>
SVector(const T &a1, const T &a2, const T &a3, const T &a4)
T value_type
Definition: SVector.hh:55
SVector< T, D > & operator/=(const Expr< A, T, D > &rhs)
bool operator<(const T &rhs) const
element wise comparison
SVector< T, D > & operator-=(const SVector< T, D > &rhs)
bool operator>(const Expr< A, T, D > &rhs) const
element wise comparison
SVector< T, D > & operator+=(const Expr< A, T, D > &rhs)
SVector(const SVector< T, D > &rhs)
SVector(const SVector< T, D1 > &rhs)
$D1\le D$ required!
bool operator<(const SVector< T, D > &rhs) const
element wise comparison
const T & operator[](unsigned int i) const
read-only access
SVector< T, D > & operator*=(const SVector< T, D > &rhs)
bool operator==(const SVector< T, D > &rhs) const
element wise comparison
const T * Array() const
return read-only pointer to internal array