pure-borrow
Safe HaskellNone
LanguageGHC2021

Control.Concurrent.STM.TMDequeRingBuffer

Synopsis

The TMDeque type

data TMDeque a Source #

0 | 1 | 2 | ... | i | ... | N - 1 | ^ ^ | | back front

Construction

newTMDeque :: STM (TMDeque a) Source #

Create a new empty TMDeque.

newTMDequeIO :: IO (TMDeque a) Source #

IO variant of newTMDeque, which is faster without STM transaction overhead.

Push operations

pushFrontTMDeque :: TMDeque a -> a -> STM () Source #

Push an element to the front of the deque. Silently ignored if the deque is closed.

Pop operations (blocking)

popFrontTMDeque :: TMDeque a -> STM (Maybe a) Source #

Pop an element from the front. Blocks if the deque is open and empty. Returns Nothing when the deque is closed and empty (back-of-stream).

popBackTMDeque :: TMDeque a -> STM (Maybe a) Source #

Pop an element from the back. Blocks if the deque is open and empty. Returns Nothing when the deque is closed and empty (back-of-stream).

Pop operations (non-blocking)

tryPopFrontTMDeque :: TMDeque a -> STM (Maybe (Maybe a)) Source #

Non-blocking pop from the front.

  • Nothing — closed (end-of-stream)
  • Just Nothing — open and empty (would block)
  • Just (Just a) — got an element

tryPopBackTMDeque :: TMDeque a -> STM (Maybe (Maybe a)) Source #

Non-blocking pop from the back.

  • Nothing — closed (end-of-stream)
  • Just Nothing — open and empty (would block)
  • Just (Just a) — got an element

Closing & queries

closeTMDeque :: TMDeque a -> STM () Source #

Close the deque. After this, all push operations will be ignored, and all pop operations will return Nothing once the deque is empty.

isClosedTMDeque :: TMDeque a -> STM Bool Source #

Check if the deque is closed.

isEmptyTMDeque :: TMDeque a -> STM Bool Source #

Check if the deque is empty. Note that an open deque may become non-empty after this returns.

estimateSizeTMDequeIO :: TMDeque a -> IO Int Source #

IO variant of countTMDeque.