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 }
00163
00164 }