00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CSUTIL_CHECKSUM_H__
00020 #define __CS_CSUTIL_CHECKSUM_H__
00021
00022 #include "csextern.h"
00023 #include "iutil/databuff.h"
00024
00025 namespace CS
00026 {
00027 namespace Utility
00028 {
00029 namespace Checksum
00030 {
00052 class Adler32
00053 {
00054 static inline uint32 Initial() { return 1; }
00055 static CS_CRYSTALSPACE_EXPORT uint32 Compute (uint32 prevCheckSum,
00056 const void* data, size_t size);
00057
00058 uint32 checksum;
00059
00060 public:
00061 Adler32 () : checksum (Initial()) {}
00062
00064
00065 Adler32 (const void* data, size_t size) : checksum (Compute (Initial(), data, size)) {}
00066 Adler32 (iDataBuffer* data)
00067 : checksum (Compute (Initial(), data->GetData(), data->GetSize())) {}
00069
00071
00076 Adler32 (uint32 prevCheckSum, const void* data, size_t size)
00077 : checksum (Compute (prevCheckSum, data, size)) {}
00078 Adler32 (uint32 prevCheckSum, iDataBuffer* data)
00079 : checksum (Compute (prevCheckSum, data->GetData(), data->GetSize())) {}
00081
00083 void Append (const uint8* data, size_t size)
00084 { checksum = Compute (checksum, data, size); }
00086 uint32 Finish ()
00087 { return checksum; }
00088
00090 operator uint32() const
00091 { return checksum; }
00092 };
00093
00115 class CRC32
00116 {
00117 static inline uint32 Initial() { return 0; }
00118 static CS_CRYSTALSPACE_EXPORT uint32 Compute (uint32 prevCheckSum,
00119 const void* data, size_t size);
00120
00121 uint32 checksum;
00122
00123 public:
00124 CRC32 () : checksum (Initial()) {}
00125
00127
00128 CRC32 (const void* data, size_t size) : checksum (Compute (Initial(), data, size)) {}
00129 CRC32 (iDataBuffer* data)
00130 : checksum (Compute (Initial(), data->GetData(), data->GetSize())) {}
00132
00134
00139 CRC32 (uint32 prevCheckSum, const void* data, size_t size)
00140 : checksum (Compute (prevCheckSum, data, size)) {}
00141 CRC32 (uint32 prevCheckSum, iDataBuffer* data)
00142 : checksum (Compute (prevCheckSum, data->GetData(), data->GetSize())) {}
00144
00146 void Append (const uint8* data, size_t size)
00147 { checksum = Compute (checksum, data, size); }
00149 uint32 Finish ()
00150 { return checksum; }
00151
00153 operator uint32() const
00154 { return checksum; }
00155 };
00156
00157 }
00158 }
00159 }
00160
00161 #endif // __CS_CSUTIL_CHECKSUM_H__