Skip to content

Commit 82e03b8

Browse files
committed
Replace long stacktrace-based witness node names with enumerated numbers (issue #151)
1 parent 1431c68 commit 82e03b8

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/witness/graphml.ml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ struct
6464
BatIO.close_out f
6565
end
6666

67+
(* TODO: generalize N argument to just to_string *)
6768
module ArgNodeGraphMlWriter (N: MyARG.Node) (M: StringGraphMlWriter):
6869
GraphMlWriter with type node = N.t =
6970
struct
@@ -81,6 +82,39 @@ struct
8182
let stop = M.stop
8283
end
8384

85+
module EnumerateNodeGraphMlWriter (N: Hashtbl.HashedType) (M: StringGraphMlWriter):
86+
GraphMlWriter with type node = N.t =
87+
struct
88+
module H = Hashtbl.Make (N)
89+
90+
type t =
91+
{
92+
delegate: M.t;
93+
node_numbers: int H.t;
94+
mutable next_number: int
95+
}
96+
type node = N.t
97+
98+
let string_of_node ({node_numbers; next_number; _} as g) node =
99+
let number = match H.find_opt node_numbers node with
100+
| Some number -> number
101+
| None ->
102+
let number = next_number in
103+
H.replace node_numbers node number;
104+
g.next_number <- number + 1;
105+
number
106+
in
107+
"N" ^ string_of_int number
108+
109+
let start out = { delegate = M.start out; node_numbers = H.create 100; next_number = 0 }
110+
let write_key {delegate; _} = M.write_key delegate
111+
let start_graph {delegate; _} = M.start_graph delegate
112+
let write_metadata {delegate; _} = M.write_metadata delegate
113+
let write_node ({delegate; _} as g) node datas = M.write_node delegate (string_of_node g node) datas
114+
let write_edge ({delegate; _} as g) source target datas = M.write_edge delegate (string_of_node g source) (string_of_node g target) datas
115+
let stop {delegate; _} = M.stop delegate
116+
end
117+
84118
module DeDupGraphMlWriter (Node: Hashtbl.HashedType) (M: GraphMlWriter with type node = Node.t):
85119
GraphMlWriter with type node = Node.t =
86120
struct

src/witness/witness.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ let write_file filename (module Task:Task) (module TaskResult:WitnessTaskResult)
5555
let module Arg = MyARG.InterestingArg (Arg) (IsInteresting) in
5656

5757
let module N = Arg.Node in
58-
let module GML = DeDupGraphMlWriter (N) (ArgNodeGraphMlWriter (N) (XmlGraphMlWriter)) in
58+
(* TODO: add an option for which node names to use *)
59+
(* let module GML = DeDupGraphMlWriter (N) (ArgNodeGraphMlWriter (N) (XmlGraphMlWriter)) in *)
60+
let module GML = DeDupGraphMlWriter (N) (EnumerateNodeGraphMlWriter (N) (XmlGraphMlWriter)) in
5961
let module NH = Hashtbl.Make (N) in
6062

6163
let main_entry = Arg.main_entry in

0 commit comments

Comments
 (0)