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