vector3D.cpp

Go to the documentation of this file.
00001 
00015 #include <dlrNumeric/vector3D.h>
00016 
00017 namespace dlr {
00018 
00019   namespace numeric {
00020     
00021     Vector3D
00022     operator+(const Vector3D& vector0, const Vector3D& vector1)
00023     {
00024       return Vector3D(vector0.x() + vector1.x(),
00025                       vector0.y() + vector1.y(),
00026                       vector0.z() + vector1.z());
00027     }
00028   
00029     Vector3D
00030     operator-(const Vector3D& vector0, const Vector3D& vector1)
00031     {
00032       return Vector3D(vector0.x() - vector1.x(),
00033                       vector0.y() - vector1.y(),
00034                       vector0.z() - vector1.z());
00035     }
00036   
00037     Vector3D
00038     operator*(const Vector3D& vector0, const Vector3D& vector1)
00039     {
00040       return Vector3D(vector0.x() * vector1.x(),
00041                       vector0.y() * vector1.y(),
00042                       vector0.z() * vector1.z());
00043     }
00044   
00045     Vector3D
00046     operator/(const Vector3D& vector0, const Vector3D& vector1)
00047     {
00048       return Vector3D(vector0.x() / vector1.x(),
00049                       vector0.y() / vector1.y(),
00050                       vector0.z() / vector1.z());
00051     }
00052   
00053     Vector3D
00054     operator+(const Vector3D& vector0, double scalar)
00055     {
00056       return Vector3D(vector0.x() + scalar,
00057                       vector0.y() + scalar,
00058                       vector0.z() + scalar);
00059     }
00060 
00061     Vector3D
00062     operator-(const Vector3D& vector0, double scalar)
00063     {
00064       return Vector3D(vector0.x() - scalar,
00065                       vector0.y() - scalar,
00066                       vector0.z() - scalar);
00067     }
00068 
00069     Vector3D
00070     operator*(const Vector3D& vector0, double scalar)
00071     {
00072       return Vector3D(vector0.x() * scalar,
00073                       vector0.y() * scalar,
00074                       vector0.z() * scalar);
00075     }
00076   
00077     Vector3D
00078     operator/(const Vector3D& vector0, double scalar)
00079     {
00080       return Vector3D(vector0.x() / scalar,
00081                       vector0.y() / scalar,
00082                       vector0.z() / scalar);
00083     }
00084 
00085     bool
00086     operator==(const Vector3D& vector0, const Vector3D& vector1)
00087     {
00088       return((vector0.x() == vector1.x()) &&
00089              (vector0.y() == vector1.y()) &&
00090              (vector0.z() == vector1.z()));
00091     }
00092 
00093     bool
00094     operator!=(const Vector3D& vector0, const Vector3D& vector1)
00095     {
00096       return(!operator==(vector0, vector1));
00097     }
00098 
00099     std::ostream&
00100     operator<<(std::ostream& stream, const Vector3D& vector0)
00101     {
00102       stream << "Vector3D(" << vector0.x() << ", " << vector0.y() << ", "
00103              << vector0.z() << ")";
00104       return stream;
00105     }
00106 
00107     std::istream&
00108     operator>>(std::istream& stream, Vector3D& vector0)
00109     {
00110       const char intro[] = "Vector3D(";
00111       const char intermission[] = ",";
00112       const char outro[] = ")";
00113       double x, y, z;
00114       char inChar;
00115       size_t index;
00116 
00117       for(index = 0; index < strlen(intro); ++index) {
00118         inChar = 0;
00119         stream >> inChar;
00120         if(inChar != intro[index]) {
00121           // Hmm.  g++ diverges from the standard?
00122           // stream.clear(ios_base::failbit);
00123           stream.clear(std::ios::failbit);
00124           return stream;
00125         }
00126       }
00127       stream >> x;
00128       for(index = 0; index < strlen(intermission); ++index) {
00129         inChar = 0;
00130         stream >> inChar;
00131         if(inChar != intermission[index]) {
00132           // stream.clear(ios_base::failbit);
00133           stream.clear(std::ios::failbit);
00134           return stream;
00135         }
00136       }
00137       stream >> y;
00138       for(index = 0; index < strlen(intermission); ++index) {
00139         inChar = 0;
00140         stream >> inChar;
00141         if(inChar != intermission[index]) {
00142           // stream.clear(ios_base::failbit);
00143           stream.clear(std::ios::failbit);
00144           return stream;
00145         }
00146       }
00147       stream >> z;
00148       for(index = 0; index < strlen(outro); ++index) {
00149         inChar = 0;
00150         stream >> inChar;
00151         if(inChar != outro[index]) {
00152           // stream.clear(ios_base::failbit);
00153           stream.clear(std::ios::failbit);
00154           return stream;
00155         }
00156       }
00157       if(stream) {
00158         vector0.setValue(x, y, z);
00159       }
00160       return stream;
00161     }
00162 
00163   } // namespace numeric
00164 
00165 } // namespace dlr

Generated on Wed Nov 25 00:42:43 2009 for dlrUtilities Utility Library by  doxygen 1.5.8