compress.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:5k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: compress.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:40:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: compress.cpp,v 1000.1 2004/06/01 19:40:57 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Vladimir Ivanov
  35.  *
  36.  * File Description:  The Compression API
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <util/compress/compress.hpp>
  41. BEGIN_NCBI_SCOPE
  42. //////////////////////////////////////////////////////////////////////////////
  43. //
  44. // CCompression
  45. //
  46. CCompression::CCompression(ELevel level)
  47.     : m_Level(level), m_ErrorCode(0), m_ErrorMsg(kEmptyStr), m_Flags(0)
  48. {
  49.     return;
  50. }
  51. CCompression::~CCompression(void)
  52. {
  53.     return;
  54. }
  55. CCompression::ELevel CCompression::GetLevel(void) const
  56. {
  57.     if ( m_Level == eLevel_Default) {
  58.         return GetDefaultLevel();
  59.     }
  60.     return m_Level;
  61. }
  62. bool CCompression::x_CompressFile(const string&     src_file,
  63.                                   CCompressionFile& dst_file,
  64.                                   size_t            buf_size)
  65. {
  66.     if ( !buf_size ) {
  67.         return false;
  68.     }
  69.     char* buffer;
  70.     CNcbiIfstream is(src_file.c_str());
  71.     if ( !is.good() ) {
  72.         return false;
  73.     }
  74.     buffer = new char[buf_size];
  75.     if ( !buffer ) {
  76.         return false;
  77.     }
  78.     while ( is ) {
  79.         is.read(buffer, buf_size);
  80.         size_t nread = is.gcount();
  81.         size_t nwritten = dst_file.Write(buffer, nread); 
  82.         if ( nwritten != nread ) {
  83.             delete buffer;
  84.             return false;
  85.         }
  86.     }
  87.     delete buffer;
  88.     return true;
  89. }
  90. bool CCompression::x_DecompressFile(CCompressionFile& src_file,
  91.                                     const string&     dst_file,
  92.                                     size_t            buf_size)
  93. {
  94.     if ( !buf_size ) {
  95.         return false;
  96.     }
  97.     char* buffer;
  98.     CNcbiOfstream os(dst_file.c_str());
  99.     if ( !os.good() ) {
  100.         return false;
  101.     }
  102.     buffer = new char[buf_size];
  103.     if ( !buffer ) {
  104.         return false;
  105.     }
  106.     int nread;
  107.     while ( (nread = src_file.Read(buffer, buf_size)) > 0 ) {
  108.         os.write(buffer, nread);
  109.         if ( !os.good() ) {
  110.             delete buffer;
  111.             return false;
  112.         }
  113.     }
  114.     delete buffer;
  115.     return true;
  116. }
  117. //////////////////////////////////////////////////////////////////////////////
  118. //
  119. // CCompressionProcessor
  120. //
  121. CCompressionProcessor::CCompressionProcessor(void)
  122. {
  123.     Reset();
  124.     return;
  125. }
  126. CCompressionProcessor::~CCompressionProcessor(void)
  127. {
  128.     return;
  129. }
  130. //////////////////////////////////////////////////////////////////////////////
  131. //
  132. // CCompressionFile
  133. //
  134. CCompressionFile::CCompressionFile(void)
  135.     : m_File(0), m_Mode(eMode_Read)
  136. {
  137.     return;
  138. }
  139. CCompressionFile::~CCompressionFile(void)
  140. {
  141.     return;
  142. }
  143. END_NCBI_SCOPE
  144. /*
  145.  * ===========================================================================
  146.  * $Log: compress.cpp,v $
  147.  * Revision 1000.1  2004/06/01 19:40:57  gouriano
  148.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  149.  *
  150.  * Revision 1.7  2004/05/17 21:07:25  gorelenk
  151.  * Added include of PCH ncbi_pch.hpp
  152.  *
  153.  * Revision 1.6  2004/05/10 11:56:08  ivanov
  154.  * Added gzip file format support
  155.  *
  156.  * Revision 1.5  2003/07/15 15:50:50  ivanov
  157.  * Improved error diagnostics
  158.  *
  159.  * Revision 1.4  2003/07/10 19:56:29  ivanov
  160.  * Using classes CNcbi[I/O]fstream instead FILE* streams
  161.  *
  162.  * Revision 1.3  2003/07/10 16:24:26  ivanov
  163.  * Added auxiliary file compression/decompression functions.
  164.  *
  165.  * Revision 1.2  2003/06/03 20:09:16  ivanov
  166.  * The Compression API redesign. Added some new classes, rewritten old.
  167.  *
  168.  * Revision 1.1  2003/04/07 20:21:35  ivanov
  169.  * Initial revision
  170.  *
  171.  * ===========================================================================
  172.  */