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