-void preorderTraverse(xml_tree * tree, xml_tree::tag_t parent_tag, xml_tree::node_t node, lex_index* lindex){
- if (tree->tag(node)==tree->PCDATA_OPEN_TAG_ID)
- if (parent_tag==lindex->tag) lindex->tagVectorIt =
- lindex->tagVector.insert(lindex->tagVectorIt, tree->text_id(node));
- else if (parent_tag==lindex->tag2) lindex->tag2VectorIt =
- lindex->tag2Vector.insert(lindex->tag2VectorIt, tree->text_id(node));
- if (tree->tag(tree->first_child(node))!=0) preorderTraverse(tree,tree->tag(node),tree->first_child(node),lindex);
- if (tree->tag(tree->next_sibling(node))!=0) preorderTraverse(tree,parent_tag,tree->next_sibling(node),lindex);
-}
-
-vector<int32_t> mergeJoin(xml_tree * tree, vector<int32_t> v1, vector<int32_t> v2){
- vector<int32_t> v;
- vector<int32_t>::iterator i=v.begin();
- vector<int32_t>::iterator i1=v1.begin();
- vector<int32_t>::iterator i2=v2.begin();
- int k;
-
- while((i1!=v1.end()) && (i2!=v2.end())){
- k = strcmp((const char*) tree->get_text(*i1),
- (const char*) tree->get_text(*i2));
- if (k==0)
- {
- i = v.insert( i, *i1 );
- //advance left
- i1++;
- //advance right
- i2++;
- }
- else if (k<0) i1++; //advance left
- else i2++; //advance right
- }
- return(v);
-}
-
-void printVector(const char * label, vector<int32_t> v){
- vector<int32_t>::iterator i=v.begin();
- if (i!=v.end()) {
- printf("%s-vector: [%i", label, *i);
- for (++i; i!=v.end(); ++i)
- printf(",%i", *i);
- printf("]\n");
- }
-}
-