]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/Support/JamCRC.h
MFV r329766: 8962 zdb should work on non-idle pools
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / Support / JamCRC.h
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/Support/DataTypes.h"
31
32 namespace llvm {
33 template <typename T> class ArrayRef;
34
35 class JamCRC {
36 public:
37   JamCRC(uint32_t Init = 0xFFFFFFFFU) : CRC(Init) {}
38
39   // \brief Update the CRC calculation with Data.
40   void update(ArrayRef<char> Data);
41
42   uint32_t getCRC() const { return CRC; }
43
44 private:
45   uint32_t CRC;
46 };
47 } // End of namespace llvm
48
49 #endif