blob: b6fc4e7b9b033995a7f66aca66666be3686d3efb [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===-- llvm/Support/JamCRC.h - Cyclic Redundancy Check ---------*- C++ -*-===//
2//
Andrew Walbran16937d02019-10-22 13:54:20 +01003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01006//
7//===----------------------------------------------------------------------===//
8//
9// This file contains an implementation of JamCRC.
10//
11// We will use the "Rocksoft^tm Model CRC Algorithm" to describe the properties
12// of this CRC:
13// Width : 32
14// Poly : 04C11DB7
15// Init : FFFFFFFF
16// RefIn : True
17// RefOut : True
18// XorOut : 00000000
19// Check : 340BC6D9 (result of CRC for "123456789")
20//
21// N.B. We permit flexibility of the "Init" value. Some consumers of this need
22// it to be zero.
23//
24//===----------------------------------------------------------------------===//
25
26#ifndef LLVM_SUPPORT_JAMCRC_H
27#define LLVM_SUPPORT_JAMCRC_H
28
29#include "llvm/Support/DataTypes.h"
30
31namespace llvm {
32template <typename T> class ArrayRef;
33
34class JamCRC {
35public:
36 JamCRC(uint32_t Init = 0xFFFFFFFFU) : CRC(Init) {}
37
Andrew Scullcdfcccc2018-10-05 20:58:37 +010038 // Update the CRC calculation with Data.
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010039 void update(ArrayRef<char> Data);
40
41 uint32_t getCRC() const { return CRC; }
42
43private:
44 uint32_t CRC;
45};
46} // End of namespace llvm
47
48#endif