56 lines
2.0 KiB
Elm
56 lines
2.0 KiB
Elm
module CacheSim.View exposing (..)
|
|
import CacheSim.Raw exposing (..)
|
|
import CacheSim.Model exposing (..)
|
|
import Html exposing (Html, input, text, div, label, span, h2, h3)
|
|
import Html.Attributes exposing (type_, class, value, for)
|
|
import Html.Events exposing (onInput, onClick)
|
|
|
|
button : String -> Msg -> Html Msg
|
|
button s m = input [ type_ "button", onClick m, value s] []
|
|
|
|
buttonWrapper : List (Html Msg) -> Html Msg
|
|
buttonWrapper = div [ class "button-wrapper" ]
|
|
|
|
labeledInput : String -> String -> (String -> Msg) -> Html Msg
|
|
labeledInput s val f =
|
|
div [ class "input-group" ]
|
|
[ span [] [ text s ]
|
|
, input [ value val, type_ "text", onInput f ] []
|
|
]
|
|
|
|
viewRawCacheModel : Int -> RawCacheModel -> Html Msg
|
|
viewRawCacheModel level rcm =
|
|
let
|
|
updateBlockSize s cm = { cm | blockSize = s}
|
|
updateSetCount s cm = { cm | setCount = s}
|
|
updateSetSize s cm = { cm | setSize = s}
|
|
wrapUpdate f s = ChangeRawModel level (f s)
|
|
|
|
deleteButton = button "Delete" (DeleteRawModel level)
|
|
|
|
params = div [ class "cache-model-params" ]
|
|
[ labeledInput "Block size" rcm.blockSize (wrapUpdate updateBlockSize)
|
|
, labeledInput "Set count" rcm.setCount (wrapUpdate updateSetCount)
|
|
, labeledInput "Set size" rcm.setSize (wrapUpdate updateSetSize)
|
|
]
|
|
in
|
|
div [ class "cache-model" ]
|
|
[ h3 [] [ text <| "L" ++ String.fromInt (level + 1) ++ " Cache" ]
|
|
, buttonWrapper [ deleteButton ]
|
|
, params
|
|
]
|
|
|
|
viewRawCacheModelHierarchy : RawCacheModelHierarchy -> Html Msg
|
|
viewRawCacheModelHierarchy rcmh =
|
|
let
|
|
models = div [ class "cache-model-levels" ]
|
|
<|List.indexedMap viewRawCacheModel rcmh
|
|
|
|
newButton = button "Add level" CreateRawModel
|
|
in
|
|
div [ class "cache-model-hierarchy" ]
|
|
[ h2 [] [ text "Cache hierarchy" ]
|
|
, buttonWrapper [ newButton ]
|
|
, models
|
|
]
|