00001 #ifndef Impala_Core_Array_Pattern_Array2D_h
00002 #define Impala_Core_Array_Pattern_Array2D_h
00003 
00004 
00005 namespace Impala
00006 {
00007 namespace Core
00008 {
00009 namespace Array
00010 {
00011 namespace Pattern
00012 {
00013 
00014 
00015 
00016 template <class T>
00017 class Array2D {
00018 private:
00019     unsigned dims[2];
00020     T *ptr;
00021     Array2D();
00022 
00023 public:
00024 
00025     Array2D(const Array2D &);
00026     Array2D & operator = (Array2D &arg)
00027     {
00028         for (unsigned i=0; i<dims[0]*dims[1]; i++) ptr[i]=arg[i];
00029         return *this;
00030     };
00031     ~Array2D() { delete []ptr; }
00032     Array2D(unsigned x, unsigned y, const T &val) {
00033         dims[0]=x;
00034         dims[1]=y;
00035         unsigned s=x*y;
00036         ptr = new T[s];
00037         for (unsigned i=0; i<s; i++) ptr[i]=val;
00038     }
00039     T & operator () (unsigned x, unsigned y) {
00040         return ptr[x+dims[0]*y];
00041     }
00042 
00043     T & operator [] (unsigned i) {
00044         return ptr[i];
00045     }
00046 
00047 
00048     int getDim(int n)
00049     {
00050         return dims[n];
00051     }
00052 
00053     
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 
00080 };
00081 
00082 } 
00083 } 
00084 } 
00085 } 
00086 
00087 #endif