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 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 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
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