ESyS-Particle  2.3.2
Vec3L.h
Go to the documentation of this file.
1 
2 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 
14 #ifndef ESYS_LSMVEC3L_H
15 #define ESYS_LSMVEC3L_H
16 
17 #include <iostream>
18 
19 namespace esys
20 {
21 
22  namespace lsm
23  {
24 
28  class Vec3L
29  {
30  public:
31  typedef long Long;
32 
34  {
35  m_data[0] = 0;
36  m_data[1] = 0;
37  m_data[2] = 0;
38  }
39 
40  Vec3L(Long x, Long y, Long z)
41  {
42  m_data[0] = x;
43  m_data[1] = y;
44  m_data[2] = z;
45  }
46 
47  Vec3L(const Vec3L &vec)
48  {
49  m_data[0] = vec.m_data[0];
50  m_data[1] = vec.m_data[1];
51  m_data[2] = vec.m_data[2];
52  }
53 
55  {
56  }
57 
58  Vec3L &operator=(const Vec3L &vec)
59  {
60  m_data[0] = vec.m_data[0];
61  m_data[1] = vec.m_data[1];
62  m_data[2] = vec.m_data[2];
63 
64  return *this;
65  }
66 
67  bool operator==(const Vec3L &vec) const
68  {
69  return
70  (
71  (m_data[0] == vec.m_data[0])
72  &&
73  (m_data[1] == vec.m_data[1])
74  &&
75  (m_data[2] == vec.m_data[2])
76  );
77  }
78 
79  Long &operator[](int idx)
80  {
81  return m_data[idx];
82  }
83 
84  const Long &operator[](int idx) const
85  {
86  return m_data[idx];
87  }
88 
89  Vec3L operator-(Long val) const
90  {
91  return Vec3L(m_data[0]-val, m_data[1]-val, m_data[2]-val);
92  }
93 
94  Vec3L operator+(Long val) const
95  {
96  return Vec3L(m_data[0]+val, m_data[1]+val, m_data[2]+val);
97  }
98 
99  const Long &X() const
100  {
101  return m_data[0];
102  }
103 
104  Long &X()
105  {
106  return m_data[0];
107  }
108 
109  const Long &Y() const
110  {
111  return m_data[1];
112  }
113 
114  Long &Y()
115  {
116  return m_data[1];
117  }
118 
119  const Long &Z() const
120  {
121  return m_data[2];
122  }
123 
124  Long &Z()
125  {
126  return m_data[2];
127  }
128 
129  Vec3L min(const Vec3L &vec) const
130  {
131  return
132  Vec3L
133  (
134  std::min(m_data[0], vec.m_data[0]),
135  std::min(m_data[1], vec.m_data[1]),
136  std::min(m_data[2], vec.m_data[2])
137  );
138  }
139 
140  Vec3L max(const Vec3L &vec) const
141  {
142  return
143  Vec3L
144  (
145  std::max(m_data[0], vec.m_data[0]),
146  std::max(m_data[1], vec.m_data[1]),
147  std::max(m_data[2], vec.m_data[2])
148  );
149  }
150 
151  private:
153  };
154 
155  inline std::ostream &operator<<(std::ostream &oStream, const Vec3L &vec)
156  {
157  oStream << vec.X() << " " << vec.Y() << " " << vec.Z();
158  return oStream;
159  }
160  }
161 }
162 
163 #endif