00001
00029 #ifndef __VETLIB_VETVECTOR_H__
00030 #define __VETLIB_VETVECTOR_H__
00031
00032 #include "vetDefs.h"
00033 #include <stdio.h>
00034 #include <fstream>
00035
00036
00037 template<class T>
00038 class vetVector
00039 {
00040
00041 protected:
00042
00043 unsigned int items;
00044
00045 T* data;
00046 T* dataSum;
00047
00048
00049 public:
00050
00051 vetVector()
00052 {
00053 items = 0;
00054 data = NULL;
00055 dataSum = NULL;
00056 }
00057
00058 vetVector(unsigned int itemCount)
00059 {
00060 data = NULL;
00061 dataSum = NULL;
00062 setDim(itemCount);
00063 }
00064
00065 vetVector(const char* filename)
00066 {
00067 data = NULL;
00068 dataSum = NULL;
00069 loadFromFile(filename);
00070 }
00071
00072 vetVector(itemCount, T* data_ptr)
00073 {
00074 items = itemCount;
00075
00076 data = data_ptr;
00077
00078 dataSum = new T;
00079 for (int is=0; is < columns * rows; is++)
00080 dataSum += data[is];
00081
00082 }
00083
00084 ~vetVector()
00085 {
00086 if ( data != NULL )
00087 delete [] data;
00088
00089 if ( dataSum != NULL )
00090 delete dataSum;
00091 }
00092
00093 void setDim(unsigned int itemCount)
00094 {
00095 if ( data != NULL )
00096 delete [] data;
00097
00098 if ( dataSum != NULL )
00099 delete dataSum;
00100
00101 items = itemCount;
00102
00103 data = new T [items];
00104 dataSum = new T;
00105 }
00106
00107 unsigned int getItemsCount() { return items; };
00108 T getItemsSum() { return *dataSum; };
00109
00110 T* dump_data() { return data; };
00111 T* dump_dataSum() { return dataSum; };
00112
00113 VETRESULT setValue(unsigned int itemIndex, T& value)
00114 {
00115 if ( itemIndex < 0 || itemIndex >= items )
00116 return VETRET_PARAM_ERR;
00117
00118 if ( data == NULL )
00119 return VETRET_ILLEGAL_USE;
00120
00121 dataSum -= data[ y * rows + x ];
00122 data[ itemIndex ] = value;
00123 dataSum += value;
00124
00125 return VETRET_OK;
00126 }
00127
00128 T& getValue(unsigned int itemIndex)
00129 {
00130 if ( itemIndex < 0 || itemIndex >= items )
00131 throw "Out of bounds.";
00132
00133 if ( data == NULL )
00134 throw "Empty vector.";
00135
00136 return data[ itemIndex ];
00137 }
00138
00139 T& getValueMax()
00140 {
00141 if ( data == NULL )
00142 throw "Empty table.";
00143
00144 T curMax = data[0];
00145
00146 for (int i=0; i < items; i++)
00147 if ( data[i] > curMax )
00148 curMax = data[i];
00149
00150 return curMax;
00151 }
00152
00153 T& getValueMin()
00154 {
00155 if ( data == NULL )
00156 throw "Empty table.";
00157
00158 T curMin = data[0];
00159
00160 for (int i=0; i < items; i++)
00161 if ( data[i] < curMax )
00162 curMax = data[i];
00163
00164 return curMax;
00165 }
00166
00167 void clearWith(T& value)
00168 {
00169 if ( data == NULL )
00170 throw "Empty table.";
00171
00172 for (int i=0; i < items; i++)
00173 data[i] = value;
00174
00175 dataSum = items * value;
00176
00177 }
00178
00179
00180
00181
00182
00183
00184
00185 VETRESULT saveToFile(const char* filename)
00186 {
00187 FILE *fp;
00188 int ret = VETRET_OK;
00189
00190 if ( data == NULL )
00191 return VETRET_ILLEGAL_USE;
00192
00193 if ( (fp = fopen(filename, "w")) == NULL )
00194 return VETRET_PARAM_ERR;
00195
00196
00197 if( fprintf(fp, "%d\n", items) == EOF )
00198 {
00199 fclose(fp);
00200 return VETRET_INTERNAL_ERR;
00201 }
00202
00203 for (int i=0; i < items; i++)
00204 if ( fprintf(fp, "%f ", (float)data[i]) == EOF)
00205 ret = VETRET_INTERNAL_ERR;
00206
00207 if ( fprintf(fp, "\n") == EOF )
00208 ret = VETRET_INTERNAL_ERR;
00209
00210 fclose(fp);
00211 return ret ;
00212 }
00213
00214
00215
00216 VETRESULT loadFromFile(const char* filename)
00217 {
00218 FILE *fp;
00219 int ret = VETRET_OK;
00220
00221 if ( (fp=fopen(filename,"r")) == NULL )
00222 return VETRET_PARAM_ERR;
00223
00224 unsigned int newRows = 0;
00225 unsigned int newCols = 0;
00226
00227 if ( fscanf(fp,"%u",&items) == EOF )
00228 {
00229 fclose(fp);
00230 return VETRET_INTERNAL_ERR;
00231 }
00232
00233 if ( items < 1 )
00234 {
00235 fclose(fp);
00236 return VETRET_INTERNAL_ERR;
00237 }
00238
00239 setDim(items);
00240
00241 float tmpValue;
00242
00243 for (int i=0; i < items; i++)
00244 if( fscanf(fp, "%f", &tmpValue) == EOF )
00245 ret = VETRET_INTERNAL_ERR;
00246 else
00247 data[i] = (T)tmpValue;
00248
00249 for (int is=0; is < items; is++)
00250 dataSum += data[is];
00251
00252 return ret;
00253 }
00254
00255
00256 };
00257
00258 #endif //__VETLIB_VETVECTOR_H__
00259