31 lines
		
	
	
		
			691 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			691 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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
 | |
| }
 |