00001 00009 #ifndef MAXVECTOR_CPP_050403 00010 #define MAXVECTOR_CPP_050403 00011 00012 00013 #include <algorithm> 00014 namespace bracz { 00015 00028 template<class T> class maxvector { 00029 private: 00030 T* data; 00031 size_t length; 00032 public: 00033 typedef T value_type; 00034 00035 maxvector() { 00036 length=0; 00037 data=NULL; 00038 } 00039 00040 maxvector(size_t maxsize) { 00041 data=new T[maxsize]; 00042 length=0; 00043 } 00044 00045 ~maxvector() { 00046 delete [] data; 00047 } 00048 00049 T & DINLINE operator[](size_t n) { 00050 return data[n]; 00051 } 00052 00053 typedef T* iterator; 00054 00055 iterator DINLINE begin() { 00056 return data; 00057 } 00058 00059 iterator DINLINE end() { 00060 return data+length; 00061 } 00062 00063 size_t DINLINE size() { 00064 return length; 00065 } 00066 00067 /*void DINLINE push_back(T &d) { 00068 data[length++]=d; 00069 }*/ 00070 00071 /* template<class U> void DINLINE push_back(const U &u) { 00072 data[length++]=T(u); 00073 }*/ 00074 00075 void DINLINE push_back(const T & d) { 00076 data[length++]=d; 00077 } 00078 00079 void DINLINE pop_back() { 00080 length--; 00081 } 00082 00083 bool DINLINE empty() { 00084 return (!length); 00085 } 00086 00087 T & DINLINE back() { 00088 return (data[length-1]); 00089 } 00090 00091 void DINLINE reserve(size_t n) { 00092 T* newdata = new T[n]; 00093 length=std::min(length,n); 00094 for(size_t i=0;i<length;i++) { 00095 newdata[i]=data[i]; 00096 } 00097 delete [] data; 00098 data = newdata; 00099 } 00100 00101 void DINLINE resize(size_t n,const T&d) { 00102 if (!data) 00103 reserve(n); 00104 for (size_t i=length;i<n;++i) { 00105 data[i]=d; 00106 } 00107 length=n; 00108 } 00109 00110 void DINLINE resize(size_t n) { 00111 if (!data) 00112 reserve(n); 00113 length=n; 00114 } 00115 00116 00117 void DINLINE clear() { 00118 length=0; 00119 } 00120 00121 }; 00122 00123 } //namespace bracz 00124 00125 #endif //MAXVECTOR_CPP_050403