-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Various buffer implementations -- -- Various buffer implementations @package combobuffer @version 0.2 -- | The RingBuffer interface. -- -- A RingBuffer is a fixed-length buffer that supports lookups anywhere -- in the structure and pushing new elements onto the front. When a new -- value is pushed, the oldest value will be dropped. -- -- This module provides an implementation based on Vector, with -- O(1) lookups and O(n) pushes. Other modules provide implementations -- with different performance profiles. module Data.RingBuffer.Class -- | The RingBuffer interface. -- -- Instances must define length, push, and '(!)'. Instances -- may define slice for better performance. class RingBuffer c where slice c start num = [c ! ix | ix <- [start .. start + num]] length :: RingBuffer c => c -> Int push :: RingBuffer c => c -> El c -> c (!) :: RingBuffer c => c -> Int -> El c slice :: RingBuffer c => c -> Int -> Int -> [El c] -- | Create a new Initializable with the given value at every -- position. Essentially a generalized replicate class Initializable c newInit :: Initializable c => El c -> Int -> c instance Unbox el => RingBuffer (Vector el) instance Unbox el => Initializable (Vector el) -- | A RingBuffer implementation based on IntMaps. Operations have -- the same complexity as the underlying IntMap module Data.RingBuffer.MapBuffer -- | Create a new Initializable with the given value at every -- position. Essentially a generalized replicate class Initializable c newInit :: Initializable c => El c -> Int -> c -- | The RingBuffer interface. -- -- Instances must define length, push, and '(!)'. Instances -- may define slice for better performance. class RingBuffer c where slice c start num = [c ! ix | ix <- [start .. start + num]] length :: RingBuffer c => c -> Int push :: RingBuffer c => c -> El c -> c (!) :: RingBuffer c => c -> Int -> El c slice :: RingBuffer c => c -> Int -> Int -> [El c] data MapBuffer a MB :: {-# UNPACK #-} !Int -> !(IntMap a) -> MapBuffer a instance Eq a => Eq (MapBuffer a) instance Show a => Show (MapBuffer a) instance Ord a => Ord (MapBuffer a) instance RingBuffer (MapBuffer el) instance Initializable (MapBuffer el) -- | A RingBuffer based on Seq. Asymptotic behavior is quite -- good in all cases, but constant factors are very high. module Data.RingBuffer.SeqBuffer data SeqBuffer a -- | The RingBuffer interface. -- -- Instances must define length, push, and '(!)'. Instances -- may define slice for better performance. class RingBuffer c where slice c start num = [c ! ix | ix <- [start .. start + num]] length :: RingBuffer c => c -> Int push :: RingBuffer c => c -> El c -> c (!) :: RingBuffer c => c -> Int -> El c slice :: RingBuffer c => c -> Int -> Int -> [El c] -- | Create a new SeqBuffer, initialized to all 0's, of the given size new :: Num a => Int -> SeqBuffer a instance Eq a => Eq (SeqBuffer a) instance Ord a => Ord (SeqBuffer a) instance Show a => Show (SeqBuffer a) instance RingBuffer (SeqBuffer a) instance Initializable (SeqBuffer a) module Data.RingBuffer.Chord data Chord a -- | an empty chord. emptyChord :: a -> Chord a cToVec :: Unbox a => Chord a -> Vector a instance (Show a, Unbox a) => Show (Chord a) instance (Eq a, Unbox a) => Eq (Chord a) instance (Ord a, Unbox a) => Ord (Chord a) instance Unbox a => RingBuffer (Chord a) module Data.RingBuffer.ComboBuffer data ComboBuffer a CB :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> !(Vector a) -> !(Vector a) -> (Chord a) -> ComboBuffer a CBOdd :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> !(Vector a) -> !(Vector a) -> (Chord a) -> ComboBuffer a instance (Eq a, Unbox a) => Eq (ComboBuffer a) instance (Ord a, Unbox a) => Ord (ComboBuffer a) instance (Show a, Unbox a) => Show (ComboBuffer a) instance Unbox a => RingBuffer (ComboBuffer a) instance Unbox a => Initializable (ComboBuffer a) -- | Template Haskell splices to create constant-sized vectors and -- RingBuffer instances for them module Data.RingBuffer.TGen mkVecFromTo :: Int -> Int -> Type -> [TyVarBndr] -> [Char] -> Q [Dec] mkVec :: Type -> [TyVarBndr] -> [Char] -> Int -> Q [Dec] -- | Strict vectors of doubles to length == 30 module Data.RingBuffer.SVec data T1 T1 :: !Double -> T1 data T2 T2 :: !Double -> !Double -> T2 data T3 T3 :: !Double -> !Double -> !Double -> T3 data T4 T4 :: !Double -> !Double -> !Double -> !Double -> T4 data T5 T5 :: !Double -> !Double -> !Double -> !Double -> !Double -> T5 data T6 T6 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T6 data T7 T7 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T7 data T8 T8 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T8 data T9 T9 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T9 data T10 T10 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T10 data T11 T11 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T11 data T12 T12 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T12 data T13 T13 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T13 data T14 T14 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T14 data T15 T15 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T15 data T16 T16 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T16 data T17 T17 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T17 data T18 T18 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T18 data T19 T19 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T19 data T20 T20 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T20 data T21 T21 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T21 data T22 T22 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T22 data T23 T23 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T23 data T24 T24 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T24 data T25 T25 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T25 data T26 T26 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T26 data T27 T27 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T27 data T28 T28 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T28 data T29 T29 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T29 data T30 T30 :: !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> !Double -> T30 -- | Generate a 32-element polymorphic vector, maybe I should just use -- Data.Vector? data TVec32 a TVec32 :: !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> !a -> TVec32 a instance Foldable TVec32 instance Ord a => Ord (TVec32 a) instance Eq a => Eq (TVec32 a) instance Show a => Show (TVec32 a) instance RingBuffer (TVec32 a) instance Initializable (TVec32 a) instance RingBuffer T30 instance Initializable T30 instance RingBuffer T29 instance Initializable T29 instance RingBuffer T28 instance Initializable T28 instance RingBuffer T27 instance Initializable T27 instance RingBuffer T26 instance Initializable T26 instance RingBuffer T25 instance Initializable T25 instance RingBuffer T24 instance Initializable T24 instance RingBuffer T23 instance Initializable T23 instance RingBuffer T22 instance Initializable T22 instance RingBuffer T21 instance Initializable T21 instance RingBuffer T20 instance Initializable T20 instance RingBuffer T19 instance Initializable T19 instance RingBuffer T18 instance Initializable T18 instance RingBuffer T17 instance Initializable T17 instance RingBuffer T16 instance Initializable T16 instance RingBuffer T15 instance Initializable T15 instance RingBuffer T14 instance Initializable T14 instance RingBuffer T13 instance Initializable T13 instance RingBuffer T12 instance Initializable T12 instance RingBuffer T11 instance Initializable T11 instance RingBuffer T10 instance Initializable T10 instance RingBuffer T9 instance Initializable T9 instance RingBuffer T8 instance Initializable T8 instance RingBuffer T7 instance Initializable T7 instance RingBuffer T6 instance Initializable T6 instance RingBuffer T5 instance Initializable T5 instance RingBuffer T4 instance Initializable T4 instance RingBuffer T3 instance Initializable T3 instance RingBuffer T2 instance Initializable T2 instance RingBuffer T1 instance Initializable T1 -- | A vector-based RingBufferimplementation module Data.RingBuffer.Vector data VBuffer el instance (Eq el, Unbox el) => Eq (VBuffer el) instance Unbox el => RingBuffer (VBuffer el) instance Unbox el => Initializable (VBuffer el) module Data.RingBuffer -- | Create a new Initializable with the given value at every -- position. Essentially a generalized replicate class Initializable c newInit :: Initializable c => El c -> Int -> c -- | The RingBuffer interface. -- -- Instances must define length, push, and '(!)'. Instances -- may define slice for better performance. class RingBuffer c where slice c start num = [c ! ix | ix <- [start .. start + num]] length :: RingBuffer c => c -> Int push :: RingBuffer c => c -> El c -> c (!) :: RingBuffer c => c -> Int -> El c slice :: RingBuffer c => c -> Int -> Int -> [El c] data SeqBuffer a data ComboBuffer a CB :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> !(Vector a) -> !(Vector a) -> (Chord a) -> ComboBuffer a CBOdd :: {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> !(Vector a) -> !(Vector a) -> (Chord a) -> ComboBuffer a data MapBuffer a MB :: {-# UNPACK #-} !Int -> !(IntMap a) -> MapBuffer a