www.pudn.com > terra-0_7.zip > Array.h
#ifndef ARRAY_INCLUDED // -*- C++ -*- #define ARRAY_INCLUDED // // Array classes // // Taken from gfxTools.h 1.2 #ifndef MAX #define MAX(a,b) (((a)>(b))?(a):(b)) #define MIN(a,b) (((a)>(b))?(b):(a)) #endif templateclass array { protected: T *data; int len; public: array() { data=NULL; len=0; } array(int l) { init(l); } ~array() { free(); } inline void init(int l); inline void free(); inline void resize(int l); inline T& ref(int i); inline T& operator[](int i) { return data[i]; } inline T& operator()(int i) { return ref(i); } inline int length() { return len; } inline int maxLength() { return len; } }; template inline void array ::init(int l) { data = new T[l]; len = l; } template inline void array ::free() { if( data ) { delete[] data; data = NULL; } } template inline T& array ::ref(int i) { #ifdef SAFETY assert( data ); assert( i>=0 && i inline void array ::resize(int l) { T *old = data; data = new T[l]; data = (T *)memcpy(data,old,MIN(len,l)*sizeof(T)); len = l; delete[] old; } template class array2 { protected: T *data; int w, h; public: array2() { data=NULL; w=h=0; } array2(int w, int h) { init(w,h); } ~array2() { free(); } inline void init(int w, int h); inline void free(); inline T& ref(int i, int j); inline T& operator()(int i,int j) { return ref(i,j); } inline int width() { return w; } inline int height() { return h; } }; template inline void array2 ::init(int width,int height) { w = width; h = height; data = new T[w*h]; } template inline void array2 ::free() { if( data ) { delete[] data; data = NULL; } } template inline T& array2 ::ref(int i, int j) { #ifdef SAFETY assert( data ); assert( i>=0 && i =0 && j