Added XMLTree::Closing XMLTree::IsOpen
[SXSI/XMLTree.git] / XMLTree.cpp
index dfda61a..51c495d 100644 (file)
@@ -259,12 +259,12 @@ XMLTree *XMLTree::Load(int fd)
 \r
     // TODO ask francisco about this\r
     /// FIXME:UGLY tests!\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
+    //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
-    XML_Tree->Tags->test(seq,XML_Tree->tags_len);\r
-    delete [] seq;\r
+    //XML_Tree->Tags->test(seq,XML_Tree->tags_len);\r
+    //delete [] seq;\r
     /// End ugly tests\r
     \r
     STOPTIMER(Loading);\r
@@ -440,8 +440,11 @@ treeNode XMLTree::FirstElement(treeNode x)
  {\r
    NULLT_IF(x==NULLT);\r
    treeNode fc = first_child(Par, x);\r
-   //<$> is 2\r
-   return ((fc == NULLT || Tag(fc) != PCDATA_TAG_ID) ? fc : next_sibling(Par,fc));\r
+   NULLT_IF(fc == NULLT);\r
+   TagType tag = Tag(fc);\r
+   if (tag != PCDATA_TAG_ID && tag != ATTRIBUTE_TAG_ID) \r
+     return fc;\r
+   else return next_sibling(Par,fc);\r
 \r
  }\r
 \r
@@ -449,7 +452,11 @@ treeNode XMLTree::NextElement(treeNode x)
 {\r
    NULLT_IF(x==NULLT);\r
    treeNode ns = next_sibling(Par, x);\r
-   return ((ns == NULLT || Tag(ns) != PCDATA_TAG_ID) ? ns : next_sibling(Par,ns));\r
+   NULLT_IF(ns == NULLT);\r
+   TagType tag = Tag(ns);\r
+   if (tag != PCDATA_TAG_ID && tag != ATTRIBUTE_TAG_ID) \r
+     return ns;\r
+   else return next_sibling(Par,ns);\r
 }\r
 \r
 // LastChild(x): returns the last child of node x.\r
@@ -761,3 +768,7 @@ TagType XMLTree::RegisterTag(unsigned char *tagname)
  }\r
 \r
 \r
+treeNode XMLTree::Closing(treeNode x) {\r
+  return find_close(Par,x); \r
+}\r
+bool XMLTree::IsOpen(treeNode x) { return inspect(Par,x); }\r