Safe Haskell | None |
---|---|
Language | Haskell2010 |
A concurrent, mutable ring buffer that supports atomic updates. This module is most efficient on buffers containing unboxed types.
Synopsis
- data RingBuffer a
- new :: PrimUnlifted a => Int -> IO (RingBuffer a)
- clear :: PrimUnlifted a => RingBuffer a -> IO ()
- append :: PrimUnlifted a => a -> RingBuffer a -> IO ()
- extend :: PrimUnlifted a => UnliftedArray a -> RingBuffer a -> IO ()
- capacity :: PrimUnlifted a => RingBuffer a -> IO Int
- filledLength :: PrimUnlifted a => RingBuffer a -> IO Int
- latest :: PrimUnlifted a => RingBuffer a -> Int -> IO (Maybe a)
- unsafeLatest :: PrimUnlifted a => RingBuffer a -> Int -> IO a
- foldMap :: (PrimUnlifted a, Monoid b) => RingBuffer a -> (a -> IO b) -> IO b
- toList :: PrimUnlifted a => RingBuffer a -> IO [a]
Documentation
data RingBuffer a Source #
A concurrent, mutable ring buffer that supports atomic updates.
:: PrimUnlifted a | |
=> Int | capacity of buffer |
-> IO (RingBuffer a) |
Return a new ring buffer of the specified size.
:: PrimUnlifted a | |
=> RingBuffer a | buffer to clear |
-> IO () |
Reset the buffer to its empty state.
append :: PrimUnlifted a => a -> RingBuffer a -> IO () Source #
Add an item to the end of the buffer.
extend :: PrimUnlifted a => UnliftedArray a -> RingBuffer a -> IO () Source #
Write multiple items to the end of the ring.
Ignores any elements of the input array whose indices are higher than the length of the ring buffer.
capacity :: PrimUnlifted a => RingBuffer a -> IO Int Source #
Get the maximum number of items the ring can contain
filledLength :: PrimUnlifted a => RingBuffer a -> IO Int Source #
Get the current filled length of the ring
latest :: PrimUnlifted a => RingBuffer a -> Int -> IO (Maybe a) Source #
Retrieve the \(n\)th most-recently added item of the ring
unsafeLatest :: PrimUnlifted a => RingBuffer a -> Int -> IO a Source #
Retrieve the \(n\)th most-recently added item of the ring
Note: This function may exhibit undefined behaviour if the index is out-of-bounds or uninitialised.
foldMap :: (PrimUnlifted a, Monoid b) => RingBuffer a -> (a -> IO b) -> IO b Source #
Execute the given action with the items of the ring, accumulating its results.
toList :: PrimUnlifted a => RingBuffer a -> IO [a] Source #
Convert the entire contents of the ring into a list, with the most recently added element at the head.