aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/cArray.ml
diff options
context:
space:
mode:
authorGravatar ppedrot <ppedrot@85f007b7-540e-0410-9357-904b9bb8a0f7>2013-03-23 15:05:26 +0000
committerGravatar ppedrot <ppedrot@85f007b7-540e-0410-9357-904b9bb8a0f7>2013-03-23 15:05:26 +0000
commit914d19f19cd73d1794c0160bd6e7358c13eba630 (patch)
treec60b68ddac62f60f1bef763ba970805d228180ad /lib/cArray.ml
parent7bc3e1ce35798d089a979f3cb5a4c5ecc232f850 (diff)
Minor code cleaning in CArray / CList.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16351 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'lib/cArray.ml')
-rw-r--r--lib/cArray.ml46
1 files changed, 29 insertions, 17 deletions
diff --git a/lib/cArray.ml b/lib/cArray.ml
index 05c8cc87c..eff317aac 100644
--- a/lib/cArray.ml
+++ b/lib/cArray.ml
@@ -90,31 +90,43 @@ include Array
(* Arrays *)
-let compare item_cmp v1 v2 =
- let c = compare (Array.length v1) (Array.length v2) in
- if c<>0 then c else
- let rec cmp = function
- -1 -> 0
- | i ->
- let c' = item_cmp v1.(i) v2.(i) in
- if c'<>0 then c'
- else cmp (i-1) in
- cmp (Array.length v1 - 1)
+let compare cmp v1 v2 =
+ if v1 == v2 then 0
+ else
+ let len = Array.length v1 in
+ let c = Int.compare len (Array.length v2) in
+ if c <> 0 then c else
+ let rec loop i =
+ if i < 0 then 0
+ else
+ let x = Array.unsafe_get v1 i in
+ let y = Array.unsafe_get v2 i in
+ let c = cmp x y in
+ if c <> 0 then c
+ else loop (i - 1)
+ in
+ loop (len - 1)
let equal cmp t1 t2 =
if t1 == t2 then true else
- if not (Array.length t1 = Array.length t2) then false
- else
- let rec aux i =
- (i = Array.length t1) || (cmp t1.(i) t2.(i) && aux (i + 1))
- in aux 0
+ let len = Array.length t1 in
+ if not (Int.equal len (Array.length t2)) then false
+ else
+ let rec aux i =
+ if i < 0 then true
+ else
+ let x = Array.unsafe_get t1 i in
+ let y = Array.unsafe_get t2 i in
+ cmp x y && aux (pred i)
+ in
+ aux (len - 1)
-let is_empty array = (Array.length array) = 0
+let is_empty array = Int.equal (Array.length array) 0
let exists f v =
let rec exrec = function
| -1 -> false
- | n -> (f v.(n)) || (exrec (n-1))
+ | n -> f (Array.unsafe_get v n) || (exrec (n-1))
in
exrec ((Array.length v)-1)