{-# LANGUAGE BangPatterns, Unsafe #-}
module Data.RangeSet.Internal.Heuristics (stayedSame, ifStayedSame) where
import Prelude
import Data.RangeSet.Internal.Types
import Data.RangeSet.Internal.Unsafe
{-# INLINE stayedSame #-}
stayedSame :: RangeSet a
-> RangeSet a
-> Bool
stayedSame :: forall a. RangeSet a -> RangeSet a -> Bool
stayedSame !RangeSet a
before !RangeSet a
after = RangeSet a
before forall a. a -> a -> Bool
`ptrEq` RangeSet a
after
{-# INLINE ifStayedSame #-}
ifStayedSame :: RangeSet a -> RangeSet a -> RangeSet a -> (RangeSet a -> RangeSet a) -> RangeSet a
ifStayedSame :: forall a.
RangeSet a
-> RangeSet a
-> RangeSet a
-> (RangeSet a -> RangeSet a)
-> RangeSet a
ifStayedSame !RangeSet a
x !RangeSet a
x' RangeSet a
y RangeSet a -> RangeSet a
f = if RangeSet a
x forall a. a -> a -> Bool
`ptrEq` RangeSet a
x' then RangeSet a
y else RangeSet a -> RangeSet a
f RangeSet a
x'