Commits

Sébastien Ferré committed 4dd3368

Initial revision

Comments (0)

Files changed (1)

+
+(* extensions a Weak *)
+
+let weak_get_index : 'a Weak.t ref -> int =
+  fun w ->
+    let l = Weak.length !w in
+    let i = ref 0 in
+    while Weak.check !w !i do incr i done;
+    if !i >= l then begin
+      let ar = Weak.create (l + 10)
+      in Weak.blit !w 0 ar 0 l; w := ar end;
+    !i
+
+let weak_add : 'a Weak.t ref -> 'a -> unit =
+  fun w x ->
+    let i = weak_get_index w in
+    Weak.set !w i (Some x)
+      
+let weak_iter : 'a Weak.t -> ('a -> unit) -> unit =
+  fun w f ->
+    for i=0 to Weak.length w - 1 do
+      match Weak.get w i with
+	None -> ()
+      | Some x -> f x
+    done