00001
00002
00004 #ifdef WIN32
00005 #pragma warning(disable:4786)
00006 #endif
00007 #include "GenericFileReader2D.h"
00008 #include "Tools.h"
00010
00012 namespace Interpolator
00013 {
00015 GenericFileReader2D::GenericFileReader2D()
00016 {
00017 _mVector = new vector< double* >();
00018 }
00019
00021 GenericFileReader2D::~GenericFileReader2D()
00022 {
00023 for (int i=0;i< (signed)_mVector->size();i++)
00024 {
00025 double * pColumn = getColumn(i);
00026 if (pColumn)
00027 {
00028 delete [] pColumn;
00029 pColumn = 0;
00030 }
00031 }
00032
00033 DESTRUCTION(_mVector);
00034 }
00035
00038 GenericFileReader2D::GenericFileReader2D(const std::string& sFileName) : FileReader(sFileName)
00039 {
00040 _mVector = new vector< double* >();
00041 Parse();
00042 }
00043
00048 GenericFileReader2D::GenericFileReader2D(const std::string& sFileName,long lNbColumns,long lNbLines) : FileReader(sFileName,lNbColumns,lNbLines)
00049 {
00050 _mVector = new vector< double* >();
00051 Parse();
00052 }
00053
00054
00056 void GenericFileReader2D::Parse()
00057 {
00058
00059 int iNbLines = getNbData();
00060 if(Interpolator::_verb == true) cout << "NbLines : " << iNbLines << endl;
00061
00062 int iNbColumns = getNbVariables();
00063 if(Interpolator::_verb == true) cout << "NbColumns : " << iNbColumns << endl;
00064
00065 _lNbDataX = iNbLines;
00066 _lNbDataY = iNbColumns;
00067 _lNbDataZ = iNbLines*iNbColumns;
00068
00069
00070
00071 std::string sColumnName;
00072
00073 int i,j;
00074
00075
00076 _sXName = extractString();
00077 _sYName = extractString();
00078 _sZName = extractString();
00079 if(Interpolator::_verb == true) cout << "Name X --> " << _sXName << endl;
00080 if(Interpolator::_verb == true) cout << "Name Y --> " << _sYName << endl;
00081 if(Interpolator::_verb == true) cout << "Name Z --> " << _sZName << endl;
00082
00083
00084 _mVector->push_back(new double[_lNbDataX]);
00085 _mVector->push_back(new double[_lNbDataY]);
00086 _mVector->push_back(new double[_lNbDataZ]);
00087
00088
00089
00090
00091 double dValue;
00092
00093
00094 for (j=0;j<_lNbDataY;j++)
00095 {
00096 dValue = extractDouble();
00097 ((*_mVector)[1])[j] = dValue;
00098 }
00099
00100
00101 for (i=0;i<_lNbDataX;i++)
00102 {
00103 for (j=0;j<_lNbDataY+1;j++)
00104 {
00105 dValue = extractDouble();
00106 if (j == 0)
00107 {
00108 ((*_mVector)[0])[i] = dValue;
00109 }
00110 else
00111 {
00112 ((*_mVector)[2])[j+i*_lNbDataY-1] = dValue;
00113 }
00114 }
00115 }
00116
00117
00118
00119 }
00120
00122 std::string GenericFileReader2D::getDataXName()
00123 {
00124 return _sXName;
00125 }
00126
00128 std::string GenericFileReader2D::getDataYName()
00129 {
00130 return _sYName;
00131 }
00132
00134 std::string GenericFileReader2D::getDataZName()
00135 {
00136 return _sZName;
00137 }
00138
00140 double* GenericFileReader2D::getDataX() const
00141 {
00142 return getColumn(0);
00143 }
00144
00146 double* GenericFileReader2D::getDataY() const
00147 {
00148 return getColumn(1);
00149 }
00150
00152 double* GenericFileReader2D::getDataZ() const
00153 {
00154 return getColumn(2);
00155 }
00156
00160 double* GenericFileReader2D::getColumn(int iColumnNumber) const
00161 {
00162 if ((iColumnNumber < 0) || (iColumnNumber >= (int)_mVector->size())) throw IndexOutOfBoundException("iColumnNumber",iColumnNumber,0,getNbData(),"GenericFileReader2D::getColumn(int iColumnNumber)",__FILE__,__LINE__);
00163 if (_mVector == 0) throw NullPointerException("_mVector","GenericFileReader2D::getColumn(int iColumnNumber)",__FILE__,__LINE__);
00164 return ((*_mVector)[iColumnNumber]);
00165 }
00166
00168 long GenericFileReader2D::getNbDataX()
00169 {
00170 return _lNbDataX;
00171 }
00172
00174 long GenericFileReader2D::getNbDataY()
00175 {
00176 return _lNbDataY;
00177 }
00178
00180 long GenericFileReader2D::getNbDataZ()
00181 {
00182 return _lNbDataZ;
00183 }
00184
00186 void GenericFileReader2D::displayAll()
00187 {
00188 int k;
00189 for (int i=0;i<getNbDataX();i++)
00190 {
00191 for (int j=0;j<getNbDataY();j++)
00192 {
00193 k = i*_lNbDataY+j;
00194 if(Interpolator::_verb == true) cout << "(i=" << i << ",j=" << j << ",k=" << k << ")-->[" << getDataX()[i] << "," << getDataY()[j] << "," << getDataZ()[k] << "]" << endl;
00195 }
00196 }
00197
00198 }
00199
00200 }
00201
00202