projects
/
tatoo.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Write the caching module in a more systematic way.
[tatoo.git]
/
src
/
utils
/
cache.ml
diff --git
a/src/utils/cache.ml
b/src/utils/cache.ml
index
7ba67d5
..
abd999e
100644
(file)
--- a/
src/utils/cache.ml
+++ b/
src/utils/cache.ml
@@
-14,13
+14,13
@@
(***********************************************************************)
(*
(***********************************************************************)
(*
- Time-stamp: <Last modified on 2013-03-1
3 18:17:13
CET by Kim Nguyen>
+ Time-stamp: <Last modified on 2013-03-1
4 14:50:18
CET by Kim Nguyen>
*)
let realloc l old_size new_size dummy =
let l' = Array.create new_size dummy in
for i = 0 to (min old_size new_size) - 1 do
*)
let realloc l old_size new_size dummy =
let l' = Array.create new_size dummy in
for i = 0 to (min old_size new_size) - 1 do
-
l'.(i) <- l.(
i);
+
Array.unsafe_set l' i (Array.unsafe_get l
i);
done;
l'
done;
l'
@@
-30,7
+30,7
@@
struct
dummy : 'a;
mutable offset : int;
}
dummy : 'a;
mutable offset : int;
}
- let create
_
a = {
+ let create a = {
line = Array.create 0 a;
dummy = a;
offset = ~-1;
line = Array.create 0 a;
dummy = a;
offset = ~-1;
@@
-75,9
+75,10
@@
struct
end
let find a i =
end
let find a i =
- let
offset =
a.offset in
+ let
idx = i -
a.offset in
let len = Array.length a.line in
let len = Array.length a.line in
- if i >= offset && i < offset + len then a.line.(i - offset)
+ if idx >= 0 && idx < len then
+ Array.unsafe_get a.line idx
else a.dummy
let dummy a = a.dummy
else a.dummy
let dummy a = a.dummy
@@
-93,23
+94,17
@@
struct
end
end
-
-
module N2 =
struct
type 'a t = 'a N1.t N1.t
module N2 =
struct
type 'a t = 'a N1.t N1.t
- let create n a =
- let dummy1 = N1.create 512 a in
- { N1.line = Array.create n dummy1;
- N1.offset = ~-1;
- N1.dummy = dummy1;
- }
-
+ let create a =
+ let dummy1 = N1.create a in
+ N1.create dummy1
let add a i j v =
let line = N1.find a i in
if line == a.N1.dummy then
let add a i j v =
let line = N1.find a i in
if line == a.N1.dummy then
- let nline = N1.create
0
line.N1.dummy in
+ let nline = N1.create line.N1.dummy in
N1.add a i nline;
N1.add nline j v
else
N1.add a i nline;
N1.add nline j v
else
@@
-118,7
+113,7
@@
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
a.N1.dummy
.N1.dummy
+ if v == a.N1.dummy then
v
.N1.dummy
else N1.find v j
else N1.find v j
@@
-138,17
+133,14
@@
module N3 =
struct
type 'a t = 'a N2.t N1.t
struct
type 'a t = 'a N2.t N1.t
- let create n a =
- let dummy1 = N2.create 512 a in
- { N1.line = Array.create n dummy1;
- N1.offset = ~-1;
- N1.dummy = dummy1;
- }
+ let create a =
+ let dummy2 = N2.create a in
+ N1.create dummy2
let add a i j k v =
let line = N1.find a i in
if line == a.N1.dummy then
let add a i j k v =
let line = N1.find a i in
if line == a.N1.dummy then
- let nline = N1.create
0
line.N1.dummy in
+ let nline = N1.create line.N1.dummy in
N1.add a i nline;
N2.add nline j k v
else
N1.add a i nline;
N2.add nline j k v
else
@@
-156,7
+148,7
@@
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
a.N1.dummy
+ if v == a.N1.dummy then N2.dummy
v
else N2.find v j k
else N2.find v j k
@@
-174,17
+166,14
@@
module N4 =
struct
type 'a t = 'a N3.t N1.t
struct
type 'a t = 'a N3.t N1.t
- let create n a =
- let dummy1 = N3.create 512 a in
- { N1.line = Array.create n dummy1;
- N1.offset = ~-1;
- N1.dummy = dummy1;
- }
+ let create a =
+ let dummy3 = N3.create a in
+ N1.create dummy3
let add a i j k l v =
let line = N1.find a i in
let add a i j k l v =
let line = N1.find a i in
- if line ==
a.N1.dummy
then
- let nline = N
1.create 0 line.N1.dummy
in
+ if line ==
N1.dummy a
then
+ let nline = N
3.create (N3.dummy line)
in
N1.add a i nline;
N3.add nline j k l v
else
N1.add a i nline;
N3.add nline j k l v
else
@@
-192,17
+181,14
@@
struct
let find a i j k l =
let v = N1.find a i in
let find a i j k l =
let v = N1.find a i in
- if v ==
a.N1.dummy then N3.dummy a.N1.dummy
+ if v ==
(N1.dummy a) then N3.dummy v
else N3.find v j k l
else N3.find v j k l
- let dummy a = N3.dummy
a.N1.dummy
+ let dummy a = N3.dummy
(N1.dummy a)
let iteri f a =
let iteri f a =
- let line = a.N1.line in
- if a.N1.offset == ~-1 then () else
- for i = 0 to Array.length line - 1 do
- N3.iteri (f i) line.(i)
- done
+ N1.iteri (fun i v _ ->
+ N3.iteri (fun j k l v2 b -> f i j k l v2 b) v ) a
end
end
@@
-210,17
+196,14
@@
module N5 =
struct
type 'a t = 'a N4.t N1.t
struct
type 'a t = 'a N4.t N1.t
- let create n a =
- let dummy1 = N4.create 512 a in
- { N1.line = Array.create n dummy1;
- N1.offset = ~-1;
- N1.dummy = dummy1;
- }
+ let create a =
+ let dummy4 = N4.create a in
+ N1.create dummy4
let add a i j k l m v =
let line = N1.find a i in
let add a i j k l m v =
let line = N1.find a i in
- if line ==
a.N1.dummy
then
- let nline = N
1.create 0 line.N1.dummy
in
+ if line ==
(N1.dummy a)
then
+ let nline = N
4.create (N4.dummy line)
in
N1.add a i nline;
N4.add nline j k l m v
else
N1.add a i nline;
N4.add nline j k l m v
else
@@
-228,43
+211,43
@@
struct
let find a i j k l m =
let v = N1.find a i in
let find a i j k l m =
let v = N1.find a i in
- if v ==
a.N1.dummy then N4.dummy a.N1.dummy
+ if v ==
(N1.dummy a) then N4.dummy v
else N4.find v j k l m
else N4.find v j k l m
- let dummy a = N4.dummy
a.N1.dummy
+ let dummy a = N4.dummy
(N1.dummy a)
let iteri f a =
let iteri f a =
- let line = a.N1.line in
- if a.N1.offset == ~-1 then () else
- for i = 0 to Array.length line - 1 do
- N4.iteri (f i) line.(i)
- done
-
+ N1.iteri (fun i v _ ->
+ N4.iteri (fun j k l m v2 b -> f i j k l m v2 b) v
+ ) a
end
module N6 =
struct
end
module N6 =
struct
- type 'a t = 'a N
3.t N3
.t
+ type 'a t = 'a N
5.t N1
.t
- let create
_n
a =
-
let dummy1 = N3.create 512
a in
- N3.create 512 dummy1
+ let create a =
+
let dummy5 = N5.create
a in
+ N1.create dummy5
let add a i j k l m n v =
let add a i 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 0 (N3
.dummy line) in
- N
3.add a i j k
nline;
- N
3.add nline
l m n v
+ let line = N
1.find a i
in
+ if line == N
1
.dummy a then
+ let nline = N
5.create (N5
.dummy line) in
+ N
1.add a i
nline;
+ N
5.add nline j k
l m n v
else
else
- N
3.add line
l m n v
+ N
5.add line j k
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
3.find a i j k
in
- if v == N
3.dummy a then N3.dummy (N3.dummy a)
- else N
3.find v
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 dummy a = N3.dummy (N3.dummy a)
- let iteri _f _a = assert false
+ let dummy a = N5.dummy (N1.dummy a)
+ let iteri f a =
+ N1.iteri (fun i v _ ->
+ N5.iteri (fun j k l m n v2 b -> f i j k l m n v2 b) v
+ ) a
end
end