ESyS-Particle
4.0.1
|
00001 00002 // // 00003 // Copyright (c) 2003-2011 by The University of Queensland // 00004 // Earth Systems Science Computational Centre (ESSCC) // 00005 // http://www.uq.edu.au/esscc // 00006 // // 00007 // Primary Business: Brisbane, Queensland, Australia // 00008 // Licensed under the Open Software License version 3.0 // 00009 // http://www.opensource.org/licenses/osl-3.0.php // 00010 // // 00012 00013 00014 #ifndef ESYS_LSMVEC3L_H 00015 #define ESYS_LSMVEC3L_H 00016 00017 #include <iostream> 00018 00019 namespace esys 00020 { 00021 00022 namespace lsm 00023 { 00024 00028 class Vec3L 00029 { 00030 public: 00031 typedef long Long; 00032 00033 Vec3L() 00034 { 00035 m_data[0] = 0; 00036 m_data[1] = 0; 00037 m_data[2] = 0; 00038 } 00039 00040 Vec3L(Long x, Long y, Long z) 00041 { 00042 m_data[0] = x; 00043 m_data[1] = y; 00044 m_data[2] = z; 00045 } 00046 00047 Vec3L(const Vec3L &vec) 00048 { 00049 m_data[0] = vec.m_data[0]; 00050 m_data[1] = vec.m_data[1]; 00051 m_data[2] = vec.m_data[2]; 00052 } 00053 00054 ~Vec3L() 00055 { 00056 } 00057 00058 Vec3L &operator=(const Vec3L &vec) 00059 { 00060 m_data[0] = vec.m_data[0]; 00061 m_data[1] = vec.m_data[1]; 00062 m_data[2] = vec.m_data[2]; 00063 00064 return *this; 00065 } 00066 00067 bool operator==(const Vec3L &vec) const 00068 { 00069 return 00070 ( 00071 (m_data[0] == vec.m_data[0]) 00072 && 00073 (m_data[1] == vec.m_data[1]) 00074 && 00075 (m_data[2] == vec.m_data[2]) 00076 ); 00077 } 00078 00079 Long &operator[](int idx) 00080 { 00081 return m_data[idx]; 00082 } 00083 00084 const Long &operator[](int idx) const 00085 { 00086 return m_data[idx]; 00087 } 00088 00089 Vec3L operator-(Long val) const 00090 { 00091 return Vec3L(m_data[0]-val, m_data[1]-val, m_data[2]-val); 00092 } 00093 00094 Vec3L operator+(Long val) const 00095 { 00096 return Vec3L(m_data[0]+val, m_data[1]+val, m_data[2]+val); 00097 } 00098 00099 const Long &X() const 00100 { 00101 return m_data[0]; 00102 } 00103 00104 Long &X() 00105 { 00106 return m_data[0]; 00107 } 00108 00109 const Long &Y() const 00110 { 00111 return m_data[1]; 00112 } 00113 00114 Long &Y() 00115 { 00116 return m_data[1]; 00117 } 00118 00119 const Long &Z() const 00120 { 00121 return m_data[2]; 00122 } 00123 00124 Long &Z() 00125 { 00126 return m_data[2]; 00127 } 00128 00129 Vec3L min(const Vec3L &vec) const 00130 { 00131 return 00132 Vec3L 00133 ( 00134 std::min(m_data[0], vec.m_data[0]), 00135 std::min(m_data[1], vec.m_data[1]), 00136 std::min(m_data[2], vec.m_data[2]) 00137 ); 00138 } 00139 00140 Vec3L max(const Vec3L &vec) const 00141 { 00142 return 00143 Vec3L 00144 ( 00145 std::max(m_data[0], vec.m_data[0]), 00146 std::max(m_data[1], vec.m_data[1]), 00147 std::max(m_data[2], vec.m_data[2]) 00148 ); 00149 } 00150 00151 private: 00152 Long m_data[3]; 00153 }; 00154 00155 inline std::ostream &operator<<(std::ostream &oStream, const Vec3L &vec) 00156 { 00157 oStream << vec.X() << " " << vec.Y() << " " << vec.Z(); 00158 return oStream; 00159 } 00160 }; 00161 }; 00162 00163 #endif