X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fcache.ml;fp=src%2Fcache.ml;h=d0f7ac5841ed3e3e8ddcbee4f3c8b458e2a9e10c;hp=9ffb332b542f31b52243aee245b711709f8ce93c;hb=fee64144491afab22d71f6e2de72a9f18f35cd55;hpb=129708eaa5983b9463f96b714c00468602339b0a diff --git a/src/cache.ml b/src/cache.ml index 9ffb332..d0f7ac5 100644 --- a/src/cache.ml +++ b/src/cache.ml @@ -61,10 +61,12 @@ struct 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 @@ -106,8 +108,8 @@ struct 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 @@ -155,8 +157,8 @@ struct 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 @@ -275,45 +277,32 @@ end module N6 = struct - type 'a t = 'a N5.t N1.t + type 'a t = 'a N3.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 line = N1.find a i in - if line == N1.dummy a then - let nline = N5.create_with_level (a.N1.level+1) (N5.dummy line) in - N1.add a i nline; - N5.add nline j k l m n v + let line = N3.find a i j k in + if line == N3.dummy a then + let nline = N3.create (N3.dummy line) in + N3.add a i j k nline; + N3.add nline l m n v else - N5.add line j k l m n v + N3.add line l m n v let find a i j k l m n = - let v = N1.find a i in - if v == N1.dummy a then N5.dummy v - else N5.find v j k l m n + let v = N3.find a i j k in + if v == N3.dummy a then N3.dummy v + else N3.find v l m n - let dummy a = N5.dummy (N1.dummy a) + let dummy a = N3.dummy (N3.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 + N3.iteri (fun i j k v _ -> + N3.iteri (fun l m n v2 b -> f i j k l m n v2 b) v ) 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