diff --git a/NgeReader.cpp b/NgeReader.cpp index b76c4d3..9a4eadf 100644 --- a/NgeReader.cpp +++ b/NgeReader.cpp @@ -17,6 +17,8 @@ #include "NgeKeyW.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EgtStringConverter.h" +#include "/EgtDev/Extern/zlib/Include/zlib.h" +#include using namespace std ; @@ -34,8 +36,12 @@ NgeReader::Init( const string& sFileIn) break ; case NGE_BINARY : m_bBinary = true ; - m_InFile.open( stringtoW( sFileIn), ios::in | ios::binary, _SH_DENYWR) ; - return ( ! m_InFile.fail()) ; + m_InFile = gzopen_w( stringtoW( sFileIn), "rb") ; + if ( m_InFile == nullptr) + return false ; + const int DIM_BUFFER = 65536 ; + gzbuffer( m_InFile, DIM_BUFFER) ; + return true ; break ; } return false ; @@ -46,10 +52,12 @@ bool NgeReader::Close( void) { if ( m_bBinary) { - bool bOk = ( m_InFile.good() && m_InFile.is_open()) ; - if ( m_InFile.is_open()) - m_InFile.close() ; - return bOk ; + if ( m_InFile != nullptr) { + bool bOk = ( gzclose( m_InFile) == Z_OK) ; + m_InFile = nullptr ; + return bOk ; + } + return true ; } else return m_Scan.Terminate() ; @@ -91,7 +99,7 @@ int NgeReader::GetCurrPos( void) { if ( m_bBinary) - return int( m_InFile.tellg()) ; + return int( gztell( m_InFile)) ; else return m_Scan.GetCurrLineNbr() ; } @@ -131,10 +139,9 @@ bool NgeReader::ReadUchar( unsigned char& ucVal, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &ucVal, sizeof( ucVal)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &ucVal, sizeof( ucVal)) != Z_ERRNO) ; } else { // recupero il token @@ -154,10 +161,9 @@ bool NgeReader::ReadBool( bool& bVal, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &bVal, sizeof( bVal)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &bVal, sizeof( bVal)) != Z_ERRNO) ; } else { // recupero il token @@ -173,10 +179,9 @@ bool NgeReader::ReadInt( int& nVal, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &nVal, sizeof( nVal)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &nVal, sizeof( nVal)) != Z_ERRNO) ; } else { // recupero il token @@ -203,10 +208,9 @@ bool NgeReader::ReadDouble( double& dVal, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &dVal, sizeof( dVal)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &dVal, sizeof( dVal)) != Z_ERRNO) ; } else { // recupero il token @@ -222,10 +226,9 @@ bool NgeReader::ReadVector( Vector3d& vtV, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &vtV.v, sizeof( vtV.v)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &vtV.v, sizeof( vtV.v)) != Z_ERRNO) ; } else { // recupero il token @@ -241,10 +244,9 @@ bool NgeReader::ReadPoint( Point3d& ptP, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &ptP.v, sizeof( ptP.v)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &ptP.v, sizeof( ptP.v)) != Z_ERRNO) ; } else { // recupero il token @@ -260,11 +262,10 @@ bool NgeReader::ReadPointW( Point3d& ptP, double& dW, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - m_InFile.read( (char*) &ptP.v, sizeof( ptP.v)) ; - m_InFile.read( (char*) &dW, sizeof( dW)) ; - return m_InFile.good() ; + return ( gzread( m_InFile, &ptP.v, sizeof( ptP.v)) != Z_ERRNO && + gzread( m_InFile, &dW, sizeof( dW)) != Z_ERRNO) ; } else { // recupero il token @@ -280,17 +281,13 @@ bool NgeReader::ReadFrame( Frame3d& frF, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; - Point3d ptOrig ; - m_InFile.read( (char*) &ptOrig.v, sizeof( ptOrig.v)) ; - Vector3d vtDirX ; - m_InFile.read( (char*) &vtDirX.v, sizeof( vtDirX.v)) ; - Vector3d vtDirY ; - m_InFile.read( (char*) &vtDirY.v, sizeof( vtDirY.v)) ; - Vector3d vtDirZ ; - m_InFile.read( (char*) &vtDirZ.v, sizeof( vtDirZ.v)) ; - if ( ! m_InFile.good()) + Point3d ptOrig ; Vector3d vtDirX, vtDirY, vtDirZ ; + if ( gzread( m_InFile, &ptOrig.v, sizeof( ptOrig.v)) == Z_ERRNO || + gzread( m_InFile, &vtDirX.v, sizeof( vtDirX.v)) == Z_ERRNO || + gzread( m_InFile, &vtDirY.v, sizeof( vtDirY.v)) == Z_ERRNO || + gzread( m_InFile, &vtDirZ.v, sizeof( vtDirZ.v)) == Z_ERRNO) return false ; return frF.Set( ptOrig, vtDirX, vtDirY, vtDirZ) ; } @@ -308,18 +305,20 @@ bool NgeReader::ReadString( string& sVal, const char* szSep, bool bEndL) { if ( m_bBinary) { + if ( m_InFile == nullptr) + return false ; const int MAX_STR_DIM = 65535 ; - if ( ! m_InFile.is_open()) - return false ; int nDim ; - m_InFile.read( (char*) &nDim, sizeof( nDim)) ; - if ( nDim > MAX_STR_DIM || ! m_InFile.good()) + if ( gzread( m_InFile, &nDim, sizeof( nDim)) == Z_ERRNO || nDim > MAX_STR_DIM) return false ; + if ( nDim == 0) { + sVal = "" ; + return true ; + } char* szBuff = new( nothrow) char[ nDim + 1] ; if ( szBuff == nullptr) return false ; - m_InFile.read( szBuff, nDim) ; - if ( ! m_InFile.good()) { + if ( gzread( m_InFile, szBuff, nDim) == Z_ERRNO) { delete[] szBuff ; return false ; } @@ -348,12 +347,11 @@ NgeReader::ReadKey( int& nKey) return true ; } if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; // leggo il dato int nVal ; - m_InFile.read( (char*) &nVal, sizeof( nVal)) ; - if ( ! m_InFile.good()) + if ( gzread( m_InFile, &nVal, sizeof( nVal)) == Z_ERRNO) return false ; // ricavo l'indice for ( int i = 0 ; i <= NGE_LAST_ID ; ++ i) { @@ -386,11 +384,10 @@ bool NgeReader::ReadCol( Color& cCol, const char* szSep, bool bEndL) { if ( m_bBinary) { - if ( ! m_InFile.is_open()) + if ( m_InFile == nullptr) return false ; unsigned char ucCol[4] ; - m_InFile.read( (char*) &ucCol, sizeof( ucCol)) ; - if ( ! m_InFile.good()) + if ( gzread( m_InFile, &ucCol, sizeof( ucCol)) == Z_ERRNO) return false ; cCol.Set( ucCol[0], ucCol[1], ucCol[2], ucCol[3]) ; return true ; diff --git a/NgeReader.h b/NgeReader.h index 7f39b98..0df0e9a 100644 --- a/NgeReader.h +++ b/NgeReader.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2014-2014 +// EgalTech 2014-2025 //---------------------------------------------------------------------------- -// File : NgeReader.h Data : 14.04.14 Versione : 1.5d5 +// File : NgeReader.h Data : 29.12.25 Versione : 2.7l6 // Contenuto : Dichiarazione della classe NgeReader. // // @@ -18,14 +18,16 @@ #include "/EgtDev/Include/EGkColor.h" #include "/EgtDev/Include/EGnScanner.h" #include "/EgtDev/Include/EgtStringBase.h" -#include + +struct gzFile_s ; //---------------------------------------------------------------------------- class NgeReader { public : NgeReader( void) - : m_iPosStart( std::string::npos), m_bUngetKey( false), m_nFileVer() {} + : m_bBinary( false), m_InFile( nullptr), m_iPosStart( std::string::npos), + m_bUngetKey( false), m_nLastKey(), m_nFileVer() {} ~NgeReader( void) { Close() ; } bool Init( const std::string& sFileIn) ; @@ -60,7 +62,7 @@ class NgeReader private : bool m_bBinary ; // per file binari - std::ifstream m_InFile ; + gzFile_s* m_InFile ; // per file ASCII Scanner m_Scan ; std::string::size_type m_iPosStart ; diff --git a/NgeWriter.cpp b/NgeWriter.cpp index 1328353..31a8ce7 100644 --- a/NgeWriter.cpp +++ b/NgeWriter.cpp @@ -90,7 +90,7 @@ NgeWriter::WriteUchar( unsigned char ucVal, const char* szSep, bool bEndL) if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &ucVal, sizeof( ucVal)) > 0) ; + return ( gzwrite( m_OutFile, &ucVal, sizeof( ucVal)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( ucVal).c_str(), szSep, bEndL) ; @@ -104,7 +104,7 @@ NgeWriter::WriteBool( bool bVal, const char* szSep, bool bEndL) if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &bVal, sizeof( bVal)) > 0) ; + return ( gzwrite( m_OutFile, &bVal, sizeof( bVal)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( bVal).c_str(), szSep, bEndL) ; @@ -118,7 +118,7 @@ NgeWriter::WriteInt( int nVal, const char* szSep, bool bEndL) if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &nVal, sizeof( nVal)) > 0) ; + return ( gzwrite( m_OutFile, &nVal, sizeof( nVal)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( nVal).c_str(), szSep, bEndL) ; @@ -132,7 +132,7 @@ NgeWriter::WriteDouble( double dVal, const char* szSep, bool bEndL, int nPrec) if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &dVal, sizeof( dVal)) > 0) ; + return ( gzwrite( m_OutFile, &dVal, sizeof( dVal)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( dVal, nPrec).c_str(), szSep, bEndL) ; @@ -147,7 +147,7 @@ NgeWriter::WriteString( const string& sVal, const char* szSep, bool bEndL) if ( m_OutFile == nullptr) return false ; int nDim = ssize( sVal) ; - return ( gzwrite( m_OutFile, (char*) &nDim, sizeof( nDim)) > 0 && + return ( gzwrite( m_OutFile, &nDim, sizeof( nDim)) > 0 && ( nDim == 0 || gzwrite( m_OutFile, sVal.c_str(), sVal.size()) > 0)) ; } else { @@ -162,7 +162,7 @@ NgeWriter::WriteVector( const Vector3d& vtV, const char* szSep, bool bEndL, int if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &vtV.v, sizeof( vtV.v)) > 0) ; + return ( gzwrite( m_OutFile, &vtV.v, sizeof( vtV.v)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( vtV, nPrec).c_str(), szSep, bEndL) ; @@ -176,7 +176,7 @@ NgeWriter::WritePoint( const Point3d& ptP, const char* szSep, bool bEndL, int nP if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &ptP.v, sizeof( ptP.v)) > 0) ; + return ( gzwrite( m_OutFile, &ptP.v, sizeof( ptP.v)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( ptP, nPrec).c_str(), szSep, bEndL) ; @@ -190,8 +190,8 @@ NgeWriter::WritePointW( const Point3d& ptP, double dW, const char* szSep, bool b if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &ptP.v, sizeof( ptP.v)) > 0 && - gzwrite( m_OutFile, (char*) &dW, sizeof( dW)) > 0) ; + return ( gzwrite( m_OutFile, &ptP.v, sizeof( ptP.v)) > 0 && + gzwrite( m_OutFile, &dW, sizeof( dW)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( ptP, dW, nPrecP, nPrecW).c_str(), szSep, bEndL) ; @@ -205,10 +205,10 @@ NgeWriter::WriteFrame( const Frame3d& frF, const char* szSep, bool bEndL, int nP if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &frF.Orig().v, sizeof( frF.Orig().v)) > 0 && - gzwrite( m_OutFile, (char*) &frF.VersX().v, sizeof( frF.VersX().v)) > 0 && - gzwrite( m_OutFile, (char*) &frF.VersY().v, sizeof( frF.VersY().v)) > 0 && - gzwrite( m_OutFile, (char*) &frF.VersZ().v, sizeof( frF.VersZ().v)) > 0) ; + return ( gzwrite( m_OutFile, &frF.Orig().v, sizeof( frF.Orig().v)) > 0 && + gzwrite( m_OutFile, &frF.VersX().v, sizeof( frF.VersX().v)) > 0 && + gzwrite( m_OutFile, &frF.VersY().v, sizeof( frF.VersY().v)) > 0 && + gzwrite( m_OutFile, &frF.VersZ().v, sizeof( frF.VersZ().v)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( frF, nPrecP, nPrecV).c_str(), szSep, bEndL) ; @@ -225,7 +225,7 @@ NgeWriter::WriteKey( int nKey) if ( m_bBinary) { if ( m_OutFile == nullptr) return false ; - return ( gzwrite( m_OutFile, (char*) &NgeBinKeyW[nKey], sizeof( int)) > 0) ; + return ( gzwrite( m_OutFile, &NgeBinKeyW[nKey], sizeof( int)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, NgeAscKeyW[nKey].c_str(), nullptr, true) ; @@ -244,7 +244,7 @@ NgeWriter::WriteCol( const Color& cCol, const char* szSep, bool bEndL) ucCol[1] = cCol.GetIntGreen() ; ucCol[2] = cCol.GetIntBlue() ; ucCol[3] = cCol.GetIntAlpha() ; - return ( gzwrite( m_OutFile, (char*) ucCol, sizeof( ucCol)) > 0) ; + return ( gzwrite( m_OutFile, ucCol, sizeof( ucCol)) > 0) ; } else { return WriteStringOutTxt( m_OutFile, ToString( cCol).c_str(), szSep, bEndL) ; diff --git a/NgeWriter.h b/NgeWriter.h index 63b0139..ae2b95a 100644 --- a/NgeWriter.h +++ b/NgeWriter.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2014-2014 +// EgalTech 2014-2025 //---------------------------------------------------------------------------- -// File : NgeWriter.h Data : 12.04.14 Versione : 1.5d5 +// File : NgeWriter.h Data : 29.12.25 Versione : 2.7l6 // Contenuto : Dichiarazione della classe NgeWriter. // //