Display errors.
This commit is contained in:
parent
87cc4c4cb9
commit
a3d6a1440f
|
@ -21,11 +21,11 @@ translateRawCacheModel rcm =
|
||||||
(Just bs, Just sc, Just ss) ->
|
(Just bs, Just sc, Just ss) ->
|
||||||
Ok { blockSize = bs, setCount = sc, setSize = ss }
|
Ok { blockSize = bs, setCount = sc, setSize = ss }
|
||||||
(Nothing, _, _) ->
|
(Nothing, _, _) ->
|
||||||
Err <| "Unable to parse the block size: " ++ rcm.blockSize
|
Err <| "Unable to parse the block size: \"" ++ rcm.blockSize ++ "\""
|
||||||
(_, Nothing, _) ->
|
(_, Nothing, _) ->
|
||||||
Err <| "Unable to parse the set count: " ++ rcm.setCount
|
Err <| "Unable to parse the set count: \"" ++ rcm.setCount ++ "\""
|
||||||
(_, _, Nothing) ->
|
(_, _, Nothing) ->
|
||||||
Err <| "Unable to parse the set size: " ++ rcm.setSize
|
Err <| "Unable to parse the set size: \"" ++ rcm.setSize ++ "\""
|
||||||
|
|
||||||
translateRawCacheModelHierarchy : RawCacheModelHierarchy -> Result String CacheModelHierarchy
|
translateRawCacheModelHierarchy : RawCacheModelHierarchy -> Result String CacheModelHierarchy
|
||||||
translateRawCacheModelHierarchy rcmh =
|
translateRawCacheModelHierarchy rcmh =
|
||||||
|
@ -42,8 +42,8 @@ validateCacheModelHierarchy cmh =
|
||||||
[] -> Ok []
|
[] -> Ok []
|
||||||
x::[] -> Ok [x]
|
x::[] -> Ok [x]
|
||||||
x::y::xs ->
|
x::y::xs ->
|
||||||
if modBy y.blockSize x.blockSize == 0
|
if modBy x.blockSize y.blockSize == 0
|
||||||
then validateCacheModelHierarchy (y::xs)
|
then validateCacheModelHierarchy (y::xs)
|
||||||
else Err <| "Block cache size " ++ String.fromInt x.blockSize ++
|
else Err <| "Block cache size " ++ String.fromInt y.blockSize ++
|
||||||
" is not a multiple of the next level cache's" ++
|
" is not a multiple of the next level cache's" ++
|
||||||
" block size (" ++ String.fromInt y.blockSize ++ ")"
|
" block size (" ++ String.fromInt x.blockSize ++ ")"
|
||||||
|
|
|
@ -2,9 +2,16 @@ module CacheSim.View exposing (..)
|
||||||
import CacheSim.Raw exposing (..)
|
import CacheSim.Raw exposing (..)
|
||||||
import CacheSim.Model exposing (..)
|
import CacheSim.Model exposing (..)
|
||||||
import Html exposing (Html, input, text, div, label, span, h2, h3)
|
import Html exposing (Html, input, text, div, label, span, h2, h3)
|
||||||
import Html.Attributes exposing (type_, class, value, for)
|
import Html.Attributes exposing (type_, class, value, for, classList, disabled)
|
||||||
import Html.Events exposing (onInput, onClick)
|
import Html.Events exposing (onInput, onClick)
|
||||||
|
|
||||||
|
optionalButton : Bool -> String -> Msg -> Html Msg
|
||||||
|
optionalButton e s m =
|
||||||
|
let
|
||||||
|
events = if e then [ onClick m ] else [ disabled (not e) ]
|
||||||
|
in
|
||||||
|
input ([ type_ "button", value s ] ++ events) []
|
||||||
|
|
||||||
button : String -> Msg -> Html Msg
|
button : String -> Msg -> Html Msg
|
||||||
button s m = input [ type_ "button", onClick m, value s] []
|
button s m = input [ type_ "button", onClick m, value s] []
|
||||||
|
|
||||||
|
@ -45,11 +52,30 @@ viewRawCacheModelHierarchy rcmh =
|
||||||
let
|
let
|
||||||
models = div [ class "cache-model-levels" ]
|
models = div [ class "cache-model-levels" ]
|
||||||
<|List.indexedMap viewRawCacheModel rcmh
|
<|List.indexedMap viewRawCacheModel rcmh
|
||||||
|
translationResult = Result.andThen validateCacheModelHierarchy
|
||||||
|
<| translateRawCacheModelHierarchy rcmh
|
||||||
|
isValid =
|
||||||
|
case translationResult of
|
||||||
|
Ok _ -> True
|
||||||
|
Err _ -> False
|
||||||
|
errorHtml =
|
||||||
|
case translationResult of
|
||||||
|
Ok _ -> viewError True ""
|
||||||
|
Err e -> viewError False e
|
||||||
|
|
||||||
newButton = button "Add level" CreateRawModel
|
newButton = button "Add level" CreateRawModel
|
||||||
|
useButton = optionalButton isValid "Use hierarchy" CreateRawModel
|
||||||
in
|
in
|
||||||
div [ class "cache-model-hierarchy" ]
|
div [ class "cache-model-hierarchy" ]
|
||||||
[ h2 [] [ text "Cache hierarchy" ]
|
[ h2 [] [ text "Cache hierarchy" ]
|
||||||
, buttonWrapper [ newButton ]
|
, errorHtml
|
||||||
|
, buttonWrapper [ newButton, useButton ]
|
||||||
, models
|
, models
|
||||||
]
|
]
|
||||||
|
|
||||||
|
viewError : Bool -> String -> Html Msg
|
||||||
|
viewError hide e = span [ classList [ ("hidden", hide) ] ] [ text e ]
|
||||||
|
|
||||||
|
viewBase : Model -> Html Msg
|
||||||
|
viewBase m =
|
||||||
|
div [] [ viewRawCacheModelHierarchy m.rawHierarchy ]
|
||||||
|
|
|
@ -24,7 +24,7 @@ init f =
|
||||||
view : Model -> Document Msg
|
view : Model -> Document Msg
|
||||||
view m =
|
view m =
|
||||||
{ title = "Cache Simulator"
|
{ title = "Cache Simulator"
|
||||||
, body = [ viewRawCacheModelHierarchy m.rawHierarchy ]
|
, body = [ viewBase m ]
|
||||||
}
|
}
|
||||||
|
|
||||||
update : Msg -> Model -> (Model, Cmd Msg)
|
update : Msg -> Model -> (Model, Cmd Msg)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user