- 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
+
+
+ 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 = N4.stats i in
+ (alen+l, aused+u)
+ else
+ acc) (0, 0) a.N1.line
+ in
+ len, used
+
+end
+
+module N6 =
+struct
+ type 'a t = 'a N5.t N1.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 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
+ else
+ N5.add line j k 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 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
+
+ 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