Skip to content
Snippets Groups Projects
Arbiter.hs 4.02 KiB
Newer Older
{-# OPTIONS_GHC -cpp -XMagicHash #-}
{- For Hugs, use the option -F"cpp -P -traditional" -}

module Arbiter where

import qualified Prelude
import qualified Bank
import qualified Commands
import qualified Datatypes
import qualified Requests
import qualified Trace
import qualified Eqtype
import qualified Seq
import qualified Ssrnat

#ifdef __GLASGOW_HASKELL__
import qualified GHC.Base
#else
-- HUGS
import qualified IOExts
#endif

#ifdef __GLASGOW_HASKELL__
unsafeCoerce :: a -> b
unsafeCoerce = GHC.Base.unsafeCoerce#
#else
-- HUGS
unsafeCoerce :: a -> b
unsafeCoerce = IOExts.unsafeCoerce
#endif

type Arrival_function_t =
  Prelude.Int -> Requests.Requests_t
  -- singleton inductive, whose constructor was mkArrivalFunction
  
coq_Arrival_at :: Bank.Requestor_configuration -> Bank.Bank_configuration -> Arrival_function_t ->
                  Prelude.Int -> Requests.Requests_t
coq_Arrival_at _ _ arrival_function_t =
  arrival_function_t

data Arbiter_state_t = Coq_mkArbiterState {
  cmds :: Commands.Commands_t,
  time :: Prelude.Int,
  internal_state :: Bank.State_t
}

coq_Arbiter_Commands :: Bank.Requestor_configuration -> Bank.Arbiter_configuration ->
                        Bank.Bank_configuration -> Arbiter_state_t -> Commands.Commands_t
coq_Arbiter_Commands _ _ _ a =
  case a of {
   Coq_mkArbiterState arbiter_Commands _ _ -> arbiter_Commands}

coq_Arbiter_Time :: Bank.Requestor_configuration -> Bank.Arbiter_configuration -> Bank.Bank_configuration
                    -> Arbiter_state_t -> Prelude.Int
coq_Arbiter_Time _ _ _ a =
  case a of {
   Coq_mkArbiterState _ arbiter_Time _ -> arbiter_Time}

coq_Arbiter_State :: Bank.Requestor_configuration -> Bank.Arbiter_configuration -> Bank.Bank_configuration
                     -> Arbiter_state_t -> Bank.State_t
coq_Arbiter_State _ _ _ a =
  case a of {
   Coq_mkArbiterState _ _ arbiter_State -> arbiter_State}

data Arbiter_trace_t =
   Coq_mkArbiterTrace (Requests.Requests_t -> Arbiter_state_t) (Requests.Requests_t -> Arbiter_state_t ->
                                                               Arbiter_state_t)

coq_Init :: Bank.Requestor_configuration -> Bank.Arbiter_configuration -> Bank.Bank_configuration ->
            Arbiter_trace_t -> Requests.Requests_t -> Arbiter_state_t
coq_Init _ _ _ arbiter_trace_t =
  case arbiter_trace_t of {
   Coq_mkArbiterTrace init _ -> init}

coq_Next :: Bank.Requestor_configuration -> Bank.Arbiter_configuration -> Bank.Bank_configuration ->
            Arbiter_trace_t -> Requests.Requests_t -> Arbiter_state_t -> Arbiter_state_t
coq_Next _ _ _ arbiter_trace_t =
  case arbiter_trace_t of {
   Coq_mkArbiterTrace _ next -> next}

type Arbiter_t = Prelude.Int -> Trace.Trace_t
  -- singleton inductive, whose constructor was mkArbiter
  
coq_Default_arrival_at :: Bank.Requestor_configuration -> Bank.Bank_configuration -> (Datatypes.Coq_list
                          Requests.Request_t) -> Eqtype.Equality__Coq_sort -> Datatypes.Coq_list
                          Requests.Request_t
coq_Default_arrival_at rEQESTOR_CFG bANK_CFG input t =
  Seq.filter (\x ->
    Eqtype.eq_op Ssrnat.nat_eqType (unsafeCoerce Requests.coq_Date rEQESTOR_CFG bANK_CFG x) t) input

coq_Default_arrival_function_t :: Bank.Requestor_configuration -> Bank.Bank_configuration ->
                                  Requests.Requests_t -> Arrival_function_t
coq_Default_arrival_function_t rEQESTOR_CFG bANK_CFG r =
  unsafeCoerce coq_Default_arrival_at rEQESTOR_CFG bANK_CFG r

coq_Default_arbitrate :: Bank.Requestor_configuration -> Bank.Arbiter_configuration ->
                         Bank.Bank_configuration -> Arrival_function_t -> Arbiter_trace_t -> Prelude.Int
                         -> Arbiter_state_t
coq_Default_arbitrate rEQESTOR_CFG aRBITER_CFG bANK_CFG aF aT t =
  let {r = coq_Arrival_at rEQESTOR_CFG bANK_CFG aF t} in
  (\fO fS n -> if n Prelude.== 0 then fO () else fS (n Prelude.- 1))
    (\_ -> coq_Init rEQESTOR_CFG aRBITER_CFG bANK_CFG aT r)
    (\t' ->
    coq_Next rEQESTOR_CFG aRBITER_CFG bANK_CFG aT r
      (coq_Default_arbitrate rEQESTOR_CFG aRBITER_CFG bANK_CFG aF aT t'))
    t