-- 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