MED fichier
MEDfileVersion.cxx
Aller à la documentation de ce fichier.
1 /* This file is part of MED.
2  *
3  * COPYRIGHT (C) 1999 - 2016 EDF R&D, CEA/DEN
4  * MED is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * MED is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with MED. If not, see <http://www.gnu.org/licenses/>.
16  */
17 #include "MEDfileVersion.hxx"
18 #include <med_config.h>
19 #include <med_outils.h>
20 
21 using namespace std;
22 
24 
26  static MED_FILE_VERSION obj;
27  return obj;
28 }
29 
31 
32 extern "C" valueType _MEDfileVersion(const med_idt oid) {
33 
34  map<keyType, valueType >::const_iterator it;
35  fileNo key=0;
36  static med_file_version _fileversion = MED_FILE_VERSION_INIT;
37  static const med_file_version _med_file_version_null = MED_FILE_VERSION_INIT;
38  med_idt gid=0;
39 
40  if ( _MEDfichierNo(oid,&key) < 0 ) return _med_file_version_null;
41 
42  it = MedfileVersion.find(key);
43 
44  if (it != MedfileVersion.end() ) return (*it).second;
45 
46  /* On ouvre le group ou se trouvent les infos à la racine du fichier,
47  puis au niveau de l'objet courant */
48  if ((gid = _MEDdatagroupOuvrir(oid,MED_INFOS)) < 0) {
49  if ((gid = _MEDdatagroupOuvrir(oid,&MED_INFOS[1])) < 0) {
50  // Ne stocke pas la clé du fichier dans le cache car la structure MED_INFOS n'a pas été // trouvée. Elle pourrait l'être par un autre appel avec un autre oid (fichiers HDF contenants une structure MED) return _med_file_version_null; } } else { if ( _MEDattrEntierLire(gid,MED_NOM_MAJEUR ,&_fileversion.majeur ) < 0) return _med_file_version_null; if ( _MEDattrEntierLire(gid,MED_NOM_MINEUR ,&_fileversion.mineur ) < 0) return _med_file_version_null; if ( _MEDattrEntierLire(gid,MED_NOM_RELEASE,&_fileversion.release) < 0) return _med_file_version_null; if ( _MEDdatagroupFermer(gid) < 0) return _med_file_version_null; } // ISCRUTE(_fileversion.majeur ); // ISCRUTE(_fileversion.mineur ); // ISCRUTE(_fileversion.release ); return (MedfileVersion[key]=_fileversion); } extern "C" med_err _MEDfileVersionSetCache(const med_idt oid,const valueType v) { med_err _ret=-1; map<keyType, valueType >::const_iterator it; fileNo key=0; /* static med_file_version _fileversion = MED_FILE_VERSION_INIT;*/ if ( _MEDfichierNo(oid,&key) < 0 ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_FILE,""); ISCRUTE_int(oid); goto ERROR; } it = MedfileVersion.find(key); if ( it != MedfileVersion.end() ) MedfileVersion[key]=v; else { MED_ERR_(_ret,MED_ERR_INIT,MED_ERR_FILE,""); ISCRUTE_int(oid); goto ERROR; } _ret=0; ERROR: return _ret; }
51  // trouvée. Elle pourrait l'être par un autre appel avec un autre oid (fichiers HDF contenants une structure MED)
52  return _med_file_version_null;
53  }
54  } else {
55  if ( _MEDattrEntierLire(gid,MED_NOM_MAJEUR ,&_fileversion.majeur ) < 0) return _med_file_version_null;
56  if ( _MEDattrEntierLire(gid,MED_NOM_MINEUR ,&_fileversion.mineur ) < 0) return _med_file_version_null;
57  if ( _MEDattrEntierLire(gid,MED_NOM_RELEASE,&_fileversion.release) < 0) return _med_file_version_null;
58  if ( _MEDdatagroupFermer(gid) < 0) return _med_file_version_null;
59  }
60 
61 // ISCRUTE(_fileversion.majeur );
62 // ISCRUTE(_fileversion.mineur );
63 // ISCRUTE(_fileversion.release );
64 
65  return (MedfileVersion[key]=_fileversion);
66 
67 }
68 
69 extern "C" med_err _MEDfileVersionSetCache(const med_idt oid,const valueType v) {
70 
71  med_err _ret=-1;
72 
73  map<keyType, valueType >::const_iterator it;
74  fileNo key=0;
75  /* static med_file_version _fileversion = MED_FILE_VERSION_INIT;*/
76 
77  if ( _MEDfichierNo(oid,&key) < 0 ) {
79  ISCRUTE_int(oid);
80  goto ERROR;
81  }
82 
83  it = MedfileVersion.find(key);
84 
85  if ( it != MedfileVersion.end() )
86  MedfileVersion[key]=v;
87  else {
89  ISCRUTE_int(oid);
90  goto ERROR;
91  }
92 
93  _ret=0;
94  ERROR:
95  return _ret;
96 }
#define MED_FILE_VERSION_INIT
Definition: med.h:359
#define MED_ERR_FILE
Definition: med_err.h:81
herr_t med_err
Definition: med.h:310
#define MED_NOM_MINEUR
Definition: med_outils.h:30
unsigned long fileNo
med_int majeur
Definition: med.h:357
#define MED_NOM_RELEASE
Definition: med_outils.h:31
#define ISCRUTE_int(entier)
Definition: med_utils.h:307
STL namespace.
#define MED_ERR_UNRECOGNIZED
Definition: med_err.h:36
Structure d'acceuil du numéro de version MED d'un fichier.
Definition: med.h:356
valueType _MEDfileVersion(const med_idt oid)
static MED_FILE_VERSION & Instance()
med_err _MEDfileVersionSetCache(const med_idt oid, const valueType v)
med_int mineur
Definition: med.h:357
MEDC_EXPORT med_err _MEDdatagroupFermer(med_idt id)
#define MED_INFOS
Definition: med_outils.h:246
MEDC_EXPORT med_idt _MEDdatagroupOuvrir(med_idt pid, const char *const nom)
#define MED_NOM_MAJEUR
Definition: med_outils.h:29
hid_t med_idt
Definition: med.h:309
static MED_FILE_VERSION & MedfileVersion
#define _MEDattrEntierLire(x, y, z)
Definition: med_hdfi.h:64
med_bool
Definition: med.h:240
MEDC_EXPORT med_err _MEDfichierNo(med_idt id, unsigned long *fileno)
Definition: MEDfichierNo.c:33
#define MED_ERR_INIT
Definition: med_err.h:30
#define MED_ERR_(rt, r1, r2, r3)
Definition: med_utils.h:158
med_int release
Definition: med.h:357