diff options
| author | ppedrot | 2013-10-29 17:10:51 +0000 |
|---|---|---|
| committer | ppedrot | 2013-10-29 17:10:51 +0000 |
| commit | cbbd579354d81f6749d14853a1c6a5cc67728907 (patch) | |
| tree | 765e7d1798e4c0b5a334aaad682c34410a603d08 | |
| parent | 77e518644b1295708734e8721e7d8422612983dd (diff) | |
Sharing identity evar filters.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16948 85f007b7-540e-0410-9357-904b9bb8a0f7
| -rw-r--r-- | pretyping/evd.ml | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/pretyping/evd.ml b/pretyping/evd.ml index f2380e17f0..67cf3a32f2 100644 --- a/pretyping/evd.ml +++ b/pretyping/evd.ml @@ -40,6 +40,27 @@ end = struct type t = bool list + (** Most of filters we use are identities, so we share their use. *) + let identity_pool = Array.make 128 [] + + let () = + (** Fill the filter pool *) + for i = 1 to 127 do + let pred = Array.unsafe_get identity_pool (pred i) in + let curr = true :: pred in + Array.unsafe_set identity_pool i curr + done + + let rec identity_gen n accu = + if n = 0 then accu + else identity_gen (pred n) (true :: accu) + + let identity n = + if n < 128 then Array.unsafe_get identity_pool n + else + let accu = Array.unsafe_get identity_pool 127 in + identity_gen (n - 127) accu + let length = List.length let rec equal l1 l2 = match l1, l2 with @@ -48,12 +69,6 @@ struct (if h1 then h2 else not h2) && equal l1 l2 | _ -> false - let rec identity n accu = - if n = 0 then accu - else identity (pred n) (true :: accu) - - let identity n = identity n [] - let rec is_identity = function | [] -> true | true :: l -> is_identity l |
