packages feed

moonlight-triangulation-0.1.0.0: src-build/Moonlight/Triangulation/Internal/Capacity.hs

-- | Admissibility of a requested vertex count against the packed index limit.
module Moonlight.Triangulation.Internal.Capacity
  ( ensureCapacity
  ) where

import Moonlight.Triangulation.Internal.PackedIndex (indexLimit)
import Moonlight.Triangulation.Internal.Types (BuildError (..))

ensureCapacity :: Int -> Either BuildError ()
ensureCapacity count
  | count < 0 || count > maximumVertexCapacity = Left (CapacityExceeded count)
  | otherwise = Right ()

-- Mutable allocation reserves @8n + 16@ directed-edge slots. Every topology
-- handle is packed below 'indexLimit', so admissibility is stated against that
-- actual representation bound rather than the machine 'Int' bound.
maximumVertexCapacity :: Int
maximumVertexCapacity = (indexLimit - 16) `quot` 8