00001 #ifndef POINT_H
00002 #define POINT_H
00003 #include "SPACE.H"
00004 #include <assert.h>
00005 #include <iostream>
00006 #include <array>
00007
00008 using namespace std;
00009
00010
00011
00012
00013
00014
00015 class Point
00016 {
00017 public:
00018
00019 inline Point();
00020
00021 inline Point(const int a_tuple[DIM]);
00022
00023 inline Point(const array<int,DIM> a_tuple);
00024
00025 inline Point(const Point& a_pt);
00026
00027
00028
00029
00030
00031 inline bool operator<(const Point& a_rhs) const;
00032
00033
00034 inline Point operator+(const Point& a_rhsPoint) const;
00035
00036
00037 inline Point operator-(const Point& a_rhsPoint) const;
00038
00039
00040
00041
00042
00043 inline Point operator/(int a_nref) const;
00044
00045
00046
00047
00048
00049 inline Point operator/(const Point& a_pt) const;
00050
00051
00052 inline Point operator*(int a_nref) const;
00053
00054
00055 inline Point operator*(const Point& a_pt) const;
00056
00057
00058 inline void operator*=(const Point& a_pt);
00059
00060
00061 inline void operator+=(const Point& a_pt);
00062
00063
00064 inline void operator-=(const Point& a_pt);
00065
00066
00067
00068
00069
00070 inline void operator/=(const Point& a_pt);
00071
00072
00073 inline void operator*=(int a_n);
00074
00075
00076 inline void operator+=(int a_n);
00077
00078
00079 inline void operator-=(int a_n);
00080
00081
00082
00083
00084
00085 inline void operator/=(int a_n);
00086
00087
00088
00089
00090
00091 inline bool operator==(const Point& a_pt) const;
00092
00093
00094
00095
00096
00097 inline bool operator!=(const Point& a_pt) const;
00098
00099
00100
00101
00102
00103 inline const int& operator[](const int& a_index) const
00104 {
00105
00106
00107 return m_tuple[a_index];
00108 };
00109
00110
00111 inline int& operator[](const int& a_index)
00112 {
00113
00114
00115 return m_tuple[a_index];
00116 };
00117
00118
00119
00120
00121
00122 void print() const
00123 {
00124 cout << "(";
00125 for (int dir = 0; dir < DIM ; dir++)
00126 {
00127 cout << m_tuple[dir];
00128 if(dir < DIM-1) cout << ",";
00129 }
00130 cout << ")" << endl;
00131 };
00132
00133
00134
00135
00136
00137 inline void print2() const
00138 {
00139 for (int dir = 0; dir < DIM ; dir++)
00140 {
00141 cout << m_tuple[dir] << " " ;
00142 }
00143 };
00144
00145 private:
00146 int m_tuple[DIM];
00147 };
00148
00149
00150
00151
00152
00153 inline Point getBasisV(int idir);
00154
00155
00156 inline Point getZeros();
00157
00158
00159 inline Point getOnes();
00160
00161
00162
00163
00164
00165 inline Point getUnitv(int a_dir)
00166 {
00167 assert((a_dir < DIM) && (a_dir >= 0));
00168 int unitv[DIM];
00169 for (int k = 0 ; k < DIM; k++)
00170 {
00171 unitv[k] = 0;
00172 }
00173 unitv[a_dir] = 1;
00174 return Point(unitv);
00175 };
00176 inline ostream& operator <<(ostream& a_os, const Point& a_pt)
00177 {
00178 a_os << "(" ;
00179 for (int dir = 0; dir < DIM; dir++)
00180 {
00181 a_os << a_pt[dir];
00182 if (dir < DIM-1)
00183 {
00184 a_os << ",";
00185 }
00186 }
00187 a_os << ")";
00188 return a_os;
00189 };
00190 #include "PointImplem.H"
00191 #endif