csutil/checksum.h Source File (Crystal Space 2.0 Public API Reference)

| ## Public API Reference

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

csutil/checksum.h

    00001 /*
    00002   Copyright (C) 2009-2011 by Frank Richter
    00003
    00004   This library is free software; you can redistribute it and/or
    00005   modify it under the terms of the GNU Library General Public
    00006   License as published by the Free Software Foundation; either
    00007   version 2 of the License, or (at your option) any later version.
    00008
    00009   This library is distributed in the hope that it will be useful,
    00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    00012   Library General Public License for more details.
    00013
    00014   You should have received a copy of the GNU Library General Public
    00015   License along with this library; if not, write to the Free
    00016   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    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     } // namespace Checksum
    00158   } // namespace Utility
    00159 } // namespace CS
    00160
    00161 #endif // __CS_CSUTIL_CHECKSUM_H__