module Network.HPACK.Context.ReferenceSet (
ReferenceSet
, emptyReferenceSet
, getIndices
, isMember
, addIndex
, removeIndex
, removeIndices
, adjustReferenceSet
, mergeReferenceSet
) where
import Data.List (delete, (\\))
import Network.HPACK.Table
data ReferenceSet = ReferenceSet [Index] deriving Show
emptyReferenceSet :: ReferenceSet
emptyReferenceSet = ReferenceSet []
getIndices :: ReferenceSet -> [Index]
getIndices (ReferenceSet is) = is
isMember :: Index -> ReferenceSet -> Bool
isMember idx (ReferenceSet is) = idx `elem` is
addIndex :: Index -> ReferenceSet -> ReferenceSet
addIndex idx (ReferenceSet is) = ReferenceSet $ idx : is
removeIndex :: Index -> ReferenceSet -> ReferenceSet
removeIndex idx (ReferenceSet is) = ReferenceSet $ delete idx is
removeIndices :: [Index] -> ReferenceSet -> ReferenceSet
removeIndices idcs (ReferenceSet is) = ReferenceSet $ is \\ idcs
adjustReferenceSet :: ReferenceSet -> ReferenceSet
adjustReferenceSet (ReferenceSet is) = ReferenceSet $ map (+1) is
mergeReferenceSet :: ReferenceSet -> ReferenceSet -> ReferenceSet
mergeReferenceSet (ReferenceSet xs) (ReferenceSet ys) = ReferenceSet $ xs ++ ys