ESyS-Particle  4.0.1
Vec3L.h
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