module TextViewport.Buffer.Buffer where import Data.Sequence qualified as Seq import TextViewport.Buffer.Item (Item) newtype Buffer = Buffer { unBuffer :: Seq.Seq Item } deriving (Eq, Show) -- | Build a buffer from a list fromList :: [Item] -> Buffer fromList xs = Buffer (Seq.fromList xs) -- | Modify an item at index modifyItem :: Int -> (Item -> Item) -> Buffer -> Buffer modifyItem ix f (Buffer xs) = Buffer (Seq.adjust' f ix xs) -- | Insert an item insertItem :: Int -> Item -> Buffer -> Buffer insertItem ix x (Buffer xs) = Buffer (Seq.insertAt ix x xs) -- | Delete an item deleteItem :: Int -> Buffer -> Buffer deleteItem ix (Buffer xs) = Buffer (Seq.deleteAt ix xs) -- | Append an item appendItem :: Item -> Buffer -> Buffer appendItem x (Buffer xs) = Buffer (xs Seq.|> x) -- | Extract underlying Seq (if needed) toSeq :: Buffer -> Seq.Seq Item toSeq (Buffer xs) = xs