{-# LANGUAGE FlexibleContexts #-} 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)