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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: checksum.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:29:10  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CHECKSUM__HPP
  10. #define CHECKSUM__HPP
  11. /*  $Id: checksum.hpp,v 1000.0 2003/10/29 15:29:10 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author: Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   checksum (CRC32 or MD5) calculation class
  40. */
  41. #include <util/md5.hpp>
  42. /** @addtogroup Checksum
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. class NCBI_XUTIL_EXPORT CChecksum
  48. {
  49. public:
  50.     enum EMethod {
  51.         eNone,             // no checksum in file
  52.         eCRC32,            // 32-bit Cyclic Redundancy Check
  53.         eMD5,              // Message Digest version 5
  54.         eDefault = eCRC32
  55.     };
  56.     enum {
  57.         kMinimumChecksumLength = 20
  58.     };
  59.     CChecksum(EMethod method = eDefault);
  60.     CChecksum(const CChecksum& cks);
  61.     ~CChecksum();
  62.     CChecksum& operator=(const CChecksum& cks);
  63.     bool Valid(void) const;
  64.     EMethod GetMethod(void) const;
  65.     void AddLine(const char* line, size_t length);
  66.     void AddLine(const string& line);
  67.     void AddChars(const char* str, size_t length);
  68.     void NextLine(void);
  69.     bool ValidChecksumLine(const char* line, size_t length) const;
  70.     bool ValidChecksumLine(const string& line) const;
  71.     CNcbiOstream& WriteChecksum(CNcbiOstream& out) const;
  72.     /// Only valid in CRC32 mode!
  73.     Uint4 GetChecksum() const;
  74.     /// Only valid in MD5 mode!
  75.     void GetMD5Digest(unsigned char digest[16]) const;
  76.     CNcbiOstream& WriteChecksumData(CNcbiOstream& out) const;
  77.     // Reset the object to prepare it to the next checksum computation
  78.     void Reset();
  79. private:
  80.     size_t m_LineCount;
  81.     size_t m_CharCount;
  82.     EMethod m_Method;
  83.     union {
  84.         Uint4 m_CRC32;
  85.         CMD5* m_MD5;
  86.     } m_Checksum;
  87.     static Uint4 sm_CRC32Table[256];
  88.     static void InitTables(void);
  89.     static Uint4 UpdateCRC32(Uint4 checksum, const char* str, size_t length);
  90.     bool ValidChecksumLineLong(const char* line, size_t length) const;
  91.     void x_Free();
  92. };
  93. inline
  94. CNcbiOstream& operator<<(CNcbiOstream& out, const CChecksum& checksum);
  95. /// This function computes the checksum for the given file.
  96. CChecksum NCBI_XUTIL_EXPORT ComputeFileChecksum(const string& path,
  97.                                                 CChecksum::EMethod method);
  98. NCBI_XUTIL_EXPORT CChecksum& ComputeFileChecksum(const string& path,
  99.                                                  CChecksum& checksum);
  100. inline Uint4 ComputeFileCRC32(const string& path)
  101. {
  102.     return ComputeFileChecksum(path, CChecksum::eCRC32).GetChecksum();
  103. }
  104. /* @} */
  105. #include <util/checksum.inl>
  106. END_NCBI_SCOPE
  107. /*
  108. * ===========================================================================
  109. *
  110. * $Log: checksum.hpp,v $
  111. * Revision 1000.0  2003/10/29 15:29:10  gouriano
  112. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.8
  113. *
  114. * Revision 1.8  2003/08/11 16:45:52  kuznets
  115. * Added Reset() function to clear the accumulated checksum and reuse the object
  116. * for consecutive checksum calculations
  117. *
  118. * Revision 1.7  2003/07/29 21:29:26  ucko
  119. * Add MD5 support (cribbed from the C Toolkit)
  120. *
  121. * Revision 1.6  2003/05/08 19:10:21  kuznets
  122. * + ComputeFileCRC32 function
  123. *
  124. * Revision 1.5  2003/04/17 17:50:13  siyan
  125. * Added doxygen support
  126. *
  127. * Revision 1.4  2003/04/15 16:12:09  kuznets
  128. * GetChecksum() method implemented
  129. *
  130. * Revision 1.3  2002/12/19 14:51:00  dicuccio
  131. * Added export specifier for Win32 DLL builds.
  132. *
  133. * Revision 1.2  2001/01/05 20:08:52  vasilche
  134. * Added util directory for various algorithms and utility classes.
  135. *
  136. * Revision 1.1  2000/11/22 16:26:21  vasilche
  137. * Added generation/checking of checksum to user files.
  138. *
  139. * ===========================================================================
  140. */
  141. #endif  /* CHECKSUM__HPP */