Add RegisterTag method
[SXSI/XMLTree.git] / XMLTree.cpp
index 92360a4..22ba4bb 100644 (file)
@@ -311,8 +311,10 @@ treeNode XMLTree::Parent(treeNode x)
        fprintf(stderr, "Error: data structure has not been constructed properly\n");\r
        exit(1);\r
     }\r
-\r
-    return parent(Par, x);\r
+    if (x == Root())\r
+      return NULLT;\r
+    else\r
+      return parent(Par, x);\r
  }\r
 \r
 // Child(x,i): returns the i-th child of node x, assuming it exists.\r
@@ -345,7 +347,9 @@ treeNode XMLTree::NextSibling(treeNode x)
        fprintf(stderr, "Error: data structure has not been constructed properly\n");\r
        exit(1);\r
     }\r
-\r
+    if (x == Root())\r
+      return NULLT;\r
\r
     return next_sibling(Par, x);\r
  }\r
 \r
@@ -842,4 +846,19 @@ unsigned char *XMLTree::GetTagName(TagType tagid)
  }\r
 \r
 \r
-\r
+TagType XMLTree::RegisterTag(unsigned char *tagname)\r
+{\r
+  if (!finished)\r
+    return NULLT;\r
+  \r
+\r
+  TagType id = XMLTree::GetTagId(tagname);\r
+  if (id == NULLT){\r
+    id = ntagnames;\r
+    ntagnames = ntagnames + 1;    \r
+    TagName = (unsigned char **) realloc(TagName,ntagnames*(sizeof(unsigned char*)));\r
+    strcpy((char*)TagName[id], (const char *)tagname);  \r
+  };\r
+\r
+  return id;\r
+}\r