Fix the printing some more
[SXSI/XMLTree.git] / XMLTree.h
index c2a0210..ea7b778 100644 (file)
--- a/XMLTree.h
+++ b/XMLTree.h
@@ -142,28 +142,43 @@ class XMLTree {
    \r
    FILE* stream;\r
    int   stream_fd; \r
-   string buffer;\r
+   string buffer;\r
    void myfputs(const char* s, FILE * fp){\r
-     buffer.append(s);\r
-     if (buffer.size() >= 1000000){\r
-       fputs(buffer.c_str(),fp);\r
-       buffer.clear();\r
+     buffer->append(s);\r
+     if (buffer->size() >= 100000){\r
+       fputs(buffer->c_str(),fp);\r
+       buffer->clear();\r
      };\r
 \r
    }\r
    void myfputc(const char c, FILE*fp){\r
-     buffer.append(1,c);\r
-     if (buffer.size() >= 1000000){\r
-       fputs(buffer.c_str(),fp);\r
-       buffer.clear();\r
+     buffer->append(1,c);\r
+     if (buffer->size() >= 100000){\r
+       fputs(buffer->c_str(),fp);\r
+       buffer->clear();\r
      };\r
    }\r
    void mybufferflush(FILE* fp){\r
-     fputs(buffer.c_str(), fp);\r
-     buffer.clear();\r
+     fputs(buffer->c_str(), fp);\r
+     buffer->clear();\r
    }\r
+\r
+   size_t myfprintf(const char* s, FILE * fp){\r
+     if (s == NULL)\r
+       return 0;\r
+     size_t i = buffer->size();\r
+     buffer->append(s);\r
+     size_t j = buffer->size();\r
+     if (buffer->size() >= 100000){\r
+       fputs(buffer->c_str(),fp);\r
+       buffer->clear();\r
+     };\r
+     return (j-i);\r
+   }\r
+\r
+   void PrintNode(treeNode n, int fd);\r
    /** Data structure constructors */\r
-   XMLTree(){;};\r
+   XMLTree(){ buffer = 0;};\r
 \r
    // non const pointer are freed by this method.\r
   XMLTree( pb * const par, uint npar,  vector<string> * const TN,  TagIdMap * const tim, uint *empty_texts_bmp, TagType *tags,\r
@@ -458,7 +473,7 @@ public:
    uchar* GetText(DocID d) {\r
      \r
        uchar * s = Text->GetText(d);\r
-       return (s[0] == 1 ? (uchar*)"" : s);\r
+       return (s[0] == 1 ? (s+1) : s);\r
    }\r
 \r
    /** GetText(i, j): returns the texts corresponding to documents with\r