2017-01-04 21:04:13 +00:00
|
|
|
/*
|
|
|
|
|
|
|
|
Package rollinghash implements rolling versions of some hashes
|
|
|
|
|
|
|
|
*/
|
|
|
|
package rollinghash
|
|
|
|
|
|
|
|
import "hash"
|
|
|
|
|
2017-12-29 11:38:00 +00:00
|
|
|
// DefaultWindowCap is the default capacity of the internal window of a
|
|
|
|
// new Hash.
|
|
|
|
const DefaultWindowCap = 64
|
|
|
|
|
|
|
|
// A Roller is a type that has the method Roll. Roll updates the hash of a
|
|
|
|
// rolling window from just the entering byte. You MUST call Write()
|
|
|
|
// BEFORE using this method and provide it with an initial window of size
|
|
|
|
// at least 1 byte. You can then call this method for every new byte
|
|
|
|
// entering the window. The byte leaving the window is automatically
|
|
|
|
// computed from a copy of the window internally kept in the checksum.
|
|
|
|
// This window is updated along with the internal state of the checksum
|
|
|
|
// every time Roll() is called.
|
2017-01-04 21:04:13 +00:00
|
|
|
type Roller interface {
|
|
|
|
Roll(b byte)
|
|
|
|
}
|
|
|
|
|
|
|
|
// rollinghash.Hash extends hash.Hash by adding the method Roll. A
|
|
|
|
// rollinghash.Hash can be updated byte by byte, by specifying which byte
|
|
|
|
// enters the window.
|
|
|
|
type Hash interface {
|
|
|
|
hash.Hash
|
|
|
|
Roller
|
|
|
|
}
|
|
|
|
|
|
|
|
// rollinghash.Hash32 extends hash.Hash by adding the method Roll. A
|
|
|
|
// rollinghash.Hash32 can be updated byte by byte, by specifying which
|
|
|
|
// byte enters the window.
|
|
|
|
type Hash32 interface {
|
|
|
|
hash.Hash32
|
|
|
|
Roller
|
|
|
|
}
|
|
|
|
|
|
|
|
// rollinghash.Hash64 extends hash.Hash by adding the method Roll. A
|
|
|
|
// rollinghash.Hash64 can be updated byte by byte, by specifying which
|
|
|
|
// byte enters the window.
|
|
|
|
type Hash64 interface {
|
|
|
|
hash.Hash64
|
|
|
|
Roller
|
|
|
|
}
|