1 //===-- llvm/Support/JamCRC.h - Cyclic Redundancy Check ---------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains an implementation of JamCRC.
11 //
12 // We will use the "Rocksoft^tm Model CRC Algorithm" to describe the properties
13 // of this CRC:
14 //   Width  : 32
15 //   Poly   : 04C11DB7
16 //   Init   : FFFFFFFF
17 //   RefIn  : True
18 //   RefOut : True
19 //   XorOut : 00000000
20 //   Check  : 340BC6D9 (result of CRC for "123456789")
21 //
22 // N.B.  We permit flexibility of the "Init" value.  Some consumers of this need
23 //       it to be zero.
24 //
25 //===----------------------------------------------------------------------===//
26 
27 #ifndef LLVM_SUPPORT_JAMCRC_H
28 #define LLVM_SUPPORT_JAMCRC_H
29 
30 #include "llvm/ADT/ArrayRef.h"
31 #include "llvm/Support/DataTypes.h"
32 
33 namespace llvm {
34 class JamCRC {
35 public:
CRC(Init)36   JamCRC(uint32_t Init = 0xFFFFFFFFU) : CRC(Init) {}
37 
38   // \brief Update the CRC calculation with Data.
39   void update(ArrayRef<char> Data);
40 
getCRC()41   uint32_t getCRC() const { return CRC; }
42 
43 private:
44   uint32_t CRC;
45 };
46 } // End of namespace llvm
47 
48 #endif
49