projects
/
tatoo.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add a compact tree model.
[tatoo.git]
/
src
/
cache.ml
diff --git
a/src/cache.ml
b/src/cache.ml
index
9ffb332
..
e5ee434
100644
(file)
--- a/
src/cache.ml
+++ b/
src/cache.ml
@@
-24,7
+24,7
@@
struct
type 'a index = int -> 'a
let level a = a.level
let create_with_level level a = {
type 'a index = int -> 'a
let level a = a.level
let create_with_level level a = {
- line = Array.
creat
e 0 a;
+ line = Array.
mak
e 0 a;
dummy = a;
offset = ~-1;
level = level;
dummy = a;
offset = ~-1;
level = level;
@@
-41,7
+41,7
@@
struct
if i < offset then begin (* bottom resize *)
let pad = offset - i in
let nlen = len + pad in
if i < offset then begin (* bottom resize *)
let pad = offset - i in
let nlen = len + pad in
- let narray = Array.
creat
e nlen a.dummy in
+ let narray = Array.
mak
e nlen a.dummy in
for j = 0 to len - 1 do
narray.(j+pad) <- a.line.(j)
done;
for j = 0 to len - 1 do
narray.(j+pad) <- a.line.(j)
done;
@@
-51,7
+51,7
@@
struct
end else begin (* top resize *)
(* preventively allocate the space for the following elements *)
let nlen = ((i - offset + 1) lsl 1) + 1 in
end else begin (* top resize *)
(* preventively allocate the space for the following elements *)
let nlen = ((i - offset + 1) lsl 1) + 1 in
- let narray = Array.
creat
e nlen a.dummy in
+ let narray = Array.
mak
e nlen a.dummy in
for j = 0 to len - 1 do
narray.(j) <- a.line.(j);
done;
for j = 0 to len - 1 do
narray.(j) <- a.line.(j);
done;
@@
-61,10
+61,12
@@
struct
let find a i =
let idx = i - a.offset in
let find a i =
let idx = i - a.offset in
- let len = Array.length a.line in
- if idx >= 0 && idx < len then
- Array.unsafe_get a.line idx
- else a.dummy
+ if idx < 0 then a.dummy
+ else
+ let len = Array.length a.line in
+ if idx < len then
+ Array.unsafe_get a.line idx
+ else a.dummy
let dummy a = a.dummy
let dummy a = a.dummy
@@
-106,8
+108,8
@@
struct
let find a i j =
let v = N1.find a i in
let find a i j =
let v = N1.find a i in
- if v
== a.N1.dummy then v.N1.dummy
- else
N1.find v j
+ if v
!= a.N1.dummy then N1.find v j
+ else
v.N1.dummy
let dummy c = c.N1.dummy.N1.dummy
let dummy c = c.N1.dummy.N1.dummy
@@
-155,8
+157,8
@@
struct
let find a i j k =
let v = N1.find a i in
let find a i j k =
let v = N1.find a i in
- if v
== a.N1.dummy then N2.dummy v
- else N2.
find v j k
+ if v
!= a.N1.dummy then N2.find v j k
+ else N2.
dummy v
let dummy a = N2.dummy a.N1.dummy
let dummy a = N2.dummy a.N1.dummy
@@
-275,45
+277,32
@@
end
module N6 =
struct
module N6 =
struct
- type 'a t = 'a N
5.t N1
.t
+ type 'a t = 'a N
3.t N3
.t
- let create_with_level level a =
- let dummy5 = N5.create_with_level (level+1) a in
- N1.create_with_level (level) dummy5
-
- let create a = create_with_level 1 a
+ let create a =
+ let dummy3 = N3.create a in
+ N3.create dummy3
let add a i j k l m n v =
let add a i j k l m n v =
- let line = N
1.find a i
in
- if line == N
1
.dummy a then
- let nline = N
5.create_with_level (a.N1.level+1) (N5
.dummy line) in
- N
1.add a i
nline;
- N
5.add nline j k
l m n v
+ let line = N
3.find a i j k
in
+ if line == N
3
.dummy a then
+ let nline = N
3.create (N3
.dummy line) in
+ N
3.add a i j k
nline;
+ N
3.add nline
l m n v
else
else
- N
5.add line j k
l m n v
+ N
3.add line
l m n v
let find a i j k l m n =
let find a i j k l m n =
- let v = N
1.find a i
in
- if v == N
1.dummy a then N5
.dummy v
- else N
5.find v j k
l m n
+ let v = N
3.find a i j k
in
+ if v == N
3.dummy a then N3
.dummy v
+ else N
3.find v
l m n
- let dummy a = N
5.dummy (N1
.dummy a)
+ let dummy a = N
3.dummy (N3
.dummy a)
let iteri f a =
let iteri f a =
- N
1.iteri (fun i
v _ ->
- N
5.iteri (fun j k
l m n v2 b -> f i j k l m n v2 b) v
+ N
3.iteri (fun i j k
v _ ->
+ N
3.iteri (fun
l m n v2 b -> f i j k l m n v2 b) v
) a
) a
- let stats a =
- let d = a.N1.dummy in
- let len, used =
- Array.fold_left (fun ((alen,aused) as acc) i ->
- if i != d then
- let l, u = N5.stats i in
- (alen+l, aused+u)
- else
- acc) (0, 0) a.N1.line
- in
- len, used
-
+ let stats a = assert false
end
end