Small bug fix
[SXSI/XMLTree.git] / XMLTree.cpp
index 70cf4b7..249143c 100644 (file)
@@ -212,11 +212,11 @@ XMLTree *XMLTree::Load(unsigned char *filename, int sample_rate_text)
     s_tree+= XML_Tree->Tags->size();\r
 \r
                /// FIXME:UGLY tests!\r
-               /*uint * seq = new uint[XML_Tree->tags_len];\r
+               uint * seq = new uint[XML_Tree->tags_len];\r
                for(uint i=0;i<XML_Tree->tags_len;i++)\r
                        seq[i] = get_field(XML_Tree->tags_fix,XML_Tree->tags_blen,i);\r
                cout << "Tags test: " << XML_Tree->Tags->test(seq,XML_Tree->tags_len) << endl;\r
-               delete [] seq;*/\r
+               delete [] seq;\r
                /// End ugly tests\r
 \r
     s_text = ftell(fp);\r
@@ -357,7 +357,9 @@ bool XMLTree::IsChild(treeNode x, treeNode y)
     if (!is_ancestor(Par, x, y)) return false;\r
     return depth(Par, x) == (depth(Par, y) + 1);\r
  }\r
-\r
+bool XMLTree::IsFirstChild(treeNode x){\r
+  return ((x != NULLT)&&(x==Root() || prev_sibling(Par,x) == NULLT));\r
+}\r
 // NumChildren(x): number of children of node x. Constant time with the data structure\r
 // of Sadakane.\r
 int XMLTree::NumChildren(treeNode x) \r
@@ -499,6 +501,14 @@ treeNode XMLTree::FirstChild(treeNode x)
     return first_child(Par, x);\r
  }\r
 \r
+treeNode XMLTree::LastChild(treeNode x) \r
+{\r
+  if (x == Root() || isleaf(Par,x) || x == NULLT)\r
+    return x;\r
+  else\r
+  return find_open(Par,find_close(Par,parent(Par,x))-1);\r
+}\r
+\r
 // NextSibling(x): returns the next sibling of node x, assuming it exists.\r
 treeNode XMLTree::NextSibling(treeNode x) \r
  {\r
@@ -1079,7 +1089,7 @@ int XMLTree::CloseDocument()
     // makes the text collection static\r
     if (!disable_tc)\r
     {\r
-        assert(Text = 0);\r
+        assert(Text == 0);\r
         assert(TextBuilder != 0);\r
         Text = TextBuilder->InitTextCollection();\r
         delete TextBuilder;\r