Sockeye: Implement checks in net builder
[barrelfish] / tools / sockeye / SockeyeASTDecodingNet.hs
index ea751e9..6ba78c7 100644 (file)
 
 module SockeyeASTDecodingNet where
 
-import Data.Map(Map)
+import Data.List (intersperse)
+import Data.Map (Map)
+
+type NetSpec = Map NodeId NodeSpec
 
-{-
-Nodes are identfied by a namespace and a name
--}
 data NodeId = NodeId
-    { namespace :: [String]
+    { namespace :: Namespace
     , name      :: !String
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Ord)
 
-{-
-Addresses are natural numbers
--}
-newtype Addr = Addr Word
-  deriving (Eq, Ord, Show)
+instance Show NodeId where
+    show (NodeId namespace name) = 
+        case ns namespace of
+            [] -> name
+            _  -> concat [show namespace, ".", name]
 
-{-
-A block is a contigous set of addresses
--}
-data BlockSpec = BlockSpec
-    { base  :: Addr
-    , limit :: Addr
-    } deriving (Eq, Ord, Show)
+newtype Namespace = Namespace
+    { ns :: [String] }
+    deriving (Eq, Ord)
 
-{-
-A mapping of a source address block to a destination node
-at a base address
--}
-data MapSpec = MapSpec
-    { srcBlock :: BlockSpec
-    , destNode :: NodeId
-    , destBase :: Addr
+instance Show Namespace where
+    show (Namespace ns) = concat $ intersperse "." ns
+
+data NodeSpec = NodeSpec
+    { nodeType  :: NodeType
+    , accept    :: [BlockSpec]
+    , translate :: [MapSpec]
+    , overlay   :: Maybe NodeId
     } deriving (Show)
 
-{-
-Node can either be memory, device or other
--}
 data NodeType
     = Memory
     | Device
     | Other
+    deriving (Show)
 
-instance Show NodeType where
-    show Memory = "memory"
-    show Device = "device"
-    show Other  = "other"
+data BlockSpec = BlockSpec
+    { base  :: Address
+    , limit :: Address
+    } deriving (Show)
 
-{-
-A node is specified as a list of blocks it accepts,
-a list of mappings and possibly an overlay on another block
--}
-data NodeSpec = NodeSpec
-    { nodeType  :: NodeType
-    , accept    :: [BlockSpec]
-    , translate :: [MapSpec]
-    , overlay   :: Maybe NodeId
+data MapSpec = MapSpec
+    { srcBlock :: BlockSpec
+    , destNode :: NodeId
+    , destBase :: Address
     } deriving (Show)
 
-{-
-A decoding net is specified as a list 
-of Node IDs mapped to Nodes
--}
-newtype NetSpec = NetSpec (Map NodeId NodeSpec)
-    deriving (Show)
+type Address = Word