// -------------------------------------------------------------------------------------------------------------------
// --- MED file compatibility: write using a lower major version implies append on an empty file of the target version
+//
+// *******************************************************************************************************************
+// ==> This file must be modified when MED version changes:
+// MED_MAJOR_NUM and MED_MINOR_NUM are defined in an external include from MED prerequisite: med.h
+// When MED_MAJOR_NUM or MED_MINOR_NUM changes, MED_MAJOR_EXPECTED and MED_MINOR_EXPECTED must be set accordingly
+// and MED_VERSIONS_APPEND_COMPATIBLE must be updated: The lower compatible versions may change with a new MED version
+// If the major version of MED change (for instance 4 --> 5) and if MED allows to append meshes in MED-4.x format,
+// Empty file content for MED-4.x should be provided (EMPTY_FILE_4x) and method CreateEmptyMEDFile should be updated.
+// *******************************************************************************************************************
#define MED_MAJOR_EXPECTED 4
#define MED_MINOR_EXPECTED 0
#if MED_MAJOR_NUM != MED_MAJOR_EXPECTED
- #error "MED major version does not correspond to the expected version, fix the minor and major compatibility values in CheckCompatibility method (MED_VERSIONS_APPEND_COMPATIBLE) and set the correct expected version"
+ #error "MED major version does not correspond to the expected version, fix the minor and major compatibility values in CheckCompatibility method (MED_VERSIONS_APPEND_COMPATIBLE) and set the correct expected version (MED_MAJOR_EXPECTED, MED_MINOR_EXPECTED)"
#endif
#if MED_MINOR_NUM != MED_MINOR_EXPECTED
- #error "MED minor version does not correspond to the expected version, fix the minor and major compatibility values in CheckCompatibility method (MED_VERSIONS_APPEND_COMPATIBLE) and set the correct expected version"
+ #error "MED minor version does not correspond to the expected version, fix the minor and major compatibility values in CheckCompatibility method (MED_VERSIONS_APPEND_COMPATIBLE) and set the correct expected version above (MED_MAJOR_EXPECTED, MED_MINOR_EXPECTED)"
#endif
#define MED_VERSIONS_APPEND_COMPATIBLE {40, 32, 33} // --- 10*major + minor (the 3rd digit, release, is not used here,
// med uses always the latest available)
{
int mvok[] = MED_VERSIONS_APPEND_COMPATIBLE;
std::vector<int> MEDVersionsOK(mvok, mvok + sizeof(mvok)/sizeof(int));
+ int curVersion = MED_MAJOR_NUM * 10 + MED_MINOR_NUM;
+ if ( MEDVersionsOK[0] != curVersion )
+ MEDVersionsOK.insert( MEDVersionsOK.begin(), curVersion );
return MEDVersionsOK;
}
bool CheckCompatibility(const std::string& fileName, bool isForAppend)
{
bool ok = false;
- int medVersionsOK[] = MED_VERSIONS_APPEND_COMPATIBLE;
+ std::vector<int> medVersionsOK = GetMEDVersionsAppendCompatible();
// check that file is accessible
if ( exists(fileName) ) {
// check HDF5 && MED compatibility
ok = true;
else {
int medVersion = 10*major + minor;
- for (size_t ii=0; ii < sizeof(medVersionsOK)/sizeof(int); ii++)
+ for (size_t ii=0; ii < medVersionsOK.size(); ii++)
if (medVersionsOK[ii] == medVersion) {
ok =true;
break;
if (!CheckCompatibility(fileName)) {
EXCEPTION(std::runtime_error, "Cannot open file '"<<fileName<<"'.");
}
- return new MED::TWrapper(fileName);
+ return new MED::TWrapper(fileName, false);
}
PWrapper CrWrapperW(const std::string& fileName, int theVersion)
CreateEmptyMEDFile(fileName, theVersion);
}
}
- return new MED::TWrapper(fileName, minor);
+ return new MED::TWrapper(fileName, true, minor);
}
}