| License | BSD-style | 
|---|---|
| Maintainer | jcpetruzza@gmail.com | 
| Stability | experimental | 
| Portability | portable | 
| Safe Haskell | None | 
| Language | Haskell98 | 
Data.Hash.Rolling
Description
Efficient implementation of a rolling hash, i.e., the computation of a hash through
 a moving window of a fixed size n over some stream. All operations are O(1) (in
 particular, they do not depend on the size of the window).
Some laws that this type satisfies:
- currentHash rh == foldl1 combine (lastHashes rh) 
- length (lastHashes rh) <= windowSize rh 
- length (lastHashes $ addAndRoll rh a) == windowSize rh -- whenever length (lastHashes rh) == windowSize rh 
- last (lastHashes $ addAndRoll rh x) == hash a 
- init (lastHashes $ addAndRoll rh a) - isSuffixOf(lastHashes rh)
- data RollingHash a
- rollingHash :: Int -> RollingHash a
- addAndRoll :: Hashable a => RollingHash a -> a -> RollingHash a
- currentHash :: RollingHash a -> Hash
- lastHashes :: RollingHash a -> [Hash]
- windowSize :: RollingHash a -> Int
The RollingHash type
data RollingHash a Source
Instances
| Show (RollingHash a) | 
Construction and manipulation
rollingHash :: Int -> RollingHash a Source
rollingHash n creates a RollingHash of window
   size n (for n > 0)
addAndRoll :: Hashable a => RollingHash a -> a -> RollingHash a Source
addAndRoll x rh adds a new input element and rolls the window
   one place through the input (if at least n elements were
   already consumed).
Querying
currentHash :: RollingHash a -> Hash Source
lastHashes :: RollingHash a -> [Hash] Source
lastHashes rh returns the last n hashes.
windowSize :: RollingHash a -> Int Source