g4tools  5.4.0
vec2
Go to the documentation of this file.
1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
2 // See the file tools.license for terms.
3 
4 #ifndef tools_vec2
5 #define tools_vec2
6 
7 #include <cstddef> //size_t
8 
9 #ifdef TOOLS_MEM
10 #include "../mem"
11 #endif
12 
13 namespace tools {
14 
15 template <class T>
16 class vec2 {
17 #ifdef TOOLS_MEM
18  static const std::string& s_class() {
19  static const std::string s_v("tools::vec2");
20  return s_v;
21  }
22 #endif
23 public:
24  typedef T elem_t;
25  unsigned int dimension() const {return 2;}
26 public:
27  vec2(){
28 #ifdef TOOLS_MEM
29  mem::increment(s_class().c_str());
30 #endif
31  m_data[0] = T();
32  m_data[1] = T();
33  }
34  vec2(const T a_vec[2]) {
35 #ifdef TOOLS_MEM
36  mem::increment(s_class().c_str());
37 #endif
38  m_data[0] = a_vec[0];
39  m_data[1] = a_vec[1];
40  }
41  vec2(const T& a0,const T& a1) {
42 #ifdef TOOLS_MEM
43  mem::increment(s_class().c_str());
44 #endif
45  m_data[0] = a0;
46  m_data[1] = a1;
47  }
48  virtual ~vec2() {
49 #ifdef TOOLS_MEM
50  mem::decrement(s_class().c_str());
51 #endif
52  }
53 public:
54  vec2(const vec2& a_from){
55 #ifdef TOOLS_MEM
56  mem::increment(s_class().c_str());
57 #endif
58  m_data[0] = a_from.m_data[0];
59  m_data[1] = a_from.m_data[1];
60  }
61  vec2& operator=(const vec2& a_from) {
62  m_data[0] = a_from.m_data[0];
63  m_data[1] = a_from.m_data[1];
64  return *this;
65  }
66 public:
67  const T& v0() const { return m_data[0];}
68  const T& v1() const { return m_data[1];}
69 
70  void v0(const T& a_value) { m_data[0] = a_value;}
71  void v1(const T& a_value) { m_data[1] = a_value;}
72 
73  const T& x() const {return m_data[0];}
74  const T& y() const {return m_data[1];}
75  T& x() {return m_data[0];}
76  T& y() {return m_data[1];}
77 
78  void set_value(const T& a0,const T& a1) {
79  m_data[0] = a0;
80  m_data[1] = a1;
81  }
82  void set_value(const T aV[2]) {
83  m_data[0] = aV[0];
84  m_data[1] = aV[1];
85  }
86  void value(T& a0,T& a1) const {
87  a0 = m_data[0];
88  a1 = m_data[1];
89  }
90 
91  //bool set_value(unsigned int a_index,const T& a_value) {
92  // if(a_index>=2) return false;
93  // m_[a_index] = a_value;
94  // return true;
95  //}
96 
97  T length(T(*a_sqrt)(T)) const {
98  return a_sqrt(m_data[0]*m_data[0]+m_data[1]*m_data[1]);
99  }
100 
101  T normalize(T(*a_sqrt)(T)) {
102  T norme = length(a_sqrt);
103  if(norme==T()) return T();
104  divide(norme);
105  return norme;
106  }
107 
108  T dot(const vec2& aV) const {
109  return (m_data[0] * aV.m_data[0] +
110  m_data[1] * aV.m_data[1]);
111  }
112 
113  T cross(const vec2& aV) const {
114  return (m_data[0] * aV.m_data[1] - m_data[1] * aV.m_data[0]);
115  }
116 
117  bool equal(const vec2& aV) const {
118  if(m_data[0]!=aV.m_data[0]) return false;
119  if(m_data[1]!=aV.m_data[1]) return false;
120  return true;
121  }
122 
123  bool divide(const T& a_T) {
124  if(a_T==T()) return false;
125  m_data[0] /= a_T;
126  m_data[1] /= a_T;
127  return true;
128  }
129 
130  void add(const vec2& a_v) {
131  m_data[0] += a_v.m_data[0];
132  m_data[1] += a_v.m_data[1];
133  }
134 
135  void add(const T& a0,const T& a1) {
136  m_data[0] += a0;
137  m_data[1] += a1;
138  }
139 
140  void subtract(const vec2& a_v) {
141  m_data[0] -= a_v.m_data[0];
142  m_data[1] -= a_v.m_data[1];
143  }
144 
145  void subtract(const T& a0,const T& a1) {
146  m_data[0] -= a0;
147  m_data[1] -= a1;
148  }
149 
150 public: //operators
151  T& operator[](size_t a_index) {
152  //WARNING : no check on a_index.
153  return m_data[a_index];
154  }
155  const T& operator[](size_t a_index) const {
156  //WARNING : no check on a_index.
157  return m_data[a_index];
158  }
159 
160  vec2 operator+(const vec2& a_v) const {
161  return vec2(m_data[0]+a_v.m_data[0],
162  m_data[1]+a_v.m_data[1]);
163  }
164 
165  vec2 operator-(const vec2& a_v) const {
166  return vec2(m_data[0]-a_v.m_data[0],
167  m_data[1]-a_v.m_data[1]);
168  }
169 
170  vec2 operator*(const T& a_v) const {
171  return vec2(m_data[0]*a_v,
172  m_data[1]*a_v);
173  }
174 
175  bool operator==(const vec2& a_v) const {return equal(a_v);}
176  bool operator!=(const vec2& a_v) const {return !operator==(a_v);}
177 
178 public: //for inlib/sg/sf_vec
179  typedef unsigned int size_type;
180  size_type size() const {return 2;}
181  const T* data() const {return m_data;}
182 public: //for iv2sg
183  const T* getValue() const {return m_data;}
184  void getValue(T& a0,T& a1) const {
185  a0 = m_data[0];
186  a1 = m_data[1];
187  }
188  void setValue(const T& a0,const T& a1) {
189  m_data[0] = a0;
190  m_data[1] = a1;
191  }
192  void setValue(const T aV[2]) {
193  m_data[0] = aV[0];
194  m_data[1] = aV[1];
195  }
196 protected:
197  T m_data[2];
198 
199 private:static void check_instantiation() {vec2<float> v;}
200 };
201 
202 //for sf, mf :
203 template <class T>
204 inline const T* get_data(const vec2<T>& a_v) {return a_v.data();}
205 
206 }
207 
208 #include <ostream>
209 
210 namespace tools {
211 
212 // for sf_vec::dump().
213 template <class T>
214 inline std::ostream& operator<<(std::ostream& a_out,const vec2<T>& a_this){
215  a_out << "x = " << a_this.v0()
216  << ",y = " << a_this.v1();
217  return a_out;
218 }
219 
220 }
221 
222 #endif
tools::vec2::set_value
void set_value(const T aV[2])
Definition: vec2:82
tools::vec2::y
T & y()
Definition: vec2:76
tools::vec2::m_data
T m_data[2]
Definition: vec2:197
tools::vec2::v1
const T & v1() const
Definition: vec2:68
tools::vec2::operator[]
const T & operator[](size_t a_index) const
Definition: vec2:155
tools::vec2::x
T & x()
Definition: vec2:75
tools::vec2::operator!=
bool operator!=(const vec2 &a_v) const
Definition: vec2:176
tools::vec2::operator[]
T & operator[](size_t a_index)
Definition: vec2:151
tools::vec2::x
const T & x() const
Definition: vec2:73
tools::vec2::getValue
const T * getValue() const
Definition: vec2:183
tools::vec2::operator==
bool operator==(const vec2 &a_v) const
Definition: vec2:175
tools::vec2::vec2
vec2()
Definition: vec2:27
tools::vec2::~vec2
virtual ~vec2()
Definition: vec2:48
tools::vec2::add
void add(const vec2 &a_v)
Definition: vec2:130
tools::vec2::value
void value(T &a0, T &a1) const
Definition: vec2:86
tools::vec2::size
size_type size() const
Definition: vec2:180
tools::vec2::dot
T dot(const vec2 &aV) const
Definition: vec2:108
tools::vec2::v0
const T & v0() const
Definition: vec2:67
tools::vec2::dimension
unsigned int dimension() const
Definition: vec2:25
tools::get_data
const T * get_data(const mat4< T > &a_v)
Definition: mat4:494
tools::vec2::getValue
void getValue(T &a0, T &a1) const
Definition: vec2:184
tools::vec2::cross
T cross(const vec2 &aV) const
Definition: vec2:113
tools::vec2::length
T length(T(*a_sqrt)(T)) const
Definition: vec2:97
tools::vec2::operator+
vec2 operator+(const vec2 &a_v) const
Definition: vec2:160
tools::vec2::subtract
void subtract(const T &a0, const T &a1)
Definition: vec2:145
tools::vec2::setValue
void setValue(const T &a0, const T &a1)
Definition: vec2:188
tools::vec2::vec2
vec2(const T a_vec[2])
Definition: vec2:34
tools::vec2::operator-
vec2 operator-(const vec2 &a_v) const
Definition: vec2:165
tools::vec2::add
void add(const T &a0, const T &a1)
Definition: vec2:135
tools::vec2::elem_t
T elem_t
Definition: vec2:24
tools::vec2::divide
bool divide(const T &a_T)
Definition: vec2:123
tools::vec2::equal
bool equal(const vec2 &aV) const
Definition: vec2:117
tools::vec2::vec2
vec2(const T &a0, const T &a1)
Definition: vec2:41
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::vec2::v1
void v1(const T &a_value)
Definition: vec2:71
tools::vec2::operator=
vec2 & operator=(const vec2 &a_from)
Definition: vec2:61
tools::vec2::setValue
void setValue(const T aV[2])
Definition: vec2:192
tools::vec2
Definition: vec2:16
tools::vec2::y
const T & y() const
Definition: vec2:74
tools::vec2::data
const T * data() const
Definition: vec2:181
tools::operator<<
std::ostream & operator<<(std::ostream &a_out, const mat3< T > &a_mtx)
Definition: mat3:226
tools::vec2::subtract
void subtract(const vec2 &a_v)
Definition: vec2:140
tools::vec2::size_type
unsigned int size_type
Definition: vec2:179
tools::vec2::v0
void v0(const T &a_value)
Definition: vec2:70
tools::vec2::vec2
vec2(const vec2 &a_from)
Definition: vec2:54
tools::vec2::set_value
void set_value(const T &a0, const T &a1)
Definition: vec2:78
tools::vec2::operator*
vec2 operator*(const T &a_v) const
Definition: vec2:170
tools::vec2::normalize
T normalize(T(*a_sqrt)(T))
Definition: vec2:101