module LinearScan.Cursor where


import Debug.Trace (trace, traceShow, traceShowId)
import qualified Prelude
import qualified Data.IntMap
import qualified Data.IntSet
import qualified Data.List
import qualified Data.Ord
import qualified Data.Functor.Identity
import qualified Hask.Utils

import qualified LinearScan.Interval as Interval
import qualified LinearScan.Morph as Morph
import qualified LinearScan.ScanState as ScanState
import qualified LinearScan.Vector0 as Vector0


__ :: any
__ = Prelude.error "Logical or arity value used"

curId :: Prelude.Int -> ScanState.ScanStateDesc -> (,) ScanState.IntervalId
         Prelude.Int
curId maxReg sd =
  Prelude.head (ScanState.unhandled maxReg sd)

curIntDetails :: Prelude.Int -> ScanState.ScanStateDesc ->
                 Interval.IntervalDesc
curIntDetails maxReg sd =
  Vector0.vnth (ScanState.nextInterval maxReg sd)
    (ScanState.intervals maxReg sd) (Prelude.fst (curId maxReg sd))

withCursor :: Prelude.Int -> ScanState.ScanStateDesc ->
              (ScanState.ScanStateDesc -> () -> Morph.SState () a1 a2) ->
              Morph.SState () a1 a2
withCursor maxReg pre f e x =
  case x of {
   Morph.Build_SSInfo thisDesc _ ->
    f thisDesc __ e (Morph.Build_SSInfo thisDesc __)}