{-# 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 :: E -> E -> RangeSet a -> (# E, E #) minRange !E l !E u RangeSet a Tip = (# E l, E u #) minRange E _ E _ (Fork E _ E _ E l E u RangeSet a lt RangeSet a _) = E -> E -> RangeSet a -> (# E, E #) forall a. E -> E -> RangeSet a -> (# E, E #) minRange E l E u RangeSet a lt {-# INLINEABLE maxRange #-} maxRange :: E -> E -> RangeSet a -> (# E, E #) maxRange :: E -> E -> RangeSet a -> (# E, E #) maxRange !E l !E u RangeSet a Tip = (# E l, E u #) maxRange E _ E _ (Fork E _ E _ E l E u RangeSet a _ RangeSet a rt) = E -> E -> RangeSet a -> (# E, E #) forall a. E -> E -> RangeSet a -> (# E, E #) maxRange E l E u RangeSet a rt {-# INLINE minDelete #-} minDelete :: Size -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) minDelete :: E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) minDelete !E sz !E l !E u !RangeSet a lt !RangeSet a rt = let (# !E ml, !E mu, !E _, RangeSet a t' #) = E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) forall a. E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) go E sz E l E u RangeSet a lt RangeSet a rt in (# E ml, E mu, RangeSet a t' #) where go :: Size -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, Size, RangeSet a #) go :: E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) go !E sz !E l !E u RangeSet a Tip !RangeSet a rt = (# E l, E u, E sz E -> E -> E forall a. Num a => a -> a -> a - RangeSet a -> E forall a. RangeSet a -> E size RangeSet a rt, RangeSet a rt #) go E sz E l E u (Fork E _ E lsz E ll E lu RangeSet a llt RangeSet a lrt) RangeSet a rt = let (# !E ml, !E mu, !E msz, RangeSet a lt' #) = E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) forall a. E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) go E lsz E ll E lu RangeSet a llt RangeSet a lrt in (# E ml, E mu, E msz, E -> E -> E -> RangeSet a -> RangeSet a -> RangeSet a forall a. E -> E -> E -> RangeSet a -> RangeSet a -> RangeSet a balanceR (E sz E -> E -> E forall a. Num a => a -> a -> a - E msz) E l E u RangeSet a lt' RangeSet a rt #) {-# INLINE maxDelete #-} maxDelete :: Size -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) maxDelete :: E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, RangeSet a #) maxDelete !E sz !E l !E u !RangeSet a lt !RangeSet a rt = let (# !E ml, !E mu, !E _, RangeSet a t' #) = E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) forall a. E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) go E sz E l E u RangeSet a lt RangeSet a rt in (# E ml, E mu, RangeSet a t' #) where go :: Size -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, Size, RangeSet a #) go :: E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) go !E sz !E l !E u !RangeSet a lt RangeSet a Tip = (# E l, E u, E sz E -> E -> E forall a. Num a => a -> a -> a - RangeSet a -> E forall a. RangeSet a -> E size RangeSet a lt, RangeSet a lt #) go E sz E l E u RangeSet a lt (Fork E _ E rsz E rl E ru RangeSet a rlt RangeSet a rrt) = let (# !E ml, !E mu, !E msz, RangeSet a rt' #) = E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) forall a. E -> E -> E -> RangeSet a -> RangeSet a -> (# E, E, E, RangeSet a #) go E rsz E rl E ru RangeSet a rlt RangeSet a rrt in (# E ml, E mu, E msz, E -> E -> E -> RangeSet a -> RangeSet a -> RangeSet a forall a. E -> E -> E -> RangeSet a -> RangeSet a -> RangeSet a balanceL (E sz E -> E -> E forall a. Num a => a -> a -> a - E msz) E l E u RangeSet a lt RangeSet a rt' #)