From 118c9154bd97f5486a25e6260958cc23329c3414 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 4 Sep 2015 21:43:11 +0200 Subject: [PATCH] add `CCKtree.force` --- src/iter/CCKTree.ml | 4 ++++ src/iter/CCKTree.mli | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/iter/CCKTree.ml b/src/iter/CCKTree.ml index 02ac32c4..ab19abd4 100644 --- a/src/iter/CCKTree.ml +++ b/src/iter/CCKTree.ml @@ -171,6 +171,10 @@ let bfs ?(pset=set_of_cmp ()) t = in bfs pset (FQ.push FQ.empty t) +let rec force t : ([`Nil | `Node of 'a * 'b list] as 'b) = match t() with + | `Nil -> `Nil + | `Node (x, l) -> `Node (x, List.map force l) + let find ?pset f t = let rec _find_kl f l = match l() with | `Nil -> None diff --git a/src/iter/CCKTree.mli b/src/iter/CCKTree.mli index 30916abf..4145d840 100644 --- a/src/iter/CCKTree.mli +++ b/src/iter/CCKTree.mli @@ -91,6 +91,11 @@ val dfs : ?pset:'a pset -> 'a t -> [ `Enter of 'a | `Exit of 'a ] klist val bfs : ?pset:'a pset -> 'a t -> 'a klist (** Breadth first traversal of the tree *) +val force : 'a t -> ([ `Nil | `Node of 'a * 'b list ] as 'b) +(** [force t] evaluates [t] completely and returns a regular tree + structure + @since NEXT_RELEASE *) + val find : ?pset:'a pset -> ('a -> 'b option) -> 'a t -> 'b option (** Look for an element that maps to [Some _] *)