/root/bitcoin/src/leveldb/util/crc32c.h
| Line | Count | Source | 
| 1 |  | // Copyright (c) 2011 The LevelDB Authors. All rights reserved. | 
| 2 |  | // Use of this source code is governed by a BSD-style license that can be | 
| 3 |  | // found in the LICENSE file. See the AUTHORS file for names of contributors. | 
| 4 |  |  | 
| 5 |  | #ifndef STORAGE_LEVELDB_UTIL_CRC32C_H_ | 
| 6 |  | #define STORAGE_LEVELDB_UTIL_CRC32C_H_ | 
| 7 |  |  | 
| 8 |  | #include <stddef.h> | 
| 9 |  | #include <stdint.h> | 
| 10 |  |  | 
| 11 |  | namespace leveldb { | 
| 12 |  | namespace crc32c { | 
| 13 |  |  | 
| 14 |  | // Return the crc32c of concat(A, data[0,n-1]) where init_crc is the | 
| 15 |  | // crc32c of some string A.  Extend() is often used to maintain the | 
| 16 |  | // crc32c of a stream of data. | 
| 17 |  | uint32_t Extend(uint32_t init_crc, const char* data, size_t n); | 
| 18 |  |  | 
| 19 |  | // Return the crc32c of data[0,n-1] | 
| 20 | 0 | inline uint32_t Value(const char* data, size_t n) { return Extend(0, data, n); } | 
| 21 |  |  | 
| 22 |  | static const uint32_t kMaskDelta = 0xa282ead8ul; | 
| 23 |  |  | 
| 24 |  | // Return a masked representation of crc. | 
| 25 |  | // | 
| 26 |  | // Motivation: it is problematic to compute the CRC of a string that | 
| 27 |  | // contains embedded CRCs.  Therefore we recommend that CRCs stored | 
| 28 |  | // somewhere (e.g., in files) should be masked before being stored. | 
| 29 | 0 | inline uint32_t Mask(uint32_t crc) { | 
| 30 |  |   // Rotate right by 15 bits and add a constant. | 
| 31 | 0 |   return ((crc >> 15) | (crc << 17)) + kMaskDelta; | 
| 32 | 0 | } | 
| 33 |  |  | 
| 34 |  | // Return the crc whose masked representation is masked_crc. | 
| 35 | 0 | inline uint32_t Unmask(uint32_t masked_crc) { | 
| 36 | 0 |   uint32_t rot = masked_crc - kMaskDelta; | 
| 37 | 0 |   return ((rot >> 17) | (rot << 15)); | 
| 38 | 0 | } | 
| 39 |  |  | 
| 40 |  | }  // namespace crc32c | 
| 41 |  | }  // namespace leveldb | 
| 42 |  |  | 
| 43 |  | #endif  // STORAGE_LEVELDB_UTIL_CRC32C_H_ |