(***********************************************************************)
(*
- Time-stamp: <Last modified on 2013-03-11 00:14:28 CET by Kim Nguyen>
+ Time-stamp: <Last modified on 2013-03-14 19:14:03 CET by Kim Nguyen>
*)
INCLUDE "utils.ml"
}
+module Transition = Hcons.Make (struct
+ type t = State.t * QNameSet.t * SFormula.t
+ let equal (a, b, c) (d, e, f) =
+ a == d && b == e && c == f
+ let hash (a, b, c) =
+ HASHINT4 (PRIME1, a, ((QNameSet.uid b) :> int), ((SFormula.uid c) :> int))
+end)
+
+module TransList : sig
+ include Hlist.S with type elt = Transition.t
+ val print : Format.formatter -> t -> unit
+end =
+ struct
+ include Hlist.Make(Transition)
+ let print ppf l =
+ iter (fun t ->
+ let q, lab, f = Transition.node t in
+ fprintf ppf "%a, %a -> %a<br/>" State.print q QNameSet.print lab SFormula.print f) l
+ end
+
let get_trans a states tag =
StateSet.fold (fun q acc0 ->
try
let trs = Hashtbl.find a.transitions q in
List.fold_left (fun acc1 (labs, phi) ->
- if QNameSet.mem tag labs then (q,phi)::acc1 else acc1) acc0 trs
+ if QNameSet.mem tag labs then TransList.cons (Transition.make (q, labs, phi)) acc1 else acc1) acc0 trs
with Not_found -> acc0
- ) states []
+ ) states TransList.nil
(*
[add_trans a q labels f] adds a transition [(q,labels) -> f] to the