/* * * 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