-// Copyright (C) 2007-2015 CEA/DEN, EDF R&D
+// Copyright (C) 2007-2024 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include "SauvReader.hxx"
#include "SauvMedConvertor.hxx"
-#include "MEDCouplingAutoRefCountObjectPtr.hxx"
+#include "MCAuto.hxx"
#include "NormalizedUnstructuredMesh.hxx"
#include "MEDCouplingRefCountObject.hxx"
#include <sstream>
#include <iostream>
-using namespace ParaMEDMEM;
+using namespace MEDCoupling;
using namespace SauvUtilities;
using namespace std;
#define GIBI_EQUAL(var_str, stat_str) (strncmp (var_str, stat_str, strlen(stat_str)) == 0)
+namespace
+{
+ class Localizer
+ {
+ std::string _locale;
+ public:
+ Localizer()
+ {
+ _locale = setlocale(LC_NUMERIC, NULL);
+ setlocale(LC_NUMERIC, "C");
+ }
+ ~Localizer()
+ {
+ setlocale(LC_NUMERIC, _locale.c_str());
+ }
+ };
+}
+
//================================================================================
/*!
* \brief Creates a reader of a given sauve file
{
if ( fileName.empty() ) THROW_IK_EXCEPTION("Invalid file name");
- ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr< SauvUtilities::FileReader> parser;
+ MEDCoupling::MCAuto< SauvUtilities::FileReader> parser;
// try to open as XRD
parser = new XDRReader( fileName.c_str() );
*/
//================================================================================
-ParaMEDMEM::MEDFileData * SauvReader::loadInMEDFileDS()
+MEDCoupling::MEDFileData * SauvReader::loadInMEDFileDS()
{
+ Localizer loc; // localization, to read numbers in "C" locale
+
SauvUtilities::IntermediateMED iMed; // intermadiate DS
_iMed = &iMed;
readRecord4();
else if (recordNumber == 7 )
readRecord7();
+ else if (recordNumber == 8 )
+ readRecord8();
else if (recordNumber == 5 )
break; // stop reading
else
THROW_IK_EXCEPTION("XDR : ENREGISTREMENT DE TYPE " << recordNumber << " not implemented!!!");
}
- ParaMEDMEM::MEDFileData* medFileData = iMed.convertInMEDFileDS();
+ MEDCoupling::MEDFileData* medFileData = iMed.convertInMEDFileDS();
return medFileData;
}
}
}
+//================================================================================
+/*!
+ * \brief Reads "ENREGISTREMENT DE TYPE 8"
+ */
+//================================================================================
+
+void SauvReader::readRecord8()
+{
+ // This record is useless (a constant table)
+ // => we skip it
+ int info;
+ int nbIntToSkip;
+ if ( !isASCII() )
+ {
+ getInt();
+ info = getInt();
+ int i = 0;
+ if (info == 3) {
+ // castem >= 18
+ // 1 more line
+ nbIntToSkip = 145;
+ }
+ else
+ nbIntToSkip = 141;
+
+ while (i <= nbIntToSkip) {
+ getInt();
+ i ++;
+ }
+ }
+}
+
//================================================================================
/*!
* \brief Reads the pile number, nb of objects and nb named of objects
int SauvReader::readPileNumber(int& nbNamedObjects, int& nbObjects)
{
- // FORMAT(' PILE NUMERO',I4,'NBRE ObjectS NOMMES',I8,'NBRE ObjectS',I8)
+ // FORMAT(' PILE NUMERO',I4,'NBRE OBJETS NOMMES',I8,'NBRE OBJETS',I8)
int pileNumber;
if ( !isASCII() )
{
{
char* line;
getNextLine(line);
- const char *s1 = " PILE NUMERO", *s2 = "NBRE ObjectS NOMMES", *s3 = "NBRE ObjectS";
+ const char *s1 = " PILE NUMERO", *s2 = "NBRE OBJETS NOMMES", *s3 = "NBRE OBJETS";
if ( ! GIBI_EQUAL( line, s1 ) )
THROW_IK_EXCEPTION("Could not read the pile number " << lineNb() );
line = line + strlen(s1);
while ( isSwapped )
{
isSwapped = false;
- for ( size_t i = 1; i < groups.size(); ++i )
+ for ( std::size_t i = 1; i < groups.size(); ++i )
{
- int nbN1 = groups[i-1]->empty() ? 0 : groups[i-1]->_cells[0]->_nodes.size();
- int nbN2 = groups[i ]->empty() ? 0 : groups[i ]->_cells[0]->_nodes.size();
+ std::size_t nbN1 = groups[i-1]->empty() ? 0 : groups[i-1]->_cells[0]->_nodes.size();
+ std::size_t nbN2 = groups[i ]->empty() ? 0 : groups[i ]->_cells[0]->_nodes.size();
if ( nbN1 > nbN2 )
{
isSwapped = isModified = true;
const int fixedLength = 71;
while ((int)aWholeString.length() < stringLen)
{
- int remainLen = stringLen - aWholeString.length();
+ int remainLen = (int)(stringLen - aWholeString.length());
int len;
if ( remainLen > fixedLength )
{
while ((int)aWholeString.length() < stringLen)
{
getNextLine( line );
- int remainLen = stringLen - aWholeString.length();
+ int remainLen = (int)(stringLen - aWholeString.length());
if ( remainLen > fixedLength )
{
aWholeString += line + 1;