| // Copyright 2011 The LevelDB-Go Authors. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package util |
| |
| import ( |
| "hash/crc32" |
| ) |
| |
| var table = crc32.MakeTable(crc32.Castagnoli) |
| |
| // CRC is a CRC-32 checksum computed using Castagnoli's polynomial. |
| type CRC uint32 |
| |
| // NewCRC creates a new crc based on the given bytes. |
| func NewCRC(b []byte) CRC { |
| return CRC(0).Update(b) |
| } |
| |
| // Update updates the crc with the given bytes. |
| func (c CRC) Update(b []byte) CRC { |
| return CRC(crc32.Update(uint32(c), table, b)) |
| } |
| |
| // Value returns a masked crc. |
| func (c CRC) Value() uint32 { |
| return uint32(c>>15|c<<17) + 0xa282ead8 |
| } |