projects
/
SXSI
/
xpathcomp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Split the Options module in two to remove a circular dependency in
[SXSI/xpathcomp.git]
/
src
/
nodeSet.ml
diff --git
a/src/nodeSet.ml
b/src/nodeSet.ml
index
0828029
..
fc0bb0e
100644
(file)
--- a/
src/nodeSet.ml
+++ b/
src/nodeSet.ml
@@
-24,7
+24,7
@@
module type S =
val iter : ( elt -> unit) -> t -> unit
val fold : ( elt -> 'a -> 'a) -> t -> 'a -> 'a
val length : t -> int
val iter : ( elt -> unit) -> t -> unit
val fold : ( elt -> 'a -> 'a) -> t -> 'a -> 'a
val length : t -> int
- val serialize : string -> Tree.t -> t -> unit
+ val serialize : string ->
bool ->
Tree.t -> t -> unit
end
end
@@
-52,7
+52,13
@@
module Count : S with type t = int =
let fold _ _ _ = failwith "fold not implemented"
let map _ _ = failwith "map not implemented"
let length x = x
let fold _ _ _ = failwith "fold not implemented"
let map _ _ = failwith "map not implemented"
let length x = x
- let serialize _ _ _ = ()
+ let serialize f b _ x =
+ let o = open_out f in
+ if not b then output_string o "<xml_result>\n";
+ output_string o (string_of_int x);
+ output_char o '\n';
+ if not b then output_string o "</xml_result>\n";
+ close_out o
end
type clist =
end
type clist =
@@
-117,13
+123,13
@@
module Mat : S with type t = Tree.node mat =
if Tree.tag tree t == tag then t
else Tree.tagged_descendant tree t tag
if Tree.tag tree t == tag then t
else Tree.tagged_descendant tree t tag
- let fst_element tree t =
+(*
+ let fst_element tree t =
let tag = Tree.tag tree t in
let tag = Tree.tag tree t in
- let t = if Ptset.Int.mem tag
- (Ptset.Int.remove Tag.document_node (Tree.element_tags tree))
- then t
- else Tree.first_element tree t
- in Tree.first_element tree t
+ if tag == Tag.document_node then
+ Tree.first_element tree t
+ else t
+*)
let element_fold f tree t acc =
let rec loop node acc =
let element_fold f tree t acc =
let rec loop node acc =
@@
-133,17
+139,11
@@
module Mat : S with type t = Tree.node mat =
let acc' = loop (Tree.first_element tree node) acc in
loop (Tree.next_element tree node) acc'
in
let acc' = loop (Tree.first_element tree node) acc in
loop (Tree.next_element tree node) acc'
in
-
loop (fst_element tree t)
acc
+
let t' = Tree.first_element tree t in loop t'
acc
let element_iter f tree t =
let element_iter f tree t =
- let rec loop node =
- if node != Tree.nil then begin
- f node;
- loop (Tree.first_element tree node);
- loop (Tree.next_element tree node)
- end
- in
- let t' = fst_element tree t in loop t'
+ let newf = fun e () -> f e in
+ element_fold newf tree t ()
let tag_fold f tree t tag acc =
let rec loop close node acc =
let tag_fold f tree t tag acc =
let rec loop close node acc =
@@
-192,19
+192,19
@@
module Mat : S with type t = Tree.node mat =
let length l = l.length
let length l = l.length
- let serialize name v l =
+ let serialize name
b
v l =
let fd, finish =
if name = "-" then Unix.stdout, ignore
else
Unix.openfile name [ Unix.O_WRONLY; Unix.O_TRUNC; Unix.O_CREAT ] 0o666,
Unix.close
in
let fd, finish =
if name = "-" then Unix.stdout, ignore
else
Unix.openfile name [ Unix.O_WRONLY; Unix.O_TRUNC; Unix.O_CREAT ] 0o666,
Unix.close
in
- ignore (Unix.write fd "<xml_result>\n" 0 13);
+ i
f not b then i
gnore (Unix.write fd "<xml_result>\n" 0 13);
if l.length > 0 then begin
iter (fun node -> Tree.print_xml v node fd) l;
Tree.flush v fd;
end;
if l.length > 0 then begin
iter (fun node -> Tree.print_xml v node fd) l;
Tree.flush v fd;
end;
- ignore (Unix.write fd "</xml_result>\n" 0 14);
+ i
f not b then i
gnore (Unix.write fd "</xml_result>\n" 0 14);
finish fd
end
finish fd
end