Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/lina/vec2

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/tools/lina/vec2 (Version 11.3.0) and /externals/g4tools/include/tools/lina/vec2 (Version 11.2.2)


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