module RingBuffers.Unboxed
( RingBuffer
, new
, clear
, append
, extend
, capacity
, filledLength
, latest
, unsafeLatest
, foldMap
, toList
) where
import qualified RingBuffers.Internal as I
newtype RingBuffer a = RingBuffer (I.RingBuffer PrimArray a)
new :: (Prim a)
=> Int
-> IO (RingBuffer a)
new sz = fmap coerce (I.new sz)
clear :: (Prim a)
=> RingBuffer a
-> IO ()
clear rb = I.clear (coerce rb)
filledLength :: (Prim a)
=> RingBuffer a
-> IO Int
filledLength rb = I.filledLength (coerce rb)
capacity :: (Prim a)
=> RingBuffer a
-> IO Int
capacity rb = I.capacity (coerce rb)
latest :: (Prim a)
=> RingBuffer a
-> Int
-> IO (Maybe a)
latest rb n = I.latest (coerce rb) n
unsafeLatest :: (Prim a)
=> RingBuffer a
-> Int
-> IO a
unsafeLatest rb n = I.unsafeLatest (coerce rb) n
append :: (Prim a)
=> a
-> RingBuffer a
-> IO ()
append x rb = I.append x (coerce rb)
extend :: (Prim a)
=> PrimArray a
-> RingBuffer a
-> IO ()
extend x rb = I.extend x (coerce rb)
foldMap :: (Prim a, Monoid b)
=> RingBuffer a
-> (a -> IO b)
-> IO b
foldMap rb action = I.foldMap (coerce rb) action
toList :: (Prim a)
=> RingBuffer a
-> IO [a]
toList rb = I.toList (coerce rb)