Sockeye: Implement checks in net builder
[barrelfish] / tools / sockeye / SockeyeASTDecodingNet.hs
1 {-
2   SockeyeASTDecodingNet.hs: Decoding net AST for Sockeye
3
4   Part of Sockeye
5
6   Copyright (c) 2017, ETH Zurich.
7
8   All rights reserved.
9
10   This file is distributed under the terms in the attached LICENSE file.
11   If you do not find this file, copies can be found by writing to:
12   ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
13   Attn: Systems Group.
14 -}
15
16 module SockeyeASTDecodingNet where
17
18 import Data.List (intersperse)
19 import Data.Map (Map)
20
21 type NetSpec = Map NodeId NodeSpec
22
23 data NodeId = NodeId
24     { namespace :: Namespace
25     , name      :: !String
26     } deriving (Eq, Ord)
27
28 instance Show NodeId where
29     show (NodeId namespace name) = 
30         case ns namespace of
31             [] -> name
32             _  -> concat [show namespace, ".", name]
33
34 newtype Namespace = Namespace
35     { ns :: [String] }
36     deriving (Eq, Ord)
37
38 instance Show Namespace where
39     show (Namespace ns) = concat $ intersperse "." ns
40
41 data NodeSpec = NodeSpec
42     { nodeType  :: NodeType
43     , accept    :: [BlockSpec]
44     , translate :: [MapSpec]
45     , overlay   :: Maybe NodeId
46     } deriving (Show)
47
48 data NodeType
49     = Memory
50     | Device
51     | Other
52     deriving (Show)
53
54 data BlockSpec = BlockSpec
55     { base  :: Address
56     , limit :: Address
57     } deriving (Show)
58
59 data MapSpec = MapSpec
60     { srcBlock :: BlockSpec
61     , destNode :: NodeId
62     , destBase :: Address
63     } deriving (Show)
64
65 type Address = Word