/* * utility.h * * Created on: Jun 24, 2013 * Author: lijunhui */ #ifndef UTILITY_H_ #define UTILITY_H_ #include #include #include #include #include #include using namespace std; typedef std::unordered_map MapString2Int; typedef std::unordered_map MapString2Float; typedef std::unordered_map::iterator MapString2FloatIterator; using namespace std; struct SFReader { SFReader( ){ } virtual ~SFReader( ){ } virtual bool fnReadNextLine( char *pszLine, int* piLength ) = 0; virtual bool fnReadNextLine(string& strLine) = 0; }; struct STxtFileReader: public SFReader { STxtFileReader(const char* pszFname) { m_fpIn = fopen(pszFname, "r"); assert(m_fpIn != NULL); } ~STxtFileReader() { if (m_fpIn != NULL) fclose(m_fpIn); } bool fnReadNextLine(char *pszLine, int* piLength) { if (feof(m_fpIn) == true) return false; int iLen; pszLine[ 0 ] = '\0'; fgets(pszLine, 10001, m_fpIn); iLen = strlen(pszLine); if (iLen == 0) return false; while (iLen > 0 && pszLine[iLen - 1] > 0 && pszLine[iLen -1] < 33) { pszLine[ iLen - 1 ] = '\0'; iLen--; } if ( piLength != NULL ) (*piLength) = iLen; return true; } bool fnReadNextLine(string& strLine) { char *pszLine = new char[10001]; bool bOut = fnReadNextLine(pszLine, NULL); if (bOut) strLine = string(pszLine); else strLine = string(""); delete [] pszLine; return bOut; } private: FILE *m_fpIn; }; struct SGZFileReader: public SFReader { SGZFileReader(const char* pszFname) { m_fpIn = gzopen( pszFname, "r" ); assert(m_fpIn != NULL); } ~SGZFileReader() { if (m_fpIn != NULL) gzclose(m_fpIn); } bool fnReadNextLine(char *pszLine, int* piLength) { if ( m_fpIn == NULL ) exit( 0 ); if ( gzeof( m_fpIn ) == true ) return false; int iLen; pszLine[ 0 ] = '\0'; gzgets( m_fpIn, pszLine, 10001 ); iLen = strlen( pszLine ); while ( iLen > 0 && pszLine[ iLen - 1 ] > 0 && pszLine[ iLen -1 ] < 33 ) { pszLine[ iLen - 1 ] = '\0'; iLen--; } if ( piLength != NULL ) (*piLength) = iLen; return true; } bool fnReadNextLine(string& strLine) { char *pszLine = new char[10001]; bool bOut = fnReadNextLine(pszLine, NULL); if (bOut) strLine = string(pszLine); else strLine = string(""); delete [] pszLine; return bOut; } private: gzFile m_fpIn; }; #endif /* UTILITY_H_ */