⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bzip2.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -