Sockeye: Start implementing overley to map translation
[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 (intercalate)
19 import Data.Map (Map)
20
21 newtype NetSpec =
22     NetSpec
23         { net :: Map NodeId NodeSpec }
24     deriving (Show)
25
26 data NodeId = NodeId
27     { namespace :: Namespace
28     , name      :: !String
29     } deriving (Eq, Ord)
30
31 instance Show NodeId where
32     show (NodeId namespace name) = 
33         case ns namespace of
34             [] -> name
35             _  -> concat [show namespace, ".", name]
36
37 newtype Namespace = Namespace
38     { ns :: [String] }
39     deriving (Eq, Ord)
40
41 instance Show Namespace where
42     show (Namespace ns) = intercalate "." $ reverse ns
43
44 data NodeSpec
45     = NodeSpec
46         { nodeType  :: NodeType
47         , accept    :: [BlockSpec]
48         , translate :: [MapSpec]
49         }
50     deriving (Show)
51
52 data NodeType
53     = Memory
54     | Device
55     | Other
56     deriving (Show)
57
58 data BlockSpec = BlockSpec
59     { base  :: Address
60     , limit :: Address
61     } deriving (Show)
62
63 data MapSpec = MapSpec
64     { srcBlock :: BlockSpec
65     , destNode :: NodeId
66     , destBase :: Address
67     } deriving (Show)
68
69 newtype Address =
70     Address
71         { address :: Word }
72     deriving (Show)