module Language.Fortran.Vars.Range
  ( Range
  , overlap
  , anyOverlap
  )
where

-- | Inclusive range used to represent a piece of memory
type Range = (Int, Int)   -- ^ (start, end)

-- | Return True if two ranges have overlap
overlap :: Range -> Range -> Bool
overlap :: Range -> Range -> Bool
overlap (Int
s1, Int
e1) (Int
s2, Int
e2) = Int
s1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
e2 Bool -> Bool -> Bool
&& Int
s2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
e1

-- | Return True if a given 'Range' overlaps any 'Range' in the
-- provided list
anyOverlap :: Range -> [Range] -> Bool
anyOverlap :: Range -> [Range] -> Bool
anyOverlap Range
range = (Range -> Bool) -> [Range] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Range -> Range -> Bool
overlap Range
range)