content: {-# LANGUAGE CPP #-}
  -- |
  -- Module      : Streamly.Data.RingArray
  -- Copyright   : (c) 2025 Composewell Technologies
  --
  -- License     : BSD3
  -- Maintainer  : streamly@composewell.com
  -- Stability   : released
  -- Portability : GHC
  --
  -- This module provides APIs to create and use unboxed, mutable ring arrays of
  -- fixed size. Ring arrays are useful to keep a circular buffer or a sliding
  -- window of elements.
  --
  -- RingArrays are of fixed size but there is a way to expand the size of the
  -- ring, you can copy the ring to a MutArray, expand the MutArray and the cast
  -- it back to RingArray.
  --
  -- This module is designed to be imported qualified:
  --
  -- >>> import qualified Streamly.Data.RingArray as Ring
  --
  -- Please refer to "Streamly.Internal.Data.RingArray" for functions that have
  -- not yet been released.
  --
  
  module Streamly.Data.RingArray
      ( RingArray
  
      -- * Construction
      , createOfLast
      , castMutArray -- XXX this is unsafeFreeze in Array module
      , castMutArrayWith
      -- , unsafeCastMutArray
      -- , unsafeCastMutArrayWith
  
      -- * Moving the Head
      , moveForward
      , moveReverse
      -- , moveBy
  
      -- * In-place Mutation
      , insert
      , replace
      , replace_
      , putIndex
      , modifyIndex
  
      -- * Random Access
      , getIndex
      , unsafeGetIndex
      , unsafeGetHead
  
      -- * Conversion
      , toList
      , toMutArray
  
      -- * Streams
      , read
      , readRev
  
      -- * Unfolds
      , reader
      , readerRev
  
      -- * Size
      , length
      , byteLength
  
      -- * Casting
      , cast
      -- , unsafeCast
      , asBytes
      , asMutArray
      -- , asMutArray_
  
      -- * Folds
      -- , foldlM'
      , fold
  
      -- * Stream of Rings
      , ringsOf
      , scanRingsOf
  
      -- * Fast Byte Comparisons
      , eqArray
      , eqArrayN
  
      ) where
  
  import Streamly.Internal.Data.RingArray
  import Prelude hiding (read, length)
  