00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef TNT_ARRAY2D_UTILS_H
00022 #define TNT_ARRAY2D_UTILS_H
00023
00024 #include <cstdlib>
00025 #include <cassert>
00026
00027 namespace TNT
00028 {
00029
00030
00038 template <class T>
00039 std::ostream& operator<<(std::ostream &s, const Array2D<T> &A)
00040 {
00041 int M=A.dim1();
00042 int N=A.dim2();
00043
00044 s << M << " " << N << "\n";
00045
00046 for (int i=0; i<M; i++)
00047 {
00048 for (int j=0; j<N; j++)
00049 {
00050 s << A[i][j] << " ";
00051 }
00052 s << "\n";
00053 }
00054
00055
00056 return s;
00057 }
00058
00075 template <class T>
00076 std::istream& operator>>(std::istream &s, Array2D<T> &A);
00077
00089 template <class T>
00090 Array2D<T> operator+(const Array2D<T> &A, const Array2D<T> &B);
00091
00103 template <class T>
00104 Array2D<T> operator-(const Array2D<T> &A, const Array2D<T> &B);
00105
00118 template <class T>
00119 Array2D<T> operator*(const Array2D<T> &A, const Array2D<T> &B);
00120
00121
00122
00134 template <class T>
00135 Array2D<T> operator/(const Array2D<T> &A, const Array2D<T> &B);
00136
00137
00138
00139
00140
00152 template <class T>
00153 Array2D<T>& operator+=(Array2D<T> &A, const Array2D<T> &B);
00154
00155
00156
00168 template <class T>
00169 Array2D<T>& operator-=(Array2D<T> &A, const Array2D<T> &B);
00170
00171
00172
00184 template <class T>
00185 Array2D<T>& operator*=(Array2D<T> &A, const Array2D<T> &B);
00186
00187
00188
00189
00190
00202 template <class T>
00203 Array2D<T>& operator/=(Array2D<T> &A, const Array2D<T> &B);
00204
00218 template <class T>
00219 Array2D<T> matmult(const Array2D<T> &A, const Array2D<T> &B);
00220
00221 }
00222
00223 #endif