📄 bzip2.cpp
字号:
SetError(errcode, GetBZip2ErrorDescription(errcode)); if ( errcode != BZ_OK && errcode != BZ_STREAM_END ) { ERR_POST(FormatErrorMessage("CBZip2CompressionFile::Write", false)); return -1; }; return len; }bool CBZip2CompressionFile::Close(void){ int errcode = BZ_OK; if ( m_File ) { if ( m_Mode == eMode_Read ) { BZ2_bzReadClose(&errcode, m_File); m_EOF = true; } else { BZ2_bzWriteClose(&errcode, m_File, 0, 0, 0); } m_File = 0; } SetError(errcode, GetBZip2ErrorDescription(errcode)); if ( m_FileStream ) { fclose(m_FileStream); m_FileStream = 0; } if ( errcode != BZ_OK ) { ERR_POST(FormatErrorMessage("CBZip2CompressionFile::Close", false)); return false; }; return true;}////////////////////////////////////////////////////////////////////////////////// CBZip2Compressor//CBZip2Compressor::CBZip2Compressor( ELevel level, int verbosity, int work_factor) : CBZip2Compression(level, verbosity, work_factor, 0){}CBZip2Compressor::~CBZip2Compressor(){}CCompressionProcessor::EStatus CBZip2Compressor::Init(void){ // Initialize members Reset(); SetBusy(); // Initialize the compressor stream structure memset(&m_Stream, 0, sizeof(m_Stream)); // Create a compressor stream int errcode = BZ2_bzCompressInit(&m_Stream, GetLevel(), m_Verbosity, m_WorkFactor); SetError(errcode, GetBZip2ErrorDescription(errcode)); if ( errcode == BZ_OK ) { return eStatus_Success; } ERR_POST(FormatErrorMessage("CBZip2Compressor::Init")); return eStatus_Error;}CCompressionProcessor::EStatus CBZip2Compressor::Process( const char* in_buf, unsigned long in_len, char* out_buf, unsigned long out_size, /* out */ unsigned long* in_avail, /* out */ unsigned long* out_avail){ m_Stream.next_in = const_cast<char*>(in_buf); m_Stream.avail_in = in_len; m_Stream.next_out = out_buf; m_Stream.avail_out = out_size; int errcode = BZ2_bzCompress(&m_Stream, BZ_RUN); SetError(errcode, GetBZip2ErrorDescription(errcode)); *in_avail = m_Stream.avail_in; *out_avail = out_size - m_Stream.avail_out; IncreaseProcessedSize(in_len - *in_avail); IncreaseOutputSize(*out_avail); if ( errcode == BZ_RUN_OK ) { return eStatus_Success; } ERR_POST(FormatErrorMessage("CBZip2Compressor::Process")); return eStatus_Error;}CCompressionProcessor::EStatus CBZip2Compressor::Flush( char* out_buf, unsigned long out_size, /* out */ unsigned long* out_avail){ if ( !out_size ) { return eStatus_Overflow; } m_Stream.next_in = 0; m_Stream.avail_in = 0; m_Stream.next_out = out_buf; m_Stream.avail_out = out_size; int errcode = BZ2_bzCompress(&m_Stream, BZ_FLUSH); SetError(errcode, GetBZip2ErrorDescription(errcode)); *out_avail = out_size - m_Stream.avail_out; IncreaseOutputSize(*out_avail); if ( errcode == BZ_RUN_OK ) { return eStatus_Success; } else if ( errcode == BZ_FLUSH_OK ) { return eStatus_Overflow; } ERR_POST(FormatErrorMessage("CBZip2Compressor::Flush")); return eStatus_Error;}CCompressionProcessor::EStatus CBZip2Compressor::Finish( char* out_buf, unsigned long out_size, /* out */ unsigned long* out_avail){ if ( !out_size ) { return eStatus_Overflow; } m_Stream.next_in = 0; m_Stream.avail_in = 0; m_Stream.next_out = out_buf; m_Stream.avail_out = out_size; int errcode = BZ2_bzCompress(&m_Stream, BZ_FINISH); SetError(errcode, GetBZip2ErrorDescription(errcode)); *out_avail = out_size - m_Stream.avail_out; IncreaseOutputSize(*out_avail); switch (errcode) { case BZ_FINISH_OK: return eStatus_Overflow; case BZ_STREAM_END: return eStatus_EndOfData; } ERR_POST(FormatErrorMessage("CBZip2Compressor::Finish")); return eStatus_Error;}CCompressionProcessor::EStatus CBZip2Compressor::End(void){ int errcode = BZ2_bzCompressEnd(&m_Stream); SetError(errcode, GetBZip2ErrorDescription(errcode)); SetBusy(false); if ( errcode == BZ_OK ) { return eStatus_Success; } ERR_POST(FormatErrorMessage("CBZip2Compressor::End")); return eStatus_Error;}////////////////////////////////////////////////////////////////////////////////// CBZip2Decompressor//CBZip2Decompressor::CBZip2Decompressor(int verbosity, int small_decompress) : CBZip2Compression(eLevel_Default, verbosity, 0, small_decompress){}CBZip2Decompressor::~CBZip2Decompressor(){}CCompressionProcessor::EStatus CBZip2Decompressor::Init(void){ // Initialize members Reset(); SetBusy(); // Initialize the decompressor stream structure memset(&m_Stream, 0, sizeof(m_Stream)); // Create a compressor stream int errcode = BZ2_bzDecompressInit(&m_Stream, m_Verbosity, m_SmallDecompress); SetError(errcode, GetBZip2ErrorDescription(errcode)); if ( errcode == BZ_OK ) { return eStatus_Success; } ERR_POST(FormatErrorMessage("CBZip2Decompressor::Init")); return eStatus_Error;}CCompressionProcessor::EStatus CBZip2Decompressor::Process( const char* in_buf, unsigned long in_len, char* out_buf, unsigned long out_size, /* out */ unsigned long* in_avail, /* out */ unsigned long* out_avail){ if ( !out_size ) { return eStatus_Overflow; } m_Stream.next_in = const_cast<char*>(in_buf); m_Stream.avail_in = in_len; m_Stream.next_out = out_buf; m_Stream.avail_out = out_size; int errcode = BZ2_bzDecompress(&m_Stream); SetError(errcode, GetBZip2ErrorDescription(errcode)); *in_avail = m_Stream.avail_in; *out_avail = out_size - m_Stream.avail_out; IncreaseProcessedSize(in_len - *in_avail); IncreaseOutputSize(*out_avail); switch (errcode) { case BZ_OK: return eStatus_Success; case BZ_STREAM_END: return eStatus_EndOfData; } ERR_POST(FormatErrorMessage("CBZip2Decompressor::Process")); return eStatus_Error;}CCompressionProcessor::EStatus CBZip2Decompressor::Flush( char*, unsigned long, unsigned long*){ return eStatus_Success;}CCompressionProcessor::EStatus CBZip2Decompressor::Finish( char*, unsigned long, unsigned long*){ return eStatus_Success;}CCompressionProcessor::EStatus CBZip2Decompressor::End(void){ int errcode = BZ2_bzDecompressEnd(&m_Stream); SetBusy(false); if ( errcode == BZ_OK ) { return eStatus_Success; } ERR_POST(FormatErrorMessage("CBZip2Decompressor::End")); return eStatus_Error;}END_NCBI_SCOPE/* * =========================================================================== * $Log: bzip2.cpp,v $ * Revision 1000.2 2004/06/01 19:40:54 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9 * * Revision 1.9 2004/05/17 21:07:25 gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.8 2004/05/10 12:03:18 ivanov * The real changes in R1.7 was: * Added calls to increase the number of processed/output bytes. * * Revision 1.7 2004/05/10 11:56:08 ivanov * Added gzip file format support * * Revision 1.6 2004/04/01 14:14:03 lavr * Spell "occurred", "occurrence", and "occurring" * * Revision 1.5 2003/07/15 15:46:31 ivanov * Improved error diagnostics. Save status codes and it's description after * each compression operation, and ERR_POST it if error occurred. * * Revision 1.4 2003/07/10 16:26:23 ivanov * Implemented CompressFile/DecompressFile functions. * * Revision 1.3 2003/06/17 15:43:58 ivanov * Minor cosmetics and comments changes * * Revision 1.2 2003/06/03 20:09:16 ivanov * The Compression API redesign. Added some new classes, rewritten old. * * Revision 1.1 2003/04/07 20:21:35 ivanov * Initial revision * * =========================================================================== */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -