diff options
author | Jed Barber <jjbarber@y7mail.com> | 2014-12-06 23:00:03 +1100 |
---|---|---|
committer | Jed Barber <jjbarber@y7mail.com> | 2014-12-06 23:00:03 +1100 |
commit | 1d1e603683e63a59734adf57b3500217945b17c6 (patch) | |
tree | 45c5664f634d349aa77567980af1c9b4d99840b3 /src/Grasp/Monad.hs | |
parent | 3c6662a0b9a00df225037b10ddcd7fec4ce50568 (diff) |
set and del instructions added
Diffstat (limited to 'src/Grasp/Monad.hs')
-rw-r--r-- | src/Grasp/Monad.hs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/Grasp/Monad.hs b/src/Grasp/Monad.hs index b49b53d..e58aa74 100644 --- a/src/Grasp/Monad.hs +++ b/src/Grasp/Monad.hs @@ -13,7 +13,9 @@ module Grasp.Monad ( peekIP, nextIP, - nodesOut + nodesOut, + reLabel, + insEdge ) where @@ -39,7 +41,7 @@ import qualified Data.List as List import Data.Map( Map ) import qualified Data.Map as Map -import Grasp.Graph( Node, LNode, LEdge, Gr ) +import Grasp.Graph( Node, LNode, LEdge, Gr, (&) ) import qualified Grasp.Graph as Graph import Grasp.Types.IP( IP ) @@ -309,3 +311,23 @@ nodesOut s n = do if (Maybe.isNothing curNode) then return [] else return result + + +reLabel :: Instruction -> GNode -> GraspM () +reLabel i n = do + (gr, ips, fh) <- State.get + + let (mc, d) = Graph.match (GN.toNode n) gr + c = Maybe.fromJust mc + c' = (\(w,x,y,z) -> (w,x,i,z)) $ c + + Monad.when (Maybe.isJust mc) (State.put ((c' & d) ,ips, fh)) + + + +insEdge :: GEdge -> GraspM () +insEdge e = do + (gr, ips, fh) <- State.get + let gr' = Graph.insEdge (GE.toLEdge e) gr + State.put (gr', ips, fh) + |