ring-buffers-0.2: mutable ring buffers with atomic updates in GHC Haskell
Safe HaskellNone
LanguageHaskell2010

RingBuffers.Unboxed

Description

A concurrent, mutable ring buffer that supports atomic updates. This module is most efficient on buffers containing unlifted types.

Synopsis

Documentation

data RingBuffer a Source #

A concurrent, mutable ring buffer that supports atomic updates.

new Source #

Arguments

:: Prim a 
=> Int

capacity of buffer

-> IO (RingBuffer a) 

Return a new ring buffer of the specified size.

clear Source #

Arguments

:: Prim a 
=> RingBuffer a

buffer to clear

-> IO () 

Reset the buffer to its empty state.

append :: Prim a => a -> RingBuffer a -> IO () Source #

Add an item to the end of the buffer.

extend :: Prim a => PrimArray 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 :: Prim a => RingBuffer a -> IO Int Source #

Get the maximum number of items the ring can contain

filledLength :: Prim a => RingBuffer a -> IO Int Source #

Get the current filled length of the ring

latest :: Prim a => RingBuffer a -> Int -> IO (Maybe a) Source #

Retrieve the \(n\)th most-recently added item of the ring

unsafeLatest :: Prim 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 :: (Prim 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 :: Prim 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.