#include "MEDMEM_define.hxx"
#include "MEDMEM_GenDriver.hxx"
-#include "utilities.h"
+#include "MEDMEM_Utilities.hxx"
#include "MEDMEM_STRING.hxx"
#include "MEDMEM_Exception.hxx"
#include "MEDMEM_Unit.hxx"
#include "MEDMEM_Array.hxx"
#include "MEDMEM_Support.hxx"
-//#include "MEDMEM_Field.hxx"
#include "MEDMEM_Mesh.hxx"
+#include "MEDMEM_Compatibility21_22.hxx"
namespace MEDMEM {
template <class T> class FIELD;
-
-// A QD LA CLASSE MED_ALL_ELEMENTS_DRIVER.... :) pour mutualiser le open ..... avec led _medIdt...
-
-/*!
-
- Driver Med for FIELD.
-
- Generic part : implement open and close methods.
-
-*/
+template <class T> class MED_FIELD_RDWR_DRIVER;
+template <class T> class MED_FIELD_RDONLY_DRIVER;
+template <class T> class MED_FIELD_WRONLY_DRIVER;
template <class T> class MED_FIELD_DRIVER : public GENDRIVER
{
protected:
-
FIELD<T> * _ptrField;
- med_2_1::med_idt _medIdt;
string _fieldName;
int _fieldNum;
-
void search_field() ;
-
+
public :
- // all MED cell type ?? Classe de Définition ??
+ // all MED cell type ?? Classe de Définition ??
// static const medGeometryElement all_cell_type[MED_NBR_GEOMETRIE_MAILLE];
-
+
// static const char * const all_cell_type_tab [MED_NBR_GEOMETRIE_MAILLE];
-
+
/*!
Constructor.
*/
- MED_FIELD_DRIVER():GENDRIVER(),
- _ptrField((FIELD<T> *)MED_NULL),_medIdt(MED_INVALID),
- _fieldName(""),_fieldNum(MED_INVALID) {}
+ MED_FIELD_DRIVER():_ptrField((FIELD<T> *) NULL),
+ _fieldName(""),_fieldNum(MED_INVALID)
+ {}
/*!
Constructor.
*/
- MED_FIELD_DRIVER(const string & fileName, FIELD<T> * ptrField,
+ MED_FIELD_DRIVER(const string & fileName, FIELD<T> * ptrField,
MED_EN::med_mode_acces accessMode)
: GENDRIVER(fileName,accessMode),
- _ptrField((FIELD<T> *) ptrField),_medIdt(MED_INVALID),
- _fieldName(fileName),_fieldNum(MED_INVALID)
+ _ptrField((FIELD<T> *) ptrField),
+ _fieldName(fileName),_fieldNum(MED_INVALID)
{
}
MED_FIELD_DRIVER(const MED_FIELD_DRIVER & fieldDriver):
GENDRIVER(fieldDriver),
_ptrField(fieldDriver._ptrField),
- _medIdt(MED_INVALID),
_fieldName(fieldDriver._fieldName),
- _fieldNum(fieldDriver._fieldNum)
+ _fieldNum(fieldDriver._fieldNum)
{
}
/*!
Destructor.
*/
- virtual ~MED_FIELD_DRIVER() {
- }
-
- void open() throw (MEDEXCEPTION)
+ virtual ~MED_FIELD_DRIVER()
{
- const char * LOC = "MED_FIELD_DRIVER::open() ";
- BEGIN_OF(LOC);
-
- // we must set fieldname before open, because we must find field number in file (if it exist !!!)
- if ( _fileName == "" )
- throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
- << "_fileName is |\"\"|, please set a correct fileName before calling open()"
- )
- );
-
- MESSAGE(LOC<<"_fileName.c_str : "<< _fileName.c_str()<<",mode : "<< _accessMode);
- _medIdt = med_2_1::MEDouvrir( (const_cast <char *> (_fileName.c_str())),(med_2_1::med_mode_acces) _accessMode);
- MESSAGE(LOC<<"_medIdt : "<< _medIdt );
- if (_medIdt > 0)
- _status=MED_OPENED;
- else {
- _status = MED_INVALID;
- _medIdt = MED_INVALID;
- throw MED_EXCEPTION (LOCALIZED( STRING(LOC)
- << "Can't open |" << _fileName
- << "|, _medIdt : " << _medIdt
- )
- );
- }
-
- END_OF(LOC);
- }
-
- void close() {
- BEGIN_OF("MED_FIELD_DRIVER::close()");
- med_2_1::med_int err = 0;
- if (_status == MED_OPENED) {
- err=med_2_1::MEDfermer(_medIdt);
- //H5close(); // If we call H5close() all the files are closed.
- _status = MED_CLOSED;
- _medIdt = MED_INVALID;
- MESSAGE(" MED_FIELD_DRIVER::close() : MEDfermer : _medIdt= " << _medIdt );
- MESSAGE(" MED_FIELD_DRIVER::close() : MEDfermer : err = " << err );
- }
- END_OF("MED_FIELD_DRIVER::close()");
+ MESSAGE("MED_FIELD_DRIVER::~MED_FIELD_DRIVER() has been destroyed");
}
+ virtual void open() throw (MEDEXCEPTION) = 0;
+ virtual void close() =0;
virtual void write( void ) const = 0 ;
virtual void read ( void ) = 0 ;
-
/*!
Set the name of the FIELD asked in file.
It could be different than the name of the FIELD object.
*/
- void setFieldName(const string & fieldName) ;
+ virtual void setFieldName(const string & fieldName) { _fieldName = fieldName; }
/*!
Get the name of the FIELD asked in file.
*/
- string getFieldName() const ;
-
-private:
+ virtual string getFieldName() const { return _fieldName; }
+protected:
virtual GENDRIVER * copy ( void ) const = 0 ;
-
+ friend class MED_FIELD_RDWR_DRIVER<T>;
+ friend class MED_FIELD_RDONLY_DRIVER<T>;
+ friend class MED_FIELD_WRONLY_DRIVER<T>;
};
/*!
*/
-template <class T> class MED_FIELD_RDONLY_DRIVER : public virtual MED_FIELD_DRIVER<T>
+template <class T> class IMED_FIELD_RDONLY_DRIVER : public virtual MED_FIELD_DRIVER<T>
{
-
+
public :
-
+
/*!
Constructor.
*/
- MED_FIELD_RDONLY_DRIVER():MED_FIELD_DRIVER<T>() {};
-
+ IMED_FIELD_RDONLY_DRIVER() {}
+
/*!
Constructor.
*/
- MED_FIELD_RDONLY_DRIVER(const string & fileName, FIELD<T> * ptrField):
- MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_RDONLY) {
- BEGIN_OF("MED_FIELD_RDONLY_DRIVER::MED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
- END_OF("MED_FIELD_RDONLY_DRIVER::MED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
+ IMED_FIELD_RDONLY_DRIVER(const string & fileName, FIELD<T> * ptrField):
+ MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_RDONLY) {
+ BEGIN_OF("IMED_FIELD_RDONLY_DRIVER::IMED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
+ END_OF("IMED_FIELD_RDONLY_DRIVER::IMED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
}
-
+
/*!
Copy constructor.
*/
- MED_FIELD_RDONLY_DRIVER(const MED_FIELD_RDONLY_DRIVER & fieldDriver):
- MED_FIELD_DRIVER<T>(fieldDriver) {};
-
+ IMED_FIELD_RDONLY_DRIVER(const IMED_FIELD_RDONLY_DRIVER & fieldDriver):
+ MED_FIELD_DRIVER<T>(fieldDriver) {}
+
/*!
Destructor.
*/
- virtual ~MED_FIELD_RDONLY_DRIVER() {};
+ virtual ~IMED_FIELD_RDONLY_DRIVER() {}
// CREER UNE METHODE POUR LIRE LA LISTE DES MAILLAGES .....
Return a MEDEXCEPTION : it is the read-only driver.
*/
void write( void ) const throw (MEDEXCEPTION) ;
- /*!
- Read FIELD in the specified file.
- */
- void read ( void ) throw (MEDEXCEPTION) ;
-
-private:
- GENDRIVER * copy( void ) const ;
+ friend class MED_FIELD_RDONLY_DRIVER<T>;
};
/*!
*/
-template <class T> class MED_FIELD_WRONLY_DRIVER : public virtual MED_FIELD_DRIVER<T> {
-
+template <class T> class IMED_FIELD_WRONLY_DRIVER : public virtual MED_FIELD_DRIVER<T> {
+
public :
-
+
/*!
Constructor.
*/
- MED_FIELD_WRONLY_DRIVER():MED_FIELD_DRIVER<T>() {}
-
+ IMED_FIELD_WRONLY_DRIVER() {}
+
/*!
Constructor.
*/
- MED_FIELD_WRONLY_DRIVER(const string & fileName, FIELD<T> * ptrField):
+ IMED_FIELD_WRONLY_DRIVER(const string & fileName, FIELD<T> * ptrField):
MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_WRONLY)
{
BEGIN_OF("MED_FIELD_WRONLY_DRIVER::MED_FIELD_WRONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
END_OF("MED_FIELD_WRONLY_DRIVER::MED_FIELD_WRONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
- };
+ }
/*!
Copy constructor.
*/
- MED_FIELD_WRONLY_DRIVER(const MED_FIELD_WRONLY_DRIVER & fieldDriver):
- MED_FIELD_DRIVER<T>(fieldDriver) {};
-
- /*!
- Destructor.
- */
- virtual ~MED_FIELD_WRONLY_DRIVER() {};
+ IMED_FIELD_WRONLY_DRIVER(const IMED_FIELD_WRONLY_DRIVER & fieldDriver):
+ MED_FIELD_DRIVER<T>(fieldDriver) {}
/*!
- Write FIELD in the specified file.
+ Destructor.
*/
- void write( void ) const throw (MEDEXCEPTION) ;
+ virtual ~IMED_FIELD_WRONLY_DRIVER() {};
/*!
Return a MEDEXCEPTION : it is the write-only driver.
*/
void read ( void ) throw (MEDEXCEPTION) ;
-private:
- GENDRIVER * copy( void ) const ;
-
+ friend class MED_FIELD_WRONLY_DRIVER<T>;
};
*/
-template <class T> class MED_FIELD_RDWR_DRIVER : public MED_FIELD_RDONLY_DRIVER<T>, public MED_FIELD_WRONLY_DRIVER<T> {
-
+template <class T> class IMED_FIELD_RDWR_DRIVER : public virtual IMED_FIELD_RDONLY_DRIVER<T>, public virtual IMED_FIELD_WRONLY_DRIVER<T> {
+
public :
-
+
/*!
Constructor.
*/
- MED_FIELD_RDWR_DRIVER():MED_FIELD_DRIVER<T>() {}
-
+ IMED_FIELD_RDWR_DRIVER() {}
+
/*!
Constructor.
*/
- MED_FIELD_RDWR_DRIVER(const string & fileName, FIELD<T> * ptrField):
- MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_RDWR)
+ IMED_FIELD_RDWR_DRIVER(const string & fileName, FIELD<T> * ptrField):
+ IMED_FIELD_RDONLY_DRIVER<T>(fileName,ptrField),IMED_FIELD_WRONLY_DRIVER<T>(fileName,ptrField),MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_RDWR)
{
BEGIN_OF("MED_FIELD_RDWR_DRIVER::MED_FIELD_RDWR_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
//_accessMode = MED_RDWR ;
END_OF("MED_FIELD_RDWR_DRIVER::MED_FIELD_RDWR_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
- };
+ }
/*!
Copy constructor.
*/
- MED_FIELD_RDWR_DRIVER(const MED_FIELD_RDWR_DRIVER & fieldDriver):
- MED_FIELD_DRIVER<T>(fieldDriver) {};
-
+ IMED_FIELD_RDWR_DRIVER(const IMED_FIELD_RDWR_DRIVER & fieldDriver):
+ IMED_FIELD_RDONLY_DRIVER<T>(fieldDriver),IMED_FIELD_WRONLY_DRIVER<T>(fieldDriver),MED_FIELD_DRIVER<T>(fieldDriver) {}
+
/*!
Destructor.
*/
- ~MED_FIELD_RDWR_DRIVER() {};
+ ~IMED_FIELD_RDWR_DRIVER() {}
- /*!
- Write FIELD in the specified file.
- */
- void write(void) const throw (MEDEXCEPTION) ;
- /*!
- Read FIELD in the specified file.
- */
- void read (void) throw (MEDEXCEPTION) ;
+ friend class MED_FIELD_RDWR_DRIVER<T>;
+};
+
+}
+
+namespace MEDMEM {
+
+template <class T> class MED_FIELD_RDONLY_DRIVER : public virtual IMED_FIELD_RDONLY_DRIVER<T>
+{
+public :
+ MED_FIELD_RDONLY_DRIVER();
+ MED_FIELD_RDONLY_DRIVER(const string & fileName, FIELD<T> * ptrField);
+
+ MED_FIELD_RDONLY_DRIVER(const MED_FIELD_RDONLY_DRIVER & fieldDriver):IMED_FIELD_RDONLY_DRIVER<T>(fieldDriver) { _concreteFieldDrv = fieldDriver._concreteFieldDrv->copy(); }
+ virtual ~MED_FIELD_RDONLY_DRIVER() { if (_concreteFieldDrv) delete _concreteFieldDrv; }
+ virtual void read ( void ) throw (MEDEXCEPTION) { _concreteFieldDrv->read(); }
+ virtual void write( void ) const throw (MEDEXCEPTION) { _concreteFieldDrv->write(); }
+ virtual void open() throw (MEDEXCEPTION) { _concreteFieldDrv->open(); }
+ virtual void close() { _concreteFieldDrv->close(); }
+ virtual void setFieldName(const string & fieldName) { _concreteFieldDrv->setFieldName(fieldName); }
+ virtual string getFieldName() const { return MED_FIELD_DRIVER<T>::getFieldName(); }
private:
- GENDRIVER * copy( void ) const ;
+ virtual GENDRIVER * copy ( void ) const { return new MED_FIELD_RDONLY_DRIVER<T>(*this); }
+protected:
+ GENDRIVER * _concreteFieldDrv;
+};
+template <class T> class MED_FIELD_WRONLY_DRIVER : public virtual IMED_FIELD_WRONLY_DRIVER<T> {
+public :
+ MED_FIELD_WRONLY_DRIVER();
+ MED_FIELD_WRONLY_DRIVER(const string & fileName, FIELD<T> * ptrField);
+
+ MED_FIELD_WRONLY_DRIVER(const MED_FIELD_WRONLY_DRIVER & fieldDriver):IMED_FIELD_WRONLY_DRIVER<T>(fieldDriver) { _concreteFieldDrv = fieldDriver._concreteFieldDrv->copy(); }
+ virtual ~MED_FIELD_WRONLY_DRIVER() { if (_concreteFieldDrv) delete _concreteFieldDrv;}
+ virtual void read ( void ) throw (MEDEXCEPTION) { _concreteFieldDrv->read(); }
+ virtual void write( void ) const throw (MEDEXCEPTION) { _concreteFieldDrv->write(); }
+ virtual void open() throw (MEDEXCEPTION) { _concreteFieldDrv->open(); }
+ virtual void close() { _concreteFieldDrv->close(); }
+ virtual void setFieldName(const string & fieldName) { _concreteFieldDrv->setFieldName(fieldName); }
+ virtual string getFieldName() const { return MED_FIELD_DRIVER<T>::getFieldName(); }
+private:
+ virtual GENDRIVER * copy ( void ) const { return new MED_FIELD_WRONLY_DRIVER<T>(*this); }
+protected:
+ GENDRIVER * _concreteFieldDrv;
};
+template <class T> class MED_FIELD_RDWR_DRIVER : public virtual IMED_FIELD_RDWR_DRIVER<T> {
+public:
+ MED_FIELD_RDWR_DRIVER();
+ /*!
+ Constructor.
+ */
+ MED_FIELD_RDWR_DRIVER(const string & fileName, FIELD<T> * ptrField);
+
+ MED_FIELD_RDWR_DRIVER(const MED_FIELD_RDWR_DRIVER & fieldDriver):
+ IMED_FIELD_RDWR_DRIVER<T>(fieldDriver)
+ { _concreteFieldDrv = fieldDriver._concreteFieldDrv->copy(); }
+ ~MED_FIELD_RDWR_DRIVER() { if (_concreteFieldDrv) delete _concreteFieldDrv;}
+ virtual void read ( void ) throw (MEDEXCEPTION) { _concreteFieldDrv->read(); }
+ virtual void write( void ) const throw (MEDEXCEPTION) { _concreteFieldDrv->write(); }
+ virtual void open() throw (MEDEXCEPTION) { _concreteFieldDrv->open(); }
+ virtual void close() { _concreteFieldDrv->close(); }
+ virtual void setFieldName(const string & fieldName) { _concreteFieldDrv->setFieldName(fieldName); }
+ virtual string getFieldName() const { return MED_FIELD_DRIVER<T>::getFieldName(); }
+private:
+ virtual GENDRIVER * copy ( void ) const { return new MED_FIELD_RDWR_DRIVER<T>(*this); }
+protected:
+ GENDRIVER * _concreteFieldDrv;
+};
+}
/*-------------------------*/
/* template implementation */
/*-------------------------*/
/*--------------------- DRIVER PART -------------------------------*/
-template <class T> void MED_FIELD_DRIVER<T>::setFieldName(const string & fieldName)
-{
- _fieldName = fieldName;
-}
+// template <class T> void MED_FIELD_DRIVER<T>::setFieldName(const string & fieldName)
+// {
+// _fieldName = fieldName;
+// }
-template <class T> string MED_FIELD_DRIVER<T>::getFieldName() const
-{
- return _fieldName;
-}
+// template <class T> string MED_FIELD_DRIVER<T>::getFieldName() const
+// {
+// return _fieldName;
+// }
-// template <class T> void MED_FIELD_DRIVER<T>::search_field() {
-// const char * LOC = "template <class T> class MED_FIELD_DRIVER::search_field() :";
-
-// // we search the field number !!!!
-// if (_status==MED_OPENED)
-// if (_fieldNum==MED_INVALID) {
-// int err ;
-// int numberOfFields = 0; //MED_INVALID
-// // char fieldName[MED_TAILLE_NOM+1] = "";
-// char fieldName[MED_TAILLE_NOM+1] ;
-// int numberOfComponents = 0;
-// char * componentName = (char *) MED_NULL;
-// char * unitName = (char *) MED_NULL;
-// med_2_1::med_type_champ type ;
-// numberOfFields = med_2_1::MEDnChamp(_medIdt,0) ;
-// if ( numberOfFields <= 0 )
-// throw MEDEXCEPTION(LOCALIZED(STRING(LOC)<<": No Field found !"));
-// for (int i=1;i<=numberOfFields;i++) {
-
-// numberOfComponents = med_2_1::MEDnChamp(_medIdt,i) ;
-// if ( numberOfComponents <= 0 )
-// throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
-// << "Be careful there is no compound for field n°"
-// << i << "in file |"<<_fileName<<"| !"));
-
-// componentName = new char[numberOfComponents*MED_TAILLE_PNOM+1] ;
-// unitName = new char[numberOfComponents*MED_TAILLE_PNOM+1] ;
-
-// err = med_2_1::MEDchampInfo(_medIdt, i, fieldName, &type, componentName,
-// unitName, numberOfComponents) ;
-
-// delete[] componentName ;
-// delete[] unitName ;
-// MESSAGE("Champ "<<i<<" : #" << fieldName <<"# et recherche #"<<_fieldName.c_str()<<"#");
-// if ( !strcmp(fieldName,_fieldName.c_str()) ) {
-// MESSAGE("FOUND FIELD "<< fieldName <<" : "<<i);
-// _fieldNum = i ;
-// break ;
-// }
-// }
-// }
-// }
-
-/*--------------------- RDONLY PART -------------------------------*/
+#include "MEDMEM_DriverFactory.hxx"
+#include "MEDMEM_MedFieldDriver21.hxx"
+#include "MEDMEM_MedFieldDriver22.hxx"
-template <class T> GENDRIVER * MED_FIELD_RDONLY_DRIVER<T>::copy(void) const
-{
- MED_FIELD_RDONLY_DRIVER<T> * myDriver =
- new MED_FIELD_RDONLY_DRIVER<T>(*this);
- return myDriver ;
-}
-template <class T> void MED_FIELD_RDONLY_DRIVER<T>::read(void)
- throw (MEDEXCEPTION)
-{
- const char * LOC = " MED_FIELD_RDONLY_DRIVER::read() " ;
- BEGIN_OF(LOC);
-
- if (MED_FIELD_DRIVER<T>::_ptrField->_name=="")
- MED_FIELD_DRIVER<T>::_ptrField->_name = MED_FIELD_DRIVER<T>::_fieldName ;
- else
- MED_FIELD_DRIVER<T>::_fieldName = MED_FIELD_DRIVER<T>::_ptrField->_name; // bug indetermine ! apres avoir fait readfilestruct, lorsque je recupere le champ, tout est bon sauf le nom du champ dans le driver !!!!!
-
- MESSAGE("###### "<<LOC<<" fieldNameDRIVER : "<<MED_FIELD_DRIVER<T>::_fieldName<<" fieldName : "<<MED_FIELD_DRIVER<T>::_ptrField->_name);
-
- string MeshName = MED_FIELD_DRIVER<T>::_ptrField->getSupport()->getMesh()->getName() ;
-
- if (MED_FIELD_DRIVER<T>::_status==MED_OPENED)
- {
-
- // search_field() ;
-
- char * fieldName ;
- fieldName = new char[MED_TAILLE_NOM+1] ;
- int err ;
- int numberOfComponents = 0;
- char * componentName = (char *) MED_NULL;
- char * unitName = (char *) MED_NULL;
- med_2_1::med_type_champ type ;
-
- // we search the field number !!!!
- if (MED_FIELD_DRIVER<T>::_fieldNum==MED_INVALID) {
- int numberOfFields = 0; //MED_INVALID
- numberOfFields = med_2_1::MEDnChamp(MED_FIELD_DRIVER<T>::_medIdt,0) ;
- if ( numberOfFields <= 0 )
- throw MEDEXCEPTION(LOCALIZED(STRING(LOC)<<": No Field found !"));
- for (int i=1;i<=numberOfFields;i++) {
-
- numberOfComponents = med_2_1::MEDnChamp(MED_FIELD_DRIVER<T>::_medIdt,i) ;
- if ( numberOfComponents <= 0 )
- // throw MED_EXCEPTION ( LOCALIZED( STRING(LOC)
- // << "Be careful there is no compound for field n°"
- // << i << "in file |"<<_fileName<<"| !"));
- MESSAGE(LOC<<"Be careful there is no compound for field n°"<<i<<"in file |"<<_fileName<<"| !");
-
- componentName = new char[numberOfComponents*MED_TAILLE_PNOM+1] ;
- unitName = new char[numberOfComponents*MED_TAILLE_PNOM+1] ;
-
- err = med_2_1::MEDchampInfo(MED_FIELD_DRIVER<T>::_medIdt, i, fieldName, &type, componentName,
- unitName, numberOfComponents) ;
-
- MESSAGE("Champ "<<i<<" : #" << fieldName <<"# et recherche #"<<MED_FIELD_DRIVER<T>::_fieldName.c_str()<<"#");
- if ( !strcmp(fieldName,MED_FIELD_DRIVER<T>::_fieldName.c_str()) ) {
- MESSAGE("FOUND FIELD "<< fieldName <<" : "<<i);
- MED_FIELD_DRIVER<T>::_fieldNum = i ;
- break ;
- }
- // not found : release memory and search next field !
- delete[] componentName ;
- delete[] unitName ;
- }
- }
-
- delete[] fieldName ;
-
- if (MED_FIELD_DRIVER<T>::_fieldNum==MED_INVALID)
- throw MEDEXCEPTION(LOCALIZED( STRING(LOC) << ": Field "<<MED_FIELD_DRIVER<T>::_fieldName << " not found in file " << MED_FIELD_DRIVER<T>::_fileName ) );
- MESSAGE ("FieldNum : "<<MED_FIELD_DRIVER<T>::_fieldNum);
-
- // int err ;
- // int NumberOfComponents = med_2_1::MEDnChamp(MED_FIELD_DRIVER<T>::_medIdt,MED_FIELD_DRIVER<T>::_fieldNum) ;
- if (numberOfComponents < 1)
- throw MEDEXCEPTION(LOCALIZED(STRING(LOC)<<"no component")) ; // use iostring !
- // test type to check if it is rigth !!!???
- MED_FIELD_DRIVER<T>::_ptrField->_numberOfComponents = numberOfComponents ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes = new int[numberOfComponents] ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsNames = new string[numberOfComponents] ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits = new UNIT[numberOfComponents] ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions = new string[numberOfComponents] ;
- MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits = new string[numberOfComponents] ;
- for (int i=0; i<numberOfComponents; i++) {
- MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes[i] = 1 ;
-
- // PG : what about space !!!
- MED_FIELD_DRIVER<T>::_ptrField->_componentsNames[i] = string(componentName,i*MED_TAILLE_PNOM,MED_TAILLE_PNOM) ;
- SCRUTE(MED_FIELD_DRIVER<T>::_ptrField->_componentsNames[i]);
- MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits[i] = string(unitName,i*MED_TAILLE_PNOM,MED_TAILLE_PNOM) ;
- SCRUTE(MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits[i]);
- }
- delete[] componentName;
- delete[] unitName;
-
- // read values for each geometric type in _support
- int NumberOfTypes = MED_FIELD_DRIVER<T>::_ptrField->_support->getNumberOfTypes() ;
- const MED_EN::medGeometryElement *Types = MED_FIELD_DRIVER<T>::_ptrField->_support->getTypes() ;
- T ** myValues = new T*[NumberOfTypes] ;
- int * NumberOfValues = new int[NumberOfTypes] ;
- int TotalNumberOfValues = 0 ;
- MESSAGE ("NumberOfTypes :"<< NumberOfTypes);
- _ptrField->_numberOfValues=0 ;
- for (int i=0; i<NumberOfTypes; i++) {
- MESSAGE ("Type["<<i+1<<"] :"<< Types[i]);
- MESSAGE ("Entity :"<<MED_FIELD_DRIVER<T>::_ptrField->_support->getEntity());
- NumberOfValues[i] =
- MEDnVal(MED_FIELD_DRIVER<T>::_medIdt,
- const_cast <char*> (MED_FIELD_DRIVER<T>::_fieldName.c_str()),
- (med_2_1::med_entite_maillage)MED_FIELD_DRIVER<T>::_ptrField->_support->getEntity(),
- (med_2_1::med_geometrie_element)Types[i],
- MED_FIELD_DRIVER<T>::_ptrField->_iterationNumber,
- MED_FIELD_DRIVER<T>::_ptrField->_orderNumber) ; // no time step ! prend en compte le nbre de pt de gauss
- // test if NumberOfValues is the same in _support !!! TODO that !!
- // we suppose it is
- // we could allocate array
- myValues[i] = new T[ NumberOfValues[i]*numberOfComponents ] ;
- TotalNumberOfValues+=NumberOfValues[i] ;// diviser par le nombre de point de gauss
- char * ProfilName = new char[MED_TAILLE_NOM+1];
- MESSAGE ("NumberOfValues :"<< NumberOfValues[i]);
- MESSAGE ("NumberOfComponents :"<< numberOfComponents);
- MESSAGE ("MESH_NAME :"<< MeshName.c_str());
- MESSAGE ("FIELD_NAME :"<< MED_FIELD_DRIVER<T>::_fieldName.c_str());
- MESSAGE ("MED_ENTITE :"<< (med_2_1::med_entite_maillage) MED_FIELD_DRIVER<T>::_ptrField->_support->getEntity());
- MESSAGE("MED_GEOM :"<<(med_2_1::med_geometrie_element)Types[i]);
- MESSAGE("Iteration :"<<MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber());
- MESSAGE("Order :"<<MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber());
- MED_FIELD_DRIVER<T>::_ptrField->_numberOfValues+=NumberOfValues[i]; // problem with gauss point : _numberOfValues != TotalNumberOfValues !!!!!!!
- med_2_1::med_err ret;
-#if defined(IRIX64) || defined(OSF1) || defined(VPP5000)
- int lgth2=NumberOfValues[i]*numberOfComponents;
- if(_ptrField->getValueType()==MED_EN::MED_INT32)
- {
- med_2_1::med_int *temp=new med_2_1::med_int[lgth2];
- ret=med_2_1::MEDchampLire(MED_FIELD_DRIVER<T>::_medIdt,const_cast <char*> (MeshName.c_str()),
- const_cast <char*> (MED_FIELD_DRIVER<T>::_fieldName.c_str()),
- (unsigned char*) temp,
- med_2_1::MED_NO_INTERLACE,
- MED_ALL,
- ProfilName,
- (med_2_1::med_entite_maillage) MED_FIELD_DRIVER<T>::_ptrField->_support->getEntity(),(med_2_1::med_geometrie_element)Types[i],
- MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber(),
- MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()
- );
- for(int i2=0;i2<lgth2;i2++)
- myValues[i][i2]=(int)(temp[i2]);
- delete [] temp;
- }
- else
-#endif
- ret=med_2_1::MEDchampLire(MED_FIELD_DRIVER<T>::_medIdt,const_cast <char*> (MeshName.c_str()),
- const_cast <char*> (MED_FIELD_DRIVER<T>::_fieldName.c_str()),
- (unsigned char*) myValues[i],
- med_2_1::MED_NO_INTERLACE,
- MED_ALL,
- ProfilName,
- (med_2_1::med_entite_maillage) MED_FIELD_DRIVER<T>::_ptrField->_support->getEntity(),(med_2_1::med_geometrie_element)Types[i],
- MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber(),
- MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()
- );
- if (ret < 0) {
- // we must do some delete !!!
- for(int j=0; j<=i;j++)
- delete[] myValues[j];
- delete[] myValues;
- delete[] NumberOfValues ;
- delete[] ProfilName;
- delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes ;
- delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsNames ;
- delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits ;
- delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions ;
- delete[] MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes = NULL ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsNames = NULL ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits = NULL ;
- MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions = NULL ;
- MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits = NULL ;
- MED_FIELD_DRIVER<T>::_fieldNum = MED_INVALID ; // we have not found right field, so reset the field number
- throw MEDEXCEPTION( LOCALIZED( STRING(LOC) <<": ERROR when read value")) ;
- }
-
- delete[] ProfilName ;
- }
- // allocate _value
- // probleme avec les points de gauss : voir lorsqu-il y en a (!= 1)
- // MEDARRAY<T> * Values = new MEDARRAY<T>(MED_FIELD_DRIVER<T>::_ptrField->getNumberOfComponents(),TotalNumberOfValues/MED_FIELD_DRIVER<T>::_ptrField->getNumberOfComponents(),MED_EN::MED_NO_INTERLACE);
-
- if (MED_FIELD_DRIVER<T>::_ptrField->_value==NULL)
- MED_FIELD_DRIVER<T>::_ptrField->_value=new MEDARRAY<T>(numberOfComponents,TotalNumberOfValues,MED_EN::MED_NO_INTERLACE);
-
- MEDARRAY<T> * Values = MED_FIELD_DRIVER<T>::_ptrField->_value ; // create by constructor ???
- // check if dimensions are right : inutile : c'est dans le constructeur !!!
- //if (Values->getLeadingValue() != numberOfComponents)
- // throw MEDEXCEPTION( LOCALIZED( STRING(LOC) <<": leading dimension are false : "<<Values->getLeadingValue()<<" and "<<numberOfComponents) ) ;
- //if (Values->getLengthValue() != TotalNumberOfValues)
- // throw MEDEXCEPTION( LOCALIZED( STRING(LOC) <<": length dimension are false : "<<Values->getLengthValue()<<" and "<<TotalNumberOfValues) ) ;
-
- for (int i=0; i<numberOfComponents; i++) {
- //T * ValuesT = Values->getRow(i+1) ;
- int Count = 1 ;
- for (int j=0; j<NumberOfTypes; j++) {
- T * myValue = myValues[j] ;
- int NumberOf = NumberOfValues[j] ;
-// MED_FIELD_DRIVER<T>::_ptrField->_numberOfValues+=NumberOf; // problem with gauss point : _numberOfValues != TotalNumberOfValues !!!!!!!
- int offset = NumberOf*i ;
- for (int k=0 ; k<NumberOf; k++) {
- //ValuesT[Count]=myValue[k+offset] ;
- Values->setIJ(Count,i+1,myValue[k+offset]);
- SCRUTE(Count);
- SCRUTE(Values->getIJ(Count,i+1));
- Count++;
- }
- }
- }
-
- for (int j=0; j<NumberOfTypes; j++)
- delete[] myValues[j] ;
- delete[] myValues ;
- delete[] NumberOfValues ;
-
- MED_FIELD_DRIVER<T>::_ptrField->_isRead = true ;
- }
-
- END_OF(LOC);
-}
+/*--------------------- RDONLY PART -------------------------------*/
+namespace MEDMEM {
-template <class T> void MED_FIELD_RDONLY_DRIVER<T>::write( void ) const
+template <class T> void IMED_FIELD_RDONLY_DRIVER<T>::write( void ) const
throw (MEDEXCEPTION)
{
throw MEDEXCEPTION("MED_FIELD_RDONLY_DRIVER::write : Can't write with a RDONLY driver !");
}
-/*--------------------- WRONLY PART -------------------------------*/
+template <class T> MED_FIELD_RDONLY_DRIVER<T>::MED_FIELD_RDONLY_DRIVER() {
+ MESSAGE("You are using the default constructor of the Field read only Driver and it is 2.1 one");
+ _concreteFieldDrv=new MED_FIELD_RDONLY_DRIVER21<T>();
+}
-template <class T> GENDRIVER * MED_FIELD_WRONLY_DRIVER<T>::copy(void) const
+template <class T> MED_FIELD_RDONLY_DRIVER<T>::MED_FIELD_RDONLY_DRIVER(const string & fileName, FIELD<T> * ptrField)
{
- MED_FIELD_WRONLY_DRIVER<T> * myDriver =
- new MED_FIELD_WRONLY_DRIVER<T>(*this);
- return myDriver ;
+ BEGIN_OF("MED_FIELD_RDONLY_DRIVER::MED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
+
+ _concreteFieldDrv = DRIVERFACTORY::buildFieldDriverFromFile(fileName,ptrField,MED_EN::MED_LECT);
+
+ END_OF("MED_FIELD_RDONLY_DRIVER::MED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
}
-template <class T> void MED_FIELD_WRONLY_DRIVER<T>::read (void)
+/*--------------------- WRONLY PART -------------------------------*/
+
+template <class T> void IMED_FIELD_WRONLY_DRIVER<T>::read (void)
throw (MEDEXCEPTION)
{
throw MEDEXCEPTION("MED_FIELD_WRONLY_DRIVER::read : Can't read with a WRONLY driver !");
}
-template <class T> void MED_FIELD_WRONLY_DRIVER<T>::write(void) const
- throw (MEDEXCEPTION)
-{
- const char * LOC = "MED_FIELD_WRONLY_DRIVER::write(void) const " ;
- BEGIN_OF(LOC);
- if (MED_FIELD_DRIVER<T>::_status==MED_OPENED)
- {
- int err ;
-
- int component_count=MED_FIELD_DRIVER<T>::_ptrField->getNumberOfComponents();
- string component_name(component_count*MED_TAILLE_PNOM,' ') ;
- string component_unit(component_count*MED_TAILLE_PNOM,' ') ;
-
- const string * listcomponent_name=MED_FIELD_DRIVER<T>::_ptrField->getComponentsNames() ;
- const string * listcomponent_unit=MED_FIELD_DRIVER<T>::_ptrField->getMEDComponentsUnits() ;
- int length ;
- for (int i=0; i < component_count ; i++) {
- length = min(MED_TAILLE_PNOM,(int)listcomponent_name[i].size());
- component_name.replace(i*MED_TAILLE_PNOM,length,
- listcomponent_name[i],0,length);
- length = min(MED_TAILLE_PNOM,(int)listcomponent_unit[i].size());
- component_unit.replace(i*MED_TAILLE_PNOM,length,
- listcomponent_unit[i],0,length);
- }
-
- MESSAGE("component_name=|"<<component_name<<"|");
- MESSAGE("component_unit=|"<<component_unit<<"|");
-
- MED_EN::med_type_champ ValueType=MED_FIELD_DRIVER<T>::_ptrField->getValueType() ;
-
- MESSAGE("Template Type =|"<<ValueType<<"|");
-
- // le champ existe deja ???
- char * champName = new char[MED_TAILLE_NOM+1] ;
- med_2_1::med_type_champ type ;
- char * compName ;
- char * compUnit ;
- bool Find = false ;
- int n = med_2_1::MEDnChamp(MED_FIELD_DRIVER<T>::_medIdt,0);
- int nbComp ;
- for (int i=1; i<=n; i++) {
- nbComp = med_2_1::MEDnChamp(MED_FIELD_DRIVER<T>::_medIdt,i);
- compName = new char[MED_TAILLE_PNOM*nbComp+1];
- compUnit = new char[MED_TAILLE_PNOM*nbComp+1];
- err = med_2_1::MEDchampInfo(MED_FIELD_DRIVER<T>::_medIdt,i,champName,&type,compName,compUnit,nbComp);
- if (err == 0)
- if (strcmp(champName,MED_FIELD_DRIVER<T>::_ptrField->getName().c_str())==0) { // Found !
- Find = true ;
- break ;
- }
- delete[] compName ;
- delete[] compUnit ;
- }
- delete[] champName ;
- if (Find) {
- // the same ?
- if (nbComp != component_count)
- throw MEDEXCEPTION( LOCALIZED (STRING(LOC)
- <<": Field exist in file, but number of component are different : "<<nbComp<<" in file and "<<component_count<<" in memory."
- )
- );
- // component name and unit
- MESSAGE(LOC<<" Component name in file : "<<compName);
- MESSAGE(LOC<<" Component name in memory : "<<component_name);
- MESSAGE(LOC<<" Component unit in file : "<<compUnit);
- MESSAGE(LOC<<" Component unit in memory : "<<component_unit);
- delete[] compName ;
- delete[] compUnit ;
-
- } else {
- // Verify the field doesn't exist
-
- string dataGroupName = "/CHA/";
- dataGroupName += MED_FIELD_DRIVER<T>::_ptrField->getName();
- MESSAGE(LOC << "|" << dataGroupName << "|" );
- MED_EN::med_idt gid = H5Gopen(MED_FIELD_DRIVER<T>::_medIdt, dataGroupName.c_str() );
-
- if ( gid < 0 ) {
- // create field :
- err=med_2_1::MEDchampCr(MED_FIELD_DRIVER<T>::_medIdt,
- const_cast <char*> ((MED_FIELD_DRIVER<T>::_ptrField->getName()).c_str()),
- (med_2_1::med_type_champ) ValueType,
- const_cast <char*> ( component_name.c_str() ),
- const_cast <char*> ( component_unit.c_str() ),
- component_count);
- if ( err < 0 )
- throw MEDEXCEPTION( LOCALIZED (STRING(LOC)
- << ": Error MEDchampCr : "<<err
- )
- );
- }
- else H5Gclose(gid);
- }
-
- const SUPPORT * mySupport = MED_FIELD_DRIVER<T>::_ptrField->getSupport() ;
-
- if (! mySupport->isOnAllElements())
- throw MEDEXCEPTION( LOCALIZED (STRING(LOC)
- <<": Field must be on all entity"
- )
- );
-
- MESH * myMesh = mySupport->getMesh() ;
- string MeshName = myMesh->getName() ;
- //MED_EN::medModeSwitch Mode = MED_FIELD_DRIVER<T>::_ptrField->_value->getMode() ;
- // on boucle sur tout les types pour ecrire les tableaux de valeur
- int NumberOfType = mySupport->getNumberOfTypes() ;
- int Index = 1 ;
- const MED_EN::medGeometryElement * Types = mySupport->getTypes() ;
- const int * NumberOfGaussPoint = mySupport->getNumberOfGaussPoint() ;
- for (int i=0;i<NumberOfType;i++) {
- int NumberOfElements = mySupport->getNumberOfElements(Types[i]) ;
-
- const T * value = MED_FIELD_DRIVER<T>::_ptrField->getValueI(MED_EN::MED_FULL_INTERLACE,Index) ;
-
- MESSAGE("MED_FIELD_DRIVER<T>::_medIdt : "<<MED_FIELD_DRIVER<T>::_medIdt);
- MESSAGE("MeshName.c_str() : "<<MeshName.c_str());
- MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getName() : "<<MED_FIELD_DRIVER<T>::_ptrField->getName());
- MESSAGE("value : "<<value);
- MESSAGE("NumberOfElements : "<<NumberOfElements);
- MESSAGE("NumberOfGaussPoint[i] : "<<NumberOfGaussPoint[i]);
- MESSAGE("mySupport->getEntity() : "<<mySupport->getEntity());
- MESSAGE("Types[i] : "<<Types[i]);
- MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber() : "<<MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber());
- MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getTime() : "<<MED_FIELD_DRIVER<T>::_ptrField->getTime());
- MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber() : "<<MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber());
-
-/* char chanom[MED_TAILLE_NOM+1];
- char chacomp[MED_TAILLE_NOM+1];
- char chaunit[MED_TAILLE_NOM+1];
- med_2_1::med_type_champ chatype;
- med_int chancomp=1;
-
- err=med_2_1::MEDchampInfo(MED_FIELD_DRIVER<T>::_medIdt,1,chanom,&chatype,chacomp,chaunit,chancomp);
-
- if (err<0)
- {
- cout<<"=======================================================================> gros probleme"<<endl;
- exit(-1);
- }
- cout<<"==================> nom lu = "<<chanom<<endl;
- cout<<"==================> type lu = "<<chatype<<endl;
- cout<<"==================> nom composante lu = "<<chacomp<<endl;
- cout<<"==================> nom unit lu = "<<chaunit<<endl;
- cout<<"==================> valeur de med_2_1::MED_REEL64 = "<<med_2_1::MED_REEL64<<endl;
-*/
-#if defined(IRIX64) || defined(OSF1) || defined(VPP5000)
- if(_ptrField->getValueType()==MED_EN::MED_INT32)
- {
- int lgth2=_ptrField->getNumberOfValues();
- med_2_1::med_int *temp=new med_2_1::med_int[lgth2];
- for(int i2=0;i2<lgth2;i2++)
- temp[i2]=(int)(value[i2]);
- err=med_2_1::MEDchampEcr(MED_FIELD_DRIVER<T>::_medIdt,
- const_cast <char*> ( MeshName.c_str()) , //( string(mesh_name).resize(MED_TAILLE_NOM).c_str())
- const_cast <char*> ( (MED_FIELD_DRIVER<T>::_ptrField->getName()).c_str()),
- (unsigned char*)temp,
- med_2_1::MED_FULL_INTERLACE,
- NumberOfElements,
- NumberOfGaussPoint[i],
- MED_ALL,
- MED_NOPFL,
- med_2_1::MED_REMP, // PROFIL NON GERE, mode de remplacement non géré
- (med_2_1::med_entite_maillage)mySupport->getEntity(),
- (med_2_1::med_geometrie_element)Types[i],
- MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber(),
- " ",
- MED_FIELD_DRIVER<T>::_ptrField->getTime(),
- MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()
- );
- delete [] temp;
- }
- else
-#endif
- err=med_2_1::MEDchampEcr(MED_FIELD_DRIVER<T>::_medIdt,
- const_cast <char*> ( MeshName.c_str()) , //( string(mesh_name).resize(MED_TAILLE_NOM).c_str())
- const_cast <char*> ( (MED_FIELD_DRIVER<T>::_ptrField->getName()).c_str()),
- (unsigned char*)value,
- med_2_1::MED_FULL_INTERLACE,
- NumberOfElements,
- NumberOfGaussPoint[i],
- MED_ALL,
- MED_NOPFL,
- med_2_1::MED_REMP, // PROFIL NON GERE, mode de remplacement non géré
- (med_2_1::med_entite_maillage)mySupport->getEntity(),
- (med_2_1::med_geometrie_element)Types[i],
- MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber(),
- " ",
- MED_FIELD_DRIVER<T>::_ptrField->getTime(),
- MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()
- );
- if (err < MED_VALID )
- throw MEDEXCEPTION(LOCALIZED( STRING(LOC)
- <<": Error in writing Field "<< MED_FIELD_DRIVER<T>::_ptrField->getName() <<", type "<<Types[i]
- )
- );
-
- Index += NumberOfElements ;
-
- }
- }
-
- END_OF(LOC);
+template <class T> MED_FIELD_WRONLY_DRIVER<T>::MED_FIELD_WRONLY_DRIVER() {
+ MESSAGE("You are using the default constructor of the Field write only Driver and it is 2.1 one");
+
+ _concreteFieldDrv=new MED_FIELD_WRONLY_DRIVER21<T>();
+}
+
+template <class T> MED_FIELD_WRONLY_DRIVER<T>::MED_FIELD_WRONLY_DRIVER(const string & fileName, FIELD<T> * ptrField)
+ {
+ BEGIN_OF("MED_FIELD_WRONLY_DRIVER::MED_FIELD_WRONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
+
+ _concreteFieldDrv = DRIVERFACTORY::buildFieldDriverFromFile(fileName,ptrField,MED_EN::MED_ECRI);
+
+ END_OF("MED_FIELD_RDONLY_DRIVER::MED_FIELD_RDONLY_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
}
/*--------------------- RDWR PART -------------------------------*/
-template <class T> GENDRIVER * MED_FIELD_RDWR_DRIVER<T>::copy(void) const
-{
- MED_FIELD_RDWR_DRIVER<T> * myDriver =
- new MED_FIELD_RDWR_DRIVER<T>(*this);
- return myDriver ;
+template <class T> MED_FIELD_RDWR_DRIVER<T>::MED_FIELD_RDWR_DRIVER() {
+ MESSAGE("You are using the default constructor of the Field read/write Driver and it is 2.1 one");
+
+ _concreteFieldDrv=new MED_FIELD_RDWR_DRIVER21<T>();
}
-template <class T> void MED_FIELD_RDWR_DRIVER<T>::write(void) const
- throw (MEDEXCEPTION)
-{
- BEGIN_OF("MED_FIELD_RDWR_DRIVER::write(void)");
- MED_FIELD_WRONLY_DRIVER<T>::write();
- END_OF("MED_FIELD_RDWR_DRIVER::write(void)");
-}
+template <class T> MED_FIELD_RDWR_DRIVER<T>::MED_FIELD_RDWR_DRIVER(const string & fileName, FIELD<T> * ptrField)
+ {
+ BEGIN_OF("MED_FIELD_RDWR_DRIVER::MED_FIELD_RDWR_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
-template <class T> void MED_FIELD_RDWR_DRIVER<T>::read (void)
- throw (MEDEXCEPTION)
-{
- BEGIN_OF("MED_FIELD_RDWR_DRIVER::read(void)");
- MED_FIELD_RDONLY_DRIVER<T>::read();
- END_OF("MED_FIELD_RDWR_DRIVER::read(void)");
+ _concreteFieldDrv = DRIVERFACTORY::buildFieldDriverFromFile(fileName,ptrField,MED_EN::MED_REMP);
+
+ END_OF("MED_FIELD_RDWR_DRIVER::MED_FIELD_RDWR_DRIVER(const string & fileName, const FIELD<T> * ptrField)");
}
+
+
}//End namespace MEDMEM
/*-----------------------------------------------------------------*/
#endif /* MED_FIELD_DRIVER_HXX */
-