GenericFileReader2D.cpp

Go to the documentation of this file.
00001 // GenericFileReader2D.cpp: implementation of the GenericFileReader2D class.
00002 //
00004 #ifdef WIN32 
00005 #pragma warning(disable:4786)
00006 #endif
00007 #include "GenericFileReader2D.h"
00008 #include "Tools.h"
00010 // Construction/Destruction
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() // throw (ParseException)
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 //Reading of the first line to extract the variables names
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 //Columns 0 of the vector --> the X values
00089 //Columns 1 of the vector --> the Y values
00090 //Columns 2 of the vector --> the Z values (the matrix is stored in line like a vector.
00091 double dValue;
00092 //Extract the Y values and stores them in the column 1 (it begins at 0)
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 //displayAll();
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   // throw (IndexOutOfBoundException,NullPointerException)
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 

Generated on Tue Apr 14 09:50:27 2009 for Interpolator Library by  doxygen 1.4.5