@@ -74,24 +74,21 @@ type node = {
7474(* Type of a hyperedge. *)
7575and edge = node list ref
7676
77- module Heap = struct
78- include Binary_heap. Make
79- (struct
80- type t = node
81- let compare { weight = w1 ; _ } { weight = w2 ; _ } = w1 - w2
82- end )
83-
84- let create =
85- let dummy_edge : node list ref = ref [] in
86- let dummy = {
87- id = Term.Const.Int. int " 0" (* dummy *) ;
88- outgoing = dummy_edge;
89- in_degree = - 1 ;
90- weight = - 1 ;
91- }
92- in
93- create ~dummy
94- end
77+ module Hp =
78+ Heap. MakeOrdered
79+ (struct
80+ type t = node
81+ let compare { weight = w1 ; _ } { weight = w2 ; _ } = w1 - w2
82+
83+ let default =
84+ let dummy_edge : node list ref = ref [] in
85+ {
86+ id = Term.Const.Int. int " 0" (* dummy *) ;
87+ outgoing = dummy_edge;
88+ in_degree = - 1 ;
89+ weight = - 1 ;
90+ }
91+ end )
9592
9693let (let * ) = Option. bind
9794
@@ -117,9 +114,9 @@ let def_of_dstr dstr =
117114
118115 @return a heap that contains all the nodes of this graph without ingoing
119116 hyperedges. *)
120- let build_graph (defs : ty_def list ) : Heap .t =
117+ let build_graph (defs : ty_def list ) : Hp .t =
121118 let map : (ty_def, edge) Hashtbl.t = Hashtbl. create 17 in
122- let hp : Heap .t = Heap . create 17 in
119+ let hp : Hp .t = Hp . create 17 in
123120 List. iter (fun d -> Hashtbl. add map d (ref [] )) defs;
124121 List. iter
125122 (fun def ->
@@ -152,7 +149,7 @@ let build_graph (defs : ty_def list) : Heap.t =
152149 ) 0 dstrs
153150 in
154151 node.in_degree < - in_degree;
155- if in_degree = 0 then Heap. add hp node
152+ if in_degree = 0 then Hp. insert hp node
156153 ) cases
157154 ) defs;
158155 hp
@@ -182,10 +179,10 @@ let add_cstr, find_weight, reinit =
182179 Kahn's algorithm. *)
183180let add_nest n =
184181 let hp = build_graph n in
185- while not @@ Heap . is_empty hp do
182+ while not @@ Hp . is_empty hp do
186183 (* Loop invariant: the set of nodes in heap [hp] is exactly
187184 the set of the nodes of the graph without ingoing hyperedge. *)
188- let { id; outgoing; in_degree; _ } = Heap . pop_minimum hp in
185+ let { id; outgoing; in_degree; _ } = Hp . pop_minimum hp in
189186 add_cstr @@ Uid. of_dolmen id;
190187 assert (in_degree = 0 );
191188 outgoing :=
@@ -194,7 +191,7 @@ let add_nest n =
194191 assert (node.in_degree > 0 );
195192 let node = { node with in_degree = node.in_degree - 1 } in
196193 if node.in_degree = 0 then (
197- Heap. add hp node;
194+ Hp. insert hp node;
198195 None
199196 ) else (
200197 Some node
0 commit comments