X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fxml-tree_stub.cpp;h=1d52a9dfcd6385e1d6e5df14a1545875a0e1630b;hb=7e27afe6fa006ad355237ccc0695c6493ea57929;hp=47b6c639d2d77f1b6c7553f602bf8ac447836114;hpb=2cb4fceda48a09fc1acd65c54372651b14e0f404;p=SXSI%2Fxpathcomp.git diff --git a/src/xml-tree_stub.cpp b/src/xml-tree_stub.cpp index 47b6c63..1d52a9d 100644 --- a/src/xml-tree_stub.cpp +++ b/src/xml-tree_stub.cpp @@ -77,7 +77,8 @@ caml_xml_tree_subtree_tags(value tree, value node, value tag) TAG(tag)))); } -NoAlloc extern "C" value caml_xml_tree_subtree_elements(value tree, value node) +NoAlloc extern "C" value caml_xml_tree_subtree_elements(value tree, + value node) { return (Val_int(XMLTREE(tree)->subtree_elements(TREENODE(node)))); } @@ -305,7 +306,13 @@ extern "C" value caml_xml_tree_register_tag(value tree, value str) /** Full reporting into a bit vector */ -static std::vector sort_results(std::vector v) +static void pr_vector(std::vector v) +{ + for(auto i = v.begin(); i!= v.end(); ++i) + fprintf(stderr, "%i ", *i); + fprintf(stderr, "\n"); +} +static std::vector sort_results(std::vector v, xml_tree *t) { std::vector res; std::sort(v.begin(), v.end()); @@ -316,19 +323,19 @@ static std::vector sort_results(std::vector v) if (i == v.end()) return res; }; prev = *i; - res.push_back(prev); + res.push_back(t->parent_node(prev)); }; return res; } #define BV_QUERY(pref, Pref) \ extern "C" value caml_text_collection_## pref ##_bv(value tree, value str, value dobvv){ \ - CAMLparam3(tree, str, dobvv); \ + CAMLparam3(tree, str, dobvv); \ CAMLlocal3(res, res_bv, res_array); \ int j; \ uchar * cstr = (uchar *) strdup(String_val(str)); \ std::vector uresults = XMLTREE(tree)->Pref(cstr); \ - std::vector results = sort_results(uresults); \ + std::vector results = sort_results(uresults, XMLTREE(tree)); \ bool dobv = Bool_val(dobvv); \ res_bv = caml_alloc_string(dobv ? ((XMLTREE(tree)->size() / 4) + 2) : 0); \ unsigned long slen = caml_string_length(res_bv); \ @@ -336,12 +343,13 @@ static std::vector sort_results(std::vector v) memset(&(Byte(res_bv,0)), 0, slen); \ res_array = caml_alloc_shr(results.size(), 0); \ for (unsigned int i = 0; i < results.size(); ++i) { \ - j = XMLTREE(tree)->parent_node(results[i]); \ + j = results[i]; \ if (dobv) { \ Byte(res_bv, j >> 3) |= (1 << (j & 7)); \ }; \ caml_initialize(&Field(res_array, i), Val_int(j)); \ }; \ + fprintf(stderr, "Raw results: %lu, Sorted reulsts %lu\n", uresults.size(), results.size()); \ free(cstr); \ res = caml_alloc(2, 0); \ Store_field(res, 0, res_bv); \