82 lines
1.5 KiB
C++
82 lines
1.5 KiB
C++
/*
|
|
*
|
|
* Copyright (C) 2002-2011, OFFIS e.V.
|
|
* All rights reserved. See COPYRIGHT file for details.
|
|
*
|
|
* This software and supporting documentation were developed by
|
|
*
|
|
* OFFIS e.V.
|
|
* R&D Division Health
|
|
* Escherweg 2
|
|
* D-26121 Oldenburg, Germany
|
|
*
|
|
*
|
|
* Module: ofstd
|
|
*
|
|
* Author: Marco Eichelberg
|
|
*
|
|
* Purpose: general purpose 32-bit CRC in C++
|
|
* Code is based on the CRC32 implementation (C)1986 Gary S. Brown
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef OFCRC32_H
|
|
#define OFCRC32_H
|
|
|
|
|
|
#include "dcmtk/ofstd/ofdefine.h"
|
|
|
|
|
|
/** general-purpose 32-bit CRC algorithm.
|
|
*/
|
|
class DCMTK_OFSTD_EXPORT OFCRC32
|
|
{
|
|
public:
|
|
|
|
/// constructor
|
|
OFCRC32()
|
|
: value(0)
|
|
{
|
|
}
|
|
|
|
/// destructor
|
|
~OFCRC32()
|
|
{
|
|
}
|
|
|
|
/// reset object to initial state (zero CRC)
|
|
void reset()
|
|
{
|
|
value=0;
|
|
}
|
|
|
|
/** add block of raw data to CRC
|
|
* @param ptr pointer to raw data
|
|
* @param size length of raw data block in bytes
|
|
*/
|
|
void addBlock(const void *ptr, unsigned long size);
|
|
|
|
/// returns the current CRC as unsigned int
|
|
unsigned int getCRC32() const
|
|
{
|
|
return value;
|
|
}
|
|
|
|
/** compute CRC for given block of data using a temporary CRC object
|
|
* @param ptr pointer to raw data
|
|
* @param size length of raw data block in bytes
|
|
* @return CRC32 as unsigned int
|
|
*/
|
|
static unsigned int compute(const void *ptr, unsigned long size);
|
|
|
|
private:
|
|
/// CRC look-up table
|
|
static const unsigned int crctab[256];
|
|
|
|
/// current CRC
|
|
unsigned int value;
|
|
};
|
|
|
|
#endif
|