module RingBuffers.Lifted
( RingBuffer
, new
, clear
, append
, extend
, capacity
, filledLength
, latest
, unsafeLatest
, foldMap
, toList
) where
import qualified RingBuffers.Internal as I
newtype RingBuffer a = RingBuffer (I.RingBuffer Array a)
new :: ()
=> Int
-> IO (RingBuffer a)
new :: Int -> IO (RingBuffer a)
new Int
sz = (RingBuffer Array a -> RingBuffer a)
-> IO (RingBuffer Array a) -> IO (RingBuffer a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap RingBuffer Array a -> RingBuffer a
coerce (Int -> IO (RingBuffer Array a)
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
Int -> IO (RingBuffer arr a)
I.new Int
sz)
clear :: ()
=> RingBuffer a
-> IO ()
clear :: RingBuffer a -> IO ()
clear RingBuffer a
rb = RingBuffer Array a -> IO ()
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
RingBuffer arr a -> IO ()
I.clear (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb)
filledLength :: ()
=> RingBuffer a
-> IO Int
filledLength :: RingBuffer a -> IO Int
filledLength RingBuffer a
rb = RingBuffer Array a -> IO Int
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
RingBuffer arr a -> IO Int
I.filledLength (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb)
capacity :: ()
=> RingBuffer a
-> IO Int
capacity :: RingBuffer a -> IO Int
capacity RingBuffer a
rb = RingBuffer Array a -> IO Int
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
RingBuffer arr a -> IO Int
I.capacity (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb)
latest :: ()
=> RingBuffer a
-> Int
-> IO (Maybe a)
latest :: RingBuffer a -> Int -> IO (Maybe a)
latest RingBuffer a
rb Int
n = RingBuffer Array a -> Int -> IO (Maybe a)
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
RingBuffer arr a -> Int -> IO (Maybe a)
I.latest (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb) Int
n
unsafeLatest :: ()
=> RingBuffer a
-> Int
-> IO a
unsafeLatest :: RingBuffer a -> Int -> IO a
unsafeLatest RingBuffer a
rb Int
n = RingBuffer Array a -> Int -> IO a
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
RingBuffer arr a -> Int -> IO a
I.unsafeLatest (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb) Int
n
append :: ()
=> a
-> RingBuffer a
-> IO ()
append :: a -> RingBuffer a -> IO ()
append a
x RingBuffer a
rb = a -> RingBuffer Array a -> IO ()
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
a -> RingBuffer arr a -> IO ()
I.append a
x (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb)
extend :: ()
=> Array a
-> RingBuffer a
-> IO ()
extend :: Array a -> RingBuffer a -> IO ()
extend Array a
x RingBuffer a
rb = Array a -> RingBuffer Array a -> IO ()
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
arr a -> RingBuffer arr a -> IO ()
I.extend Array a
x (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb)
foldMap :: (Monoid b)
=> RingBuffer a
-> (a -> IO b)
-> IO b
foldMap :: RingBuffer a -> (a -> IO b) -> IO b
foldMap RingBuffer a
rb a -> IO b
action = RingBuffer Array a -> (a -> IO b) -> IO b
forall (arr :: * -> *) a b.
(Contiguous arr, Element arr a, Monoid b) =>
RingBuffer arr a -> (a -> IO b) -> IO b
I.foldMap (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb) a -> IO b
action
toList :: ()
=> RingBuffer a
-> IO [a]
toList :: RingBuffer a -> IO [a]
toList RingBuffer a
rb = RingBuffer Array a -> IO [a]
forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
RingBuffer arr a -> IO [a]
I.toList (RingBuffer a -> RingBuffer Array a
coerce RingBuffer a
rb)