index3D.cpp

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

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