Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /MLRISC/trunk/graphs/node-partition.sml
ViewVC logotype

Annotation of /MLRISC/trunk/graphs/node-partition.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 245 - (view) (download)
Original Path: sml/branches/SMLNJ/src/MLRISC/graphs/node-partition.sml

1 : monnier 245 signature NODE_PARTITION =
2 :     sig
3 :    
4 :     type 'n node_partition
5 :    
6 :     val node_partition : ('n,'e,'g) Graph.graph -> 'n node_partition
7 :     val !! : 'n node_partition -> Graph.node_id -> 'n Graph.node
8 :     val == : 'n node_partition -> Graph.node_id * Graph.node_id -> bool
9 :     val union : 'n node_partition -> ('n Graph.node * 'n Graph.node ->
10 :     'n Graph.node) ->
11 :     Graph.node_id * Graph.node_id -> bool
12 :     val union': 'n node_partition -> Graph.node_id * Graph.node_id -> bool
13 :    
14 :     end
15 :    
16 :     structure NodePartition :> NODE_PARTITION =
17 :     struct
18 :    
19 :     structure U = UnionFindRef
20 :     structure M = HashMap
21 :     structure G = Graph
22 :    
23 :     type 'n node_partition = (G.node_id,'n G.node U.uref) M.map
24 :    
25 :     fun node_partition (G.GRAPH G) =
26 :     let val P = M.create { order = Int.compare,
27 :     hash = fn i => i,
28 :     exn = G.NotFound
29 :     } (#order G () * 2)
30 :     val ins = M.insert P
31 :     val _ = #forall_nodes G (fn n as (i,_) => ins(i,U.uref n))
32 :     in P
33 :     end
34 :    
35 :     fun !! P x = U.!! (M.lookup P x)
36 :     fun == P (x,y) = U.== (M.lookup P x, M.lookup P y)
37 :     fun union P f (x,y) = U.union f (M.lookup P x, M.lookup P y)
38 :     fun union' P (x,y) = U.union' (M.lookup P x, M.lookup P y)
39 :     end
40 :    
41 :     (*
42 :     * $Log$
43 :     *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0