00001 #ifndef Impala_Core_Array_Element_Vec2Real64_h
00002 #define Impala_Core_Array_Element_Vec2Real64_h
00003
00004 #include <iostream>
00005 #include "Util/Math.h"
00006 #include "Basis/NativeTypes.h"
00007
00008 namespace Impala
00009 {
00010 namespace Core
00011 {
00012 namespace Array
00013 {
00014 namespace Element
00015 {
00016
00017
00020 class Vec2Real64 {
00021 public:
00022
00024 Vec2Real64()
00025 {
00026 }
00027
00029 Vec2Real64(Real64 x, Real64 y)
00030 {
00031 mValues[0] = x;
00032 mValues[1] = y;
00033 }
00034
00036 Vec2Real64(Real64 v)
00037 {
00038 mValues[0] = v;
00039 mValues[1] = v;
00040 }
00041
00043 Vec2Real64(const Vec2Real64& v)
00044 {
00045 mValues[0] = v.mValues[0];
00046 mValues[1] = v.mValues[1];
00047 }
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00059 Real64
00060 X() const
00061 {
00062 return mValues[0];
00063 }
00064
00066 Real64
00067 Y() const
00068 {
00069 return mValues[1];
00070 }
00071
00073 Real64
00074 getValue(int dimension) const
00075 {
00076 return mValues[dimension - 1];
00077 }
00078
00080 int
00081 operator==(const Vec2Real64& v) const
00082 {
00083 return (mValues[0] == v.mValues[0]) && (mValues[1] == v.mValues[1]);
00084 }
00085
00087 int
00088 operator!=(const Vec2Real64& v) const
00089 {
00090 return (mValues[0] != v.mValues[0]) || (mValues[1] != v.mValues[1]);
00091 }
00092
00094 int
00095 operator<(const Vec2Real64& v) const
00096 {
00097 return (fabs(mValues[0]) + fabs(mValues[1]) ) <
00098 (fabs(v.mValues[0]) + fabs(v.mValues[1]) );
00099 }
00100
00102 int
00103 operator<=(const Vec2Real64& v) const
00104 {
00105 return (fabs(mValues[0]) + fabs(mValues[1]) ) <=
00106 (fabs(v.mValues[0]) + fabs(v.mValues[1]) );
00107 }
00108
00110 int
00111 operator> (const Vec2Real64& v) const
00112 {
00113 return (fabs(mValues[0]) + fabs(mValues[1]) ) >
00114 (fabs(v.mValues[0]) + fabs(v.mValues[1]));
00115 }
00116
00118 int
00119 operator>=(const Vec2Real64& v) const
00120 {
00121 return (fabs(mValues[0]) + fabs(mValues[1]) ) >=
00122 (fabs(v.mValues[0]) + fabs(v.mValues[1]));
00123 }
00124
00126 Vec2Real64&
00127 operator+=(const Vec2Real64& v)
00128 {
00129 mValues[0] += v.mValues[0];
00130 mValues[1] += v.mValues[1];
00131 return *this;
00132 }
00133
00135 Vec2Real64&
00136 operator-=(const Vec2Real64& v)
00137 {
00138 mValues[0] -= v.mValues[0];
00139 mValues[1] -= v.mValues[1];
00140 return *this;
00141 }
00142
00144 Vec2Real64&
00145 operator*=(const Vec2Real64& v)
00146 {
00147 mValues[0] *= v.mValues[0];
00148 mValues[1] *= v.mValues[1];
00149 return *this;
00150 }
00151
00153 Vec2Real64&
00154 operator*=(double v)
00155 {
00156 mValues[0] *= v;
00157 mValues[1] *= v;
00158 return *this;
00159 }
00160
00162 Vec2Real64&
00163 operator/=(const Vec2Real64& v)
00164 {
00165 mValues[0] /= v.mValues[0];
00166 mValues[1] /= v.mValues[1];
00167 return *this;
00168 }
00169
00171 Vec2Real64&
00172 operator/=(double d)
00173 {
00174 mValues[0] /= d;
00175 mValues[1] /= d;
00176 return *this;
00177 }
00178
00179 private:
00180 Real64 mValues[2];
00181 };
00182
00183 inline std::ostream&
00184 operator<<(std::ostream& os, const Vec2Real64& v)
00185 {
00186 return os << "(" << v.X() << "," << v.Y() << ")";
00187 }
00188
00189 inline Vec2Real64
00190 operator+(const Vec2Real64& v1, const Vec2Real64& v2)
00191 {
00192 return Vec2Real64(v1.X() + v2.X(), v1.Y() + v2.Y());
00193 }
00194
00195 inline Vec2Real64
00196 operator-(const Vec2Real64& v1, const Vec2Real64& v2)
00197 {
00198 return Vec2Real64(v1.X() - v2.X(), v1.Y() - v2.Y());
00199 }
00200
00201 inline Vec2Real64
00202 operator*(const Vec2Real64& v1, const Vec2Real64& v2)
00203 {
00204 return Vec2Real64(v1.X() * v2.X(), v1.Y() * v2.Y());
00205 }
00206
00207 inline Vec2Real64
00208 operator*(const Vec2Real64& v1, double d)
00209 {
00210 return Vec2Real64(v1.X() * d, v1.Y() * d);
00211 }
00212
00213 inline Vec2Real64
00214 operator/(const Vec2Real64& v1, const Vec2Real64& v2)
00215 {
00216 return Vec2Real64(v1.X() / v2.X(), v1.Y() / v2.Y());
00217 }
00218
00219 inline Vec2Real64
00220 operator/(const Vec2Real64& v1, double d)
00221 {
00222 return Vec2Real64(v1.X() / d, v1.Y() / d);
00223 }
00224
00225 }
00226 }
00227 }
00228 }
00229
00230 #endif