rangeset-0.1.0.0: src/ghc/Data/RangeSet/Internal/Extractors.hs
{-# LANGUAGE BangPatterns, UnboxedTuples, Safe #-}
module Data.RangeSet.Internal.Extractors (module Data.RangeSet.Internal.Extractors) where
import Prelude ()
import Data.RangeSet.Internal.Types
import Data.RangeSet.Internal.SmartConstructors
{-# INLINEABLE minRange #-}
minRange :: E -> E -> RangeSet a -> (# E, E #)
minRange !l !u Tip = (# l, u #)
minRange _ _ (Fork _ l u lt _) = minRange l u lt
{-# INLINEABLE maxRange #-}
maxRange :: E -> E -> RangeSet a -> (# E, E #)
maxRange !l !u Tip = (# l, u #)
maxRange _ _ (Fork _ l u _ rt) = maxRange l u rt
{-# INLINE minDelete #-}
minDelete :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #)
minDelete !l !u !lt !rt = let (# !ml, !mu, t' #) = go l u lt rt in (# ml, mu, t' #)
where
go :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #)
go !l !u Tip !rt = (# l, u, rt #)
go l u (Fork _ ll lu llt lrt) rt =
let (# !ml, !mu, lt' #) = go ll lu llt lrt
in (# ml, mu, balanceR l u lt' rt #)
{-# INLINE maxDelete #-}
maxDelete :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #)
maxDelete !l !u !lt !rt = let (# !ml, !mu, t' #) = go l u lt rt in (# ml, mu, t' #)
where
go :: E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #)
go !l !u !lt Tip = (# l, u, lt #)
go l u lt (Fork _ rl ru rlt rrt) =
let (# !ml, !mu, rt' #) = go rl ru rlt rrt
in (# ml, mu, balanceL l u lt rt' #)