module Data.Bond.Internal.OrdinalSet where
import Data.Bond.Types
import qualified Data.IntSet as IS
import qualified Data.Vector.Generic as V
type OrdinalSet = IS.IntSet
deleteOrdinal :: Ordinal -> OrdinalSet -> OrdinalSet
deleteOrdinal (Ordinal d) = IS.delete (fromIntegral d)
memberOrdinal :: Ordinal -> OrdinalSet -> Bool
memberOrdinal (Ordinal d) = IS.member (fromIntegral d)
isEmptySet :: OrdinalSet -> Bool
isEmptySet = IS.null
toOrdinalList :: OrdinalSet -> [Ordinal]
toOrdinalList = map (Ordinal . fromIntegral) . IS.toList
fromOrdinalList :: [Ordinal] -> OrdinalSet
fromOrdinalList = IS.fromList . map (\ (Ordinal d) -> fromIntegral d)
fromOrdinalVector :: (V.Vector v Ordinal, V.Vector v IS.Key) => v Ordinal -> OrdinalSet
fromOrdinalVector = IS.fromList . V.toList . V.map (\ (Ordinal d) -> fromIntegral d)