Add an extra parameter to cons so that it does not perform
authorKim Nguyễn <kn@lri.fr>
Wed, 22 Feb 2012 09:14:40 +0000 (10:14 +0100)
committerKim Nguyễn <kn@lri.fr>
Wed, 22 Feb 2012 09:14:40 +0000 (10:14 +0100)
ordered insertion w.r.t the unique ID.

src/hlist.ml
src/hlist.mli

index 300c6a1..4434e1e 100644 (file)
@@ -18,7 +18,7 @@ module type S = sig
   val equal : t -> t -> bool
   val nil : t
   val node : t -> t node
-  val cons : elt -> t -> t
+  val cons : ?sorted:bool -> elt -> t -> t
   val hd : t -> elt
   val tl : t -> t
   val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
@@ -58,13 +58,19 @@ struct
   let nil = Node.make Nil
 
   (* doing sorted insertion allows to make better use of hash consing *)
-  let rec cons e l =
+  let rec sorted_cons e l =
     match l.Node.node with
       |        Nil -> Node.make (Cons(e, l))
       | Cons (x, ll) ->
          if H.uid e < H.uid x
          then Node.make (Cons(e, l))
-         else Node.make (Cons(x, cons e ll))
+         else Node.make (Cons(x, sorted_cons e ll))
+
+  let cons e l =
+    Node.make(Cons(e, l))
+
+  let cons ?(sorted=true) e l =
+    if sorted then sorted_cons e l else cons e l
 
   let hd = function { Node.node = Cons(a,_) } -> a | _ -> failwith "hd"
   let tl = function { Node.node = Cons(_,a) } -> a | _ -> failwith "tl"
index d7749f1..3173c2c 100644 (file)
@@ -17,7 +17,7 @@ module type S = sig
   val equal : t -> t -> bool
   val nil : t
   val node : t -> t node
-  val cons : elt -> t -> t
+  val cons : ?sorted:bool -> elt -> t -> t
   val hd : t -> elt
   val tl : t -> t
   val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a