From 39ee9d4c866fd5e4ba478ef65dc7e714e80c0b91 Mon Sep 17 00:00:00 2001 From: kim Date: Mon, 16 Feb 2009 01:05:14 +0000 Subject: [PATCH] Added caching of TextCollection git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/XMLTree@180 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- XMLTree.cpp | 30 ++++++++++++++++++++++++++++-- XMLTree.h | 6 ++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/XMLTree.cpp b/XMLTree.cpp index 4ddec01..cdfe952 100644 --- a/XMLTree.cpp +++ b/XMLTree.cpp @@ -105,7 +105,15 @@ void XMLTree::Save(unsigned char *filename) // stores the texts if (!disable_tc) Text->Save(fp); - + if (!disable_tc){ + int st = CachedText.size(); + ufwrite(&st, sizeof(int),1,fp); + for (int i = 0; i< CachedText.size(); ++i){ + st = CachedText.at(i).size(); + ufwrite(&st, sizeof(int),1,fp); + ufwrite(CachedText.at(i).c_str(),sizeof(char),(1+strlen(CachedText.at(i).c_str())),fp); + }; + }; fclose(fp); } @@ -192,11 +200,27 @@ XMLTree *XMLTree::Load(unsigned char *filename, int sample_rate_text) if (!XML_Tree->disable_tc){ XML_Tree->Text = TextCollection::InitTextCollection(sample_rate_text); XML_Tree->Text->Load(fp,sample_rate_text); + int sst; + int st; + ufread(&sst, sizeof(int),1,fp); + for (int i=0;iCachedText.push_back(cppstr); + free(str); + }; + } else XML_Tree->Text = NULL; s_text = ftell(fp) - s_text; + + + + fclose(fp); std::cerr << "Tree part is " << s_tree/1024 << " Kbytes,\n" @@ -842,7 +866,7 @@ int XMLTree::NewOpenTag(unsigned char *tagname) tags_aux[npar] = i; // inserts the new tag id within the preorder sequence of tags npar++; - + return 1; } @@ -915,6 +939,8 @@ int XMLTree::NewText(unsigned char *s) } Text->InsertText(s); + string cpps = (char*) s; + CachedText.push_back(cpps); return 1; // success } diff --git a/XMLTree.h b/XMLTree.h index a00487a..67ffd6e 100644 --- a/XMLTree.h +++ b/XMLTree.h @@ -87,6 +87,8 @@ class XMLTree { /** The texts in the XML document */ TextCollection *Text; + /** The texts in the XML document (cached for faster display) */ + vector CachedText; /** Flag indicating whether the whole data structure has been constructed or * not. If the value is true, you cannot add more texts, nodes, etc. */ @@ -390,6 +392,10 @@ public: uchar* GetText(DocID d) { return Text->GetText(d); } + + uchar* GetCachedText(DocID d) { + return (uchar*) (CachedText.at(d).c_str()); + } TextCollection *getTextCollection() { return Text; -- 2.17.1