X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fcompact_tree.ml;h=b716cd716ee0763d8d811d0000b4ed7e8297b536;hp=485f5ff7423b9122ae12043050d2985fb67dc428;hb=00697c62348a2aabe650ada4605c0589feda5bae;hpb=9aac68104b40c05f6dcd65cdd18316400ce26652 diff --git a/src/compact_tree.ml b/src/compact_tree.ml index 485f5ff..b716cd7 100644 --- a/src/compact_tree.ml +++ b/src/compact_tree.ml @@ -24,7 +24,7 @@ open Bigarray type table = int array type t = { table : table; - kind : Bytes.t; + summary : Bytes.t; tags : QName.t array; data : string array; } @@ -56,9 +56,11 @@ let parent t n = let tag t n = Array.unsafe_get t.tags (idx n) +let summary t n = + Obj.magic (String.unsafe_get t.summary (idx n)) let kind t n : Tree.NodeKind.t = - Obj.magic (String.unsafe_get t.kind (idx n)) + Tree.NodeSummary.kind (summary t n) let preorder t n = (idx n) - 2 @@ -129,11 +131,11 @@ let print_xml out tree node = print_xml (next_sibling tree node) out tree node -let mk_node table_a data_a kind_a tags_a i kind tag data pre_fc pre_ns pre_p = +let mk_node table_a data_a kind_a tags_a i summary tag data pre_fc pre_ns pre_p = try data_a.(i+2) <- data; tags_a.(i+2) <- tag; - Bytes.unsafe_set kind_a (i+2) (Obj.magic kind); + Bytes.unsafe_set kind_a (i+2) (Char.chr (summary land 0xff)); let n = (i+2) * 3 in let fc = (pre_fc + 2) * 3 in let ns = (pre_ns + 2) * 3 in @@ -150,19 +152,20 @@ let of_naive t = let table = Array.make len ~-1 (* int16_unsigned c_layout len *) in let data = Array.make (s + 2) "" in let tags = Array.make (s+2) dummy_tag in - let kind = Bytes.make (s+2) '\000' in - mk_node table data kind tags ~-2 Tree.NodeKind.Element dummy_tag "" dummy dummy dummy; - mk_node table data kind tags ~-1 Tree.NodeKind.Element QName.nil "" nil nil nil; + let summaries = Bytes.make (s+2) '\000' in + mk_node table data summaries tags ~-2 Tree.NodeSummary.dummy dummy_tag "" dummy dummy dummy; + mk_node table data summaries tags ~-1 Tree.NodeSummary.dummy QName.nil "" nil nil nil; for i = 0 to s - 1 do let node = Naive_tree.by_preorder t i in - mk_node table data kind tags i (Naive_tree.kind t node) + mk_node table data summaries tags i + (Naive_tree.summary t node) (Naive_tree.tag t node) (Naive_tree.data t node) (Naive_tree.preorder t (Naive_tree.first_child t node)) (Naive_tree.preorder t (Naive_tree.next_sibling t node)) (Naive_tree.preorder t (Naive_tree.parent t node)) done; - { data; table; tags ; kind } + { data; table; tags ; summary = summaries } let load_xml_string s = of_naive (Naive_tree.load_xml_string s) let load_xml_file f = of_naive (Naive_tree.load_xml_file f)