Salome HOME
CoTech decision: move MEDWrapper from MED to SMESH
[modules/smesh.git] / src / MEDWrapper / Base / MED_Wrapper.hxx
diff --git a/src/MEDWrapper/Base/MED_Wrapper.hxx b/src/MEDWrapper/Base/MED_Wrapper.hxx
new file mode 100644 (file)
index 0000000..027c9a5
--- /dev/null
@@ -0,0 +1,1052 @@
+// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Wrapper_HeaderFile
+#define MED_Wrapper_HeaderFile
+
+#include "MED_WrapperBase.hxx"
+
+#include "MED_Structures.hxx"
+#include "MED_Algorithm.hxx"
+
+#include <boost/thread/mutex.hpp>
+
+namespace MED
+{
+
+  //----------------------------------------------------------------------------
+  //! Define a base class that wraps the MED API
+  struct MEDWRAPPER_EXPORT TWrapper
+  {
+    typedef boost::mutex TMutex;
+    //! This is a syncronization primitive which allow to support thread safety for the MED access
+    TMutex myMutex;
+
+    virtual
+    ~TWrapper();
+
+    //----------------------------------------------------------------------------
+    //! Gets version of the MED library used for the MED file
+    virtual 
+    EVersion
+    GetVersion() = 0;
+    
+    //----------------------------------------------------------------------------
+    //! Creates a MEDWrapper MED Mesh representation
+    virtual 
+    PMeshInfo 
+    CrMeshInfo(TInt theDim = 0, TInt theSpaceDim = 0,
+               const std::string& theValue = "",
+               EMaillage theType = eNON_STRUCTURE,
+               const std::string& theDesc = "") = 0;
+
+    //! A copy-constructor for the MEDWrapper MED Mesh representation
+    virtual 
+    PMeshInfo 
+    CrMeshInfo(const PMeshInfo& theInfo) = 0;
+
+    //! Read number of MED Mesh entities in the defined MED file
+    virtual 
+    TInt 
+    GetNbMeshes(TErr* theErr = NULL) = 0;
+    
+    //! Read a MEDWrapper MED Mesh representation by its number
+    virtual 
+    void 
+    GetMeshInfo(TInt theMeshId, 
+                TMeshInfo& theInfo,
+                TErr* theErr = NULL) = 0;
+
+    //! Write the MEDWrapper MED Mesh representation in the defined MED file
+    virtual 
+    void
+    SetMeshInfo(const TMeshInfo& theInfo,
+                TErr* theErr = NULL) = 0;
+    
+    //! Read a MEDWrapper MED Mesh representation by its number
+    virtual 
+    PMeshInfo
+    GetPMeshInfo(TInt theId,
+                 TErr* theErr = NULL);
+
+
+    //----------------------------------------------------------------------------
+    //! Read number of MED Family entities in the defined MED file
+    virtual 
+    TInt
+    GetNbFamilies(const TMeshInfo& theMeshInfo,
+                  TErr* theErr = NULL) = 0;
+
+    //! Read number of attributes for defined MED Family
+    virtual 
+    TInt
+    GetNbFamAttr(TInt theFamId, 
+                 const TMeshInfo& theInfo,
+                 TErr* theErr = NULL) = 0;
+    
+    //! Read number of MED Groups where MED Family with the number belong to
+    virtual
+    TInt
+    GetNbFamGroup(TInt theFamId, 
+                  const TMeshInfo& theInfo,
+                  TErr* theErr = NULL) = 0;
+    
+    //! Read a MEDWrapper MED Family representation by its number
+    virtual
+    void
+    GetFamilyInfo(TInt theFamId, 
+                  TFamilyInfo& theInfo,
+                  TErr* theErr = NULL) = 0;
+    
+    //! Write a MEDWrapper MED Family representation by its number
+    virtual
+    void
+    SetFamilyInfo(const TFamilyInfo& theInfo,
+                  TErr* theErr = NULL) = 0;
+    
+    //! Creates a MEDWrapper MED Family representation
+    virtual 
+    PFamilyInfo
+    CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 TInt theNbGroup = 0, 
+                 TInt theNbAttr = 0,
+                 TInt theId = 0,
+                 const std::string& theValue = "") = 0;
+    
+    //! Creates a MEDWrapper MED Family representation
+    virtual 
+    PFamilyInfo
+    CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const std::string& theValue,
+                 TInt theId,
+                 const TStringSet& theGroupNames, 
+                 const TStringVector& theAttrDescs = TStringVector(), 
+                 const TIntVector& theAttrIds = TIntVector(), 
+                 const TIntVector& theAttrVals = TIntVector()) = 0;
+    
+    //! A copy-constructor for the MEDWrapper MED Family representation
+    virtual
+    PFamilyInfo
+    CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const PFamilyInfo& theInfo) = 0;
+    
+    //! Write a MEDWrapper MED Family representation by its number
+    PFamilyInfo
+    GetPFamilyInfo(const PMeshInfo& theMeshInfo, 
+                   TInt theId,
+                   TErr* theErr = NULL);
+    
+    //----------------------------------------------------------------------------
+    //! Read sequence of names for any descendant of TElemInfo
+    virtual
+    void
+    GetNames(TElemInfo& theInfo,
+             TInt theNb,
+             EEntiteMaillage theEntity, 
+             EGeometrieElement theGeom,
+             TErr* theErr = NULL)
+    {}
+
+    //! Read sequence of numerous for any descendant of TElemInfo
+    virtual
+    void
+    GetNumeration(TElemInfo& theInfo,
+                  TInt theNb,
+                  EEntiteMaillage theEntity, 
+                  EGeometrieElement theGeom,
+                  TErr* theErr = NULL)
+    {}
+
+    //! Read sequence MED Family indexes for any descendant of TElemInfo
+    virtual
+    void
+    GetFamilies(TElemInfo& theInfo,
+                TInt theNb,
+                EEntiteMaillage theEntity, 
+                EGeometrieElement theGeom,
+                TErr* theErr = NULL)
+    {}
+
+    //! Write sequence of names for any descendant of TElemInfo
+    virtual
+    void
+    SetNames(const TElemInfo& theInfo,
+             EEntiteMaillage theEntity, 
+             EGeometrieElement theGeom,
+             TErr* theErr = NULL)
+    {}
+
+    //! Write sequence of numerous for any descendant of TElemInfo
+    virtual
+    void
+    SetNumeration(const TElemInfo& theInfo,
+                  EEntiteMaillage theEntity, 
+                  EGeometrieElement theGeom,
+                  TErr* theErr = NULL)
+    {}
+
+    //! Write sequence MED Family indexes for any descendant of TElemInfo
+    virtual
+    void
+    SetFamilies(const TElemInfo& theInfo,
+                EEntiteMaillage theEntity, 
+                EGeometrieElement theGeom,
+                TErr* theErr = NULL)
+    {}
+
+    //! Read a MEDWrapper MED Element representation from defined MED file
+    PElemInfo
+    GetPElemInfo(const PMeshInfo& theMeshInfo,
+                 EEntiteMaillage theEntity = eNOEUD, 
+                 EGeometrieElement theGeom = ePOINT1, 
+                 EConnectivite theConnMode = eNOD,
+                 TErr* theErr = NULL);
+
+    //----------------------------------------------------------------------------
+    //! Read number of nodes in defined MED Mesh
+    virtual
+    TInt
+    GetNbNodes(const TMeshInfo& theMeshInfo,
+               TErr* theErr = NULL) = 0;
+    
+    virtual
+    TInt
+    GetNbNodes(const TMeshInfo& theMeshInfo,
+               ETable theTable,
+               TErr* theErr = NULL)
+    {
+      return 0;
+    }
+
+    //! Read a MEDWrapper MED Nodes representation from defined MED file
+    virtual
+    void
+    GetNodeInfo(TNodeInfo& theInfo,
+                TErr* theErr = NULL) = 0;
+
+    //! Write the MEDWrapper MED Nodes representation into defined MED file
+    virtual 
+    void
+    SetNodeInfo(const TNodeInfo& theInfo,
+                TErr* theErr = NULL) = 0;
+    
+    //! Creates a MEDWrapper MED Nodes representation
+    virtual 
+    PElemInfo
+    CrElemInfo(const PMeshInfo& theMeshInfo, 
+               TInt theNbElem,
+               EBooleen theIsElemNum = eVRAI,
+               EBooleen theIsElemNames = eVRAI)
+    {
+      return PElemInfo();
+    }
+
+    //! Creates a MEDWrapper MED Nodes representation
+    virtual 
+    PElemInfo
+    CrElemInfo(const PMeshInfo& theMeshInfo, 
+               TInt theNbElem,
+               const TIntVector& theFamNum,
+               const TIntVector& aElemNum,
+               const TStringVector& aElemNames)
+    {
+      return PElemInfo();
+    }
+
+    //! Creates a MEDWrapper MED Nodes representation
+    virtual
+    PNodeInfo
+    CrNodeInfo(const PMeshInfo& theMeshInfo, 
+               TInt theNbElem,
+               EModeSwitch theMode = eFULL_INTERLACE,
+               ERepere theSystem = eCART, 
+               EBooleen theIsElemNum = eVRAI,
+               EBooleen theIsElemNames = eVRAI) = 0;
+
+    //! Creates a MEDWrapper MED Nodes representation
+    virtual 
+    PNodeInfo
+    CrNodeInfo(const PMeshInfo& theMeshInfo, 
+               const TFloatVector& theNodeCoords,
+               EModeSwitch theMode = eFULL_INTERLACE,
+               ERepere theSystem = eCART, 
+               const TStringVector& theCoordNames = TStringVector(),
+               const TStringVector& theCoordUnits = TStringVector(),
+               const TIntVector& theFamilyNums = TIntVector(),
+               const TIntVector& theElemNums = TIntVector(),
+               const TStringVector& theElemNames = TStringVector()) = 0;
+    
+    //! A copy-constructor for the MEDWrapper MED Nodes representation
+    virtual
+    PNodeInfo
+    CrNodeInfo(const PMeshInfo& theMeshInfo,
+               const PNodeInfo& theInfo) = 0;
+    
+    //! Read a MEDWrapper MED Nodes representation from defined MED file
+    PNodeInfo
+    GetPNodeInfo(const PMeshInfo& theMeshInfo,
+                 TErr* theErr = NULL);
+    
+    //----------------------------------------------------------------------------
+    //! Read a MEDWrapper MED Polygones representation from defined MED file
+    /*! This feature is supported only for version of 2.2 and higher */
+    virtual
+    void
+    GetPolygoneInfo(TPolygoneInfo& theInfo,
+                    TErr* theErr = NULL) 
+    {}
+
+    //! Write a MEDWrapper MED Polygones representation from defined MED file
+    /*! This feature is supported only for version of 2.2 and higher */
+    virtual
+    void
+    SetPolygoneInfo(const TPolygoneInfo& theInfo,
+                    TErr* theErr = NULL) 
+    {}
+
+    //! Read number of MED Polygones in defined MED Mesh
+    /*! This feature is supported only for version of 2.2 and higher */
+    virtual
+    TInt
+    GetNbPolygones(const TMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   EConnectivite theConnMode = eNOD,
+                   TErr* theErr = NULL) 
+    { 
+      return 0;
+    }
+
+    //! Read connectivity infroamtion for the MED Polygones in defined MED Mesh
+    /*! This feature is supported only for version of 2.2 and higher */
+    virtual
+    TInt
+    GetPolygoneConnSize(const TMeshInfo& theMeshInfo,
+                        EEntiteMaillage theEntity,
+                        EGeometrieElement theGeom,
+                        EConnectivite theConnMode = eNOD,
+                        TErr* theErr = NULL)
+    { 
+      return 0;
+    }
+    
+    //! Creates a MEDWrapper MED Polygones representation
+    /*! This feature is supported only for version of 2.2 and higher */
+    virtual 
+    PPolygoneInfo
+    CrPolygoneInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theConnSize,
+                   EConnectivite theConnMode = eNOD,
+                   EBooleen theIsElemNum = eVRAI,
+                   EBooleen theIsElemNames = eVRAI)
+    {
+      return PPolygoneInfo();
+    }
+    
+    //! Creates a MEDWrapper MED Polygones representation
+    /*! This feature is supported only for version of 2.2 and higher */
+    virtual
+    PPolygoneInfo 
+    CrPolygoneInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode = eNOD,
+                   const TIntVector& theFamilyNums = TIntVector(),
+                   const TIntVector& theElemNums = TIntVector(),
+                   const TStringVector& theElemNames = TStringVector())
+    {
+      return PPolygoneInfo();
+    }
+
+    //! A copy-constructor for the MEDWrapper MED Polygones representation
+    virtual
+    PPolygoneInfo
+    CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   const PPolygoneInfo& theInfo)
+    {
+      return PPolygoneInfo();
+    }
+    
+    //! Read a MEDWrapper MED Polygones representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    PPolygoneInfo
+    GetPPolygoneInfo(const PMeshInfo& theMeshInfo,
+                     EEntiteMaillage theEntity, 
+                     EGeometrieElement theGeom, 
+                     EConnectivite theConnMode = eNOD);
+    
+    //----------------------------------------------------------------------------
+    //! Read a MEDWrapper MED Polyedres representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual 
+    void
+    GetPolyedreInfo(TPolyedreInfo& theInfo,
+                    TErr* theErr = NULL) 
+    {}
+
+    //! Write a MEDWrapper MED Polyedres representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    void
+    SetPolyedreInfo(const TPolyedreInfo& theInfo,
+                    TErr* theErr = NULL)
+    {}
+    
+    //! Read number of MED Polyedres in defined MED Mesh
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    TInt
+    GetNbPolyedres(const TMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   EConnectivite theConnMode = eNOD,
+                   TErr* theErr = NULL)
+    { 
+      return 0;
+    }
+
+    //! Read connectivity infroamtion for the MED Polyedres in defined MED Mesh
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual 
+    void
+    GetPolyedreConnSize(const TMeshInfo& theMeshInfo,
+                        TInt& theNbFaces,
+                        TInt& theConnSize,
+                        EConnectivite theConnMode = eNOD,
+                        TErr* theErr = NULL)
+    {
+      theNbFaces = theConnSize = 0;
+    }
+    
+    virtual
+    PPolyedreInfo
+    CrPolyedreInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theNbFaces,
+                   TInt theConnSize,
+                   EConnectivite theConnMode = eNOD,
+                   EBooleen theIsElemNum = eVRAI,
+                   EBooleen theIsElemNames = eVRAI)
+    {
+      return PPolyedreInfo();
+    }
+    
+    //! Creates a MEDWrapper MED Polyedres representation
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PPolyedreInfo
+    CrPolyedreInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theFaces,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode = eNOD,
+                   const TIntVector& theFamilyNums = TIntVector(),
+                   const TIntVector& theElemNums = TIntVector(),
+                   const TStringVector& theElemNames = TStringVector())
+    {
+      return PPolyedreInfo();
+    }
+
+    //! A copy-constructor for the MEDWrapper MED Polyedres representation
+    virtual
+    PPolyedreInfo
+    CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   const PPolyedreInfo& theInfo)
+    {
+      return PPolyedreInfo();
+    }
+    
+    //! Read a MEDWrapper MED Polyedres representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    PPolyedreInfo
+    GetPPolyedreInfo(const PMeshInfo& theMeshInfo,
+                     EEntiteMaillage theEntity, 
+                     EGeometrieElement theGeom, 
+                     EConnectivite theConnMode = eNOD);
+    
+    //----------------------------------------------------------------------------
+    //! Get TEntityInfo which contains brief information about existing cells and their destribution among MED ENTITIES
+    virtual
+    TEntityInfo
+    GetEntityInfo(const TMeshInfo& theMeshInfo,
+                  EConnectivite theConnMode = eNOD,
+                  TErr* theErr = NULL) = 0;
+    
+    //! Read number of cells for defined MED Mesh, ENTITY and geometrical type with define mode of connectivity
+    virtual
+    TInt
+    GetNbCells(const TMeshInfo& theMeshInfo, 
+               EEntiteMaillage theEntity, 
+               EGeometrieElement theGeom, 
+               EConnectivite theConnMode = eNOD,
+               TErr* theErr = NULL) = 0;
+    
+    //! Read a MEDWrapper MED Cells representation from defined MED file
+    virtual
+    void
+    GetCellInfo(TCellInfo& theInfo,
+                TErr* theErr = NULL) = 0;
+    
+    //! Write the MEDWrapper MED Cells representation into defined MED file
+    virtual 
+    void
+    SetCellInfo(const TCellInfo& theInfo,
+                TErr* theErr = NULL) = 0;
+    
+    //! Creates a MEDWrapper MED Cells representation
+    virtual
+    PCellInfo
+    CrCellInfo(const PMeshInfo& theMeshInfo, 
+               EEntiteMaillage theEntity, 
+               EGeometrieElement theGeom,
+               TInt theNbElem,
+               EConnectivite theConnMode = eNOD,
+               EBooleen theIsElemNum = eVRAI,
+               EBooleen theIsElemNames = eVRAI,
+               EModeSwitch theMode = eFULL_INTERLACE) = 0;
+    
+    //! Creates a MEDWrapper MED Cells representation
+    virtual
+    PCellInfo
+    CrCellInfo(const PMeshInfo& theMeshInfo, 
+               EEntiteMaillage theEntity, 
+               EGeometrieElement theGeom,
+               const TIntVector& theConnectivities,
+               EConnectivite theConnMode = eNOD,
+               const TIntVector& theFamilyNums = TIntVector(),
+               const TIntVector& theElemNums = TIntVector(),
+               const TStringVector& theElemNames = TStringVector(),
+               EModeSwitch theMode = eFULL_INTERLACE) = 0;
+    
+    //! A copy-constructor for the MEDWrapper MED Cells representation
+    virtual
+    PCellInfo
+    CrCellInfo(const PMeshInfo& theMeshInfo,
+               const PCellInfo& theInfo) = 0;
+    
+    //! Read a MEDWrapper MED Cells representation from defined MED file
+    PCellInfo
+    GetPCellInfo(const PMeshInfo& theMeshInfo,
+                 EEntiteMaillage theEntity, 
+                 EGeometrieElement theGeom, 
+                 EConnectivite theConnMode = eNOD,
+                 TErr* theErr = NULL);
+
+    //----------------------------------------------------------------------------
+    //! Read number of balls in the Mesh
+    /*! This feature is supported since version 3.0 */
+    virtual
+    TInt
+    GetNbBalls(const TMeshInfo& theMeshInfo)
+    {
+      return 0;
+    }
+
+    //! Read a MEDWrapped representation of MED_BALL from the MED file
+    /*! This feature is supported since version 3.0 */
+    virtual
+    void
+    GetBallInfo(TBallInfo& theInfo,
+                TErr* theErr = NULL) 
+    {}
+
+    //! Write a MEDWrapped representation of MED_BALL to the MED file
+    /*! This feature is supported since version 3.0 */
+    virtual
+    void
+    SetBallInfo(const TBallInfo& theInfo,
+                TErr* theErr = NULL) 
+    {}
+
+    //! Creates a MEDWrapper MED Balls representation
+    /*! This feature is supported since version 3.0 */
+    virtual 
+    PBallInfo
+    CrBallInfo(const PMeshInfo& theMeshInfo, 
+               TInt             theNbBalls,
+               EBooleen         theIsElemNum = eVRAI)
+    {
+      return PBallInfo();
+    }
+
+    //! Creates a MEDWrapper MED Balls representation
+    /*! This feature is supported since version 3.0 */
+    virtual
+    PBallInfo 
+    CrBallInfo(const PMeshInfo&  theMeshInfo, 
+               const TIntVector& theNodes,
+               TFloatVector&     theDiameters,
+               const TIntVector& theFamilyNums = TIntVector(),
+               const TIntVector& theElemNums = TIntVector())
+    {
+      return PBallInfo();
+    }
+
+    //! A copy-constructor for the MEDWrapped MED Balls representation
+    virtual
+    PBallInfo
+    CrBallInfo(const PMeshInfo& theMeshInfo,
+               const PBallInfo& theInfo)
+    {
+      return PBallInfo();
+    }
+    
+    //! Read a MEDWrapped MED Balls representation from defined MED file
+    /*! This feature is supported since version 3.0 */
+    virtual
+    PBallInfo
+    GetPBallInfo(const PMeshInfo& theMeshInfo);
+
+    //----------------------------------------------------------------------------
+    //! Read number of MED FIELDS in defined MED Mesh
+    virtual 
+    TInt
+    GetNbFields(TErr* theErr = NULL) = 0;
+    
+    //! Read number of components for the defined MED FIELD by its order number
+    virtual
+    TInt
+    GetNbComp(TInt theFieldId,
+              TErr* theErr = NULL) = 0;
+    
+    //! Read MEDWrapper MED FIELD representation by its order number
+    virtual 
+    void
+    GetFieldInfo(TInt theFieldId, 
+                 TFieldInfo& theInfo,
+                 TErr* theErr = NULL) = 0;
+
+    //! Write MEDWrapper MED FIELD representation into defined MED file
+    virtual 
+    void
+    SetFieldInfo(const TFieldInfo& theInfo,
+                 TErr* theErr = NULL) = 0;
+    
+
+    //! Creates a MEDWrapper MED FIELD representation
+    virtual 
+    PFieldInfo
+    CrFieldInfo(const PMeshInfo& theMeshInfo, 
+                TInt theNbComp = 0,
+                ETypeChamp theType = eFLOAT64,
+                const std::string& theValue = "",
+                EBooleen theIsLocal = eVRAI,
+                TInt theNbRef = 1) = 0;
+
+    //! A copy-constructor for the MEDWrapper MED FIELD representation
+    virtual 
+    PFieldInfo
+    CrFieldInfo(const PMeshInfo& theMeshInfo,
+                const PFieldInfo& theInfo) = 0;
+    
+    //! Read a MEDWrapper MED FIELD representation from defined MED file
+    PFieldInfo
+    GetPFieldInfo(const PMeshInfo& theMeshInfo, 
+                  TInt theId,
+                  TErr* theErr = NULL);
+
+
+    //----------------------------------------------------------------------------
+    //! Read number of MED GAUSS in defined MED Mesh
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual 
+    TInt
+    GetNbGauss(TErr* theErr = NULL)
+    { 
+      return TInt();
+    }
+
+    //! Read brief MED GAUSS information by its order number from defined MED Mesh
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual 
+    TGaussInfo::TInfo
+    GetGaussPreInfo(TInt theId, 
+                    TErr* theErr = NULL)
+    {
+      return TGaussInfo::TInfo( TGaussInfo::TKey(ePOINT1,""),0 );
+    }
+    
+    //! Read a MEDWrapper MED GAUSS representation by its order number from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual 
+    void
+    GetGaussInfo(TInt theId, 
+                 TGaussInfo& theInfo,
+                 TErr* theErr = NULL)
+    {}
+
+    //! Creates a MEDWrapper MED GAUSS representation
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PGaussInfo
+    CrGaussInfo(const TGaussInfo::TInfo& theInfo,
+                EModeSwitch theMode = eFULL_INTERLACE) = 0;
+
+
+    //----------------------------------------------------------------------------
+    //! Read number of MED TIMESTAMPS in defined MED Mesh
+    /*!
+      By the way some additional information can be obtained:
+      - to what MED ENTITY the MED TIMESTAMP conntected to;
+      - on what geometrical types the MED TIMESTAMP defined to.
+    */
+    virtual 
+    TInt
+    GetNbTimeStamps(const TFieldInfo& theInfo, 
+                    const TEntityInfo& theEntityInfo,
+                    EEntiteMaillage& theEntity,
+                    TGeom2Size& theGeom2Size,
+                    TErr* theErr = NULL) = 0;
+    
+    //! Read MEDWrapper MED TIMESTAMP representation by its order number
+    virtual 
+    void
+    GetTimeStampInfo(TInt theTimeStampId, 
+                     TTimeStampInfo& theInfo,
+                     TErr* theErr = NULL) = 0;
+
+    //! Creates a MEDWrapper MED TIMESTAMP representation
+    virtual 
+    PTimeStampInfo
+    CrTimeStampInfo(const PFieldInfo& theFieldInfo, 
+                    EEntiteMaillage theEntity,
+                    const TGeom2Size& theGeom2Size,
+                    const TGeom2NbGauss& theGeom2NbGauss = TGeom2NbGauss(),
+                    TInt theNumDt = 0,
+                    TInt theNumOrd = 0,
+                    TFloat theDt = 0,
+                    const std::string& theUnitDt = "",
+                    const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss()) = 0;
+
+    //! A copy-constructor for the MEDWrapper MED TIMESTAMP representation
+    virtual 
+    PTimeStampInfo 
+    CrTimeStampInfo(const PFieldInfo& theFieldInfo,
+                    const PTimeStampInfo& theInfo) = 0;
+    
+    //! Read MEDWrapper MED TIMESTAMP representation by its order number
+    PTimeStampInfo
+    GetPTimeStampInfo(const PFieldInfo& theFieldInfo,
+                      EEntiteMaillage theEntity,
+                      const TGeom2Size& theGeom2Size,
+                      TInt theId,
+                      TErr* theErr = NULL);
+    
+
+    //----------------------------------------------------------------------------
+    //! Read number of MED PROFILES in defined MED Mesh
+    virtual 
+    TInt
+    GetNbProfiles(TErr* theErr = NULL) = 0;
+
+    //! Read brief MED PROFILE information by its order number from defined MED Mesh
+    virtual 
+    TProfileInfo::TInfo
+    GetProfilePreInfo(TInt theId, 
+                      TErr* theErr = NULL) = 0;
+
+    //! Read a MEDWrapper MED PROFILE representation by its order number from defined MED file
+    virtual 
+    void
+    GetProfileInfo(TInt theId, 
+                   TProfileInfo& theInfo,
+                   TErr* theErr = NULL) = 0;
+
+    //! Creates a MEDWrapper MED PROFILE representation
+    virtual
+    PProfileInfo
+    CrProfileInfo(const TProfileInfo::TInfo& theInfo,
+                  EModeProfil theMode = eCOMPACT) = 0;
+
+    //! Write a MEDWrapper MED PROFILE representation
+    virtual
+    void
+    SetProfileInfo(const TProfileInfo& theInfo,
+                   TErr* theErr = NULL) = 0;
+
+    //! Read a MEDWrapper MED PROFILE representation by its order number from defined MED file
+    PProfileInfo
+    GetPProfileInfo(TInt theId,
+                    EModeProfil theMode = eCOMPACT,
+                    TErr* theErr = NULL);
+
+
+    //----------------------------------------------------------------------------
+    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    virtual 
+    void
+    GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      const TMKey2Profile& theMKey2Profile,
+                      const TKey2Gauss& theKey2Gauss,
+                      TErr* theErr = NULL) = 0;
+    
+    //! Write the values for MEDWrapper MED TIEMSTAMP to defined MED file
+    virtual 
+    void
+    SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      TErr* theErr = NULL) = 0;
+    
+    //! Creates the values for MEDWrapper MED TIEMSTAMP representation
+    virtual
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     ETypeChamp theTypeChamp,
+                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
+                     EModeSwitch theMode = eFULL_INTERLACE) = 0;
+
+    //! Creates the values for MEDWrapper MED TIEMSTAMP representation
+    virtual
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
+                     EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation
+    virtual 
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo,
+                     ETypeChamp theTypeChamp) = 0;
+    
+    //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation
+    virtual 
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo);
+    
+    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    PTimeStampValueBase
+    GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                       const TMKey2Profile& theMKey2Profile,
+                       const TKey2Gauss& theKey2Gauss,
+                       TErr* theErr = NULL);
+    
+    //----------------------------------------------------------------------------
+    // Backward compatibility  declarations
+    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    virtual 
+    void
+    GetTimeStampVal(const PTimeStampVal& theVal,
+                    const TMKey2Profile& theMKey2Profile,
+                    const TKey2Gauss& theKey2Gauss,
+                    TErr* theErr = NULL);
+    
+    //! Write the values for MEDWrapper MED TIEMSTAMP to defined MED file
+    virtual 
+    void
+    SetTimeStamp(const PTimeStampVal& theVal,
+                 TErr* theErr = NULL);
+    
+    //! Creates the values for MEDWrapper MED TIEMSTAMP representation
+    virtual
+    PTimeStampVal
+    CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                   const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
+                   EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation
+    virtual 
+    PTimeStampVal
+    CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                   const PTimeStampVal& theInfo);
+    
+    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    PTimeStampVal
+    GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                     const TMKey2Profile& theMKey2Profile,
+                     const TKey2Gauss& theKey2Gauss,
+                     TErr* theErr = NULL);
+
+    //----------------------------------------------------------------------------
+    //! Read a MEDWrapper MED Grille representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    PGrilleInfo
+    GetPGrilleInfo(const PMeshInfo& theMeshInfo);
+
+    //! Read a MEDWrapper MED Grille representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    PGrilleInfo
+    GetPGrilleInfo(const PMeshInfo& theMeshInfo,
+                   const PGrilleInfo& theInfo);
+
+    //! Read a MEDWrapper MED Grille representation from defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    void
+    GetGrilleInfo(TGrilleInfo& theInfo,
+                  TErr* theErr = NULL)
+    {}
+
+    //! Write the MEDWrapper MED Grille representation into defined MED file
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual 
+    void
+    SetGrilleInfo(const TGrilleInfo& theInfo,
+                  TErr* theErr = NULL)
+    {}
+
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const PGrilleInfo& theGrilleInfo)
+    {
+      return PGrilleInfo();
+    }
+
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo)
+    {
+      return PGrilleInfo();
+    }
+    
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type)
+    {
+      return PGrilleInfo();
+    }
+    
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const TInt& nbNodes)
+    {
+      return PGrilleInfo();
+    }
+
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const MED::TIntVector& nbNodeVec)
+    {
+      return PGrilleInfo();
+    }
+
+    /*! This feature is support only for version of 2.2 and higher */
+    virtual
+    void
+    GetGrilleType(const TMeshInfo& theMeshInfo,
+                  EGrilleType& type,
+                  TErr* theErr = NULL)
+    {
+    }
+    
+  };
+
+
+  //----------------------------------------------------------------------------
+  //! This class provide thread-safety for MEDWrapper interaction
+  class MEDWRAPPER_EXPORT TLockProxy
+  {
+    TLockProxy& operator=(const TLockProxy& );
+    TWrapper* myWrapper;
+
+  public:
+    TLockProxy(TWrapper* theWrapper);
+
+    ~TLockProxy();
+
+    TWrapper * operator-> () const;
+  };
+
+
+  //----------------------------------------------------------------------------
+  //! To specialize the SharedPtr for TWrapper
+  template<> 
+  class MEDWRAPPER_EXPORT SharedPtr<TWrapper>: public boost::shared_ptr<TWrapper>
+  {
+  public:
+    SharedPtr() {}
+
+    template<class Y>
+    explicit SharedPtr(Y * p): 
+      boost::shared_ptr<TWrapper>(p) 
+    {}
+
+    template<class Y>
+    SharedPtr(SharedPtr<Y> const & r):
+      boost::shared_ptr<TWrapper>(r,boost::detail::dynamic_cast_tag())
+    {}
+
+    template<class Y>
+    SharedPtr& 
+    operator=(SharedPtr<Y> const & r)
+    {
+      boost::shared_ptr<TWrapper>(r,boost::detail::dynamic_cast_tag()).swap(*this);
+      return *this;
+    }
+
+    template<class Y> 
+    SharedPtr& 
+    operator()(Y * p) // Y must be complete
+    {
+      return operator=<Y>(SharedPtr<Y>(p));
+    }
+
+    template<class Y> 
+    SharedPtr& 
+    operator()(SharedPtr<Y> const & r) // Y must be complete
+    {
+      return operator=<Y>(SharedPtr<Y>(r));
+    }
+
+    TLockProxy operator-> () const // never throws
+    {
+      return TLockProxy(this->get());
+    }
+    
+  protected:
+    operator const TWrapper& () const;
+
+    operator TWrapper& ();
+
+    TWrapper& operator* () const;
+
+    TWrapper * get() const // never throws
+    {
+      return boost::shared_ptr<TWrapper>::get();
+    }
+  };
+
+  //----------------------------------------------------------------------------
+  typedef SharedPtr<TWrapper> PWrapper;
+}
+
+#endif