-#include "basics.h"\r
+#include "common.h"\r
#include "XMLTreeBuilder.h"\r
#include "timings.h"\r
using std::string;\r
\r
XMLTreeBuilder::~XMLTreeBuilder(){\r
- \r
+ //free(par_aux);\r
+ free(tags_aux);\r
+ //delete other stuff.\r
+\r
}\r
\r
// OpenDocument(empty_texts): it starts the construction of the data structure for\r
// the XML document. Parameter empty_texts indicates whether we index empty texts\r
// in document or not. Returns a non-zero value upon success, NULLT in case of error.\r
-int XMLTreeBuilder::OpenDocument(bool empty_texts, \r
+int XMLTreeBuilder::OpenDocument(bool empty_texts,\r
int sample_rate_text,\r
bool dtc,\r
TextCollectionBuilder::index_type_t index_type)\r
disable_tc = dtc;\r
text_index_type = index_type;\r
STARTTIMER();\r
- \r
+\r
par_aux = (pb *)umalloc(sizeof(pb)*parArraySize);\r
- \r
+\r
tags_aux = (TagType *) umalloc(sizeof(TagType));\r
- \r
+\r
TagName = new vector<string>();\r
tIdMap = new std::unordered_map<string,int>();\r
\r
\r
if (disable_tc)\r
TextBuilder = 0;\r
- else \r
+ else\r
TextBuilder = TextCollectionBuilder::create((unsigned)sample_rate_text, index_type);\r
\r
Text = 0;\r
}\r
\r
// CloseDocument(): it finishes the construction of the data structure for the XML\r
-// document. Tree and tags are represented in the final form, dynamic data \r
-// structures are made static, and the flag "finished" is set to true. After that, \r
+// document. Tree and tags are represented in the final form, dynamic data\r
+// structures are made static, and the flag "finished" is set to true. After that,\r
// the data structure can be queried.\r
XMLTree *XMLTreeBuilder::CloseDocument()\r
- { \r
+ {\r
//closing parenthesis for the tree root\r
//par_aux = (pb *)urealloc(par_aux, sizeof(pb)*(1+npar/(8*sizeof(pb))));\r
//setbit(par_aux, npar, CP);\r
//npar++;\r
- \r
+\r
// makes the text collection static\r
STOPTIMER(Parsing);\r
PRINTTIME("Parsing XML Document", Parsing);\r
PRINTTIME("Building TextCollection", Building);\r
\r
}\r
- \r
+\r
XMLTree *T = new XMLTree(par_aux,\r
- npar, \r
+ npar,\r
TagName,\r
tIdMap,\r
- empty_texts_aux, // freed by the constructor\r
- tags_aux, //freed by the constructor\r
+ empty_texts_aux, // freed by the constructor\r
+ tags_aux, // freed by the constructor\r
Text,\r
disable_tc,\r
text_index_type);\r
- return T; \r
+ tags_aux = 0;\r
+ empty_texts_aux = 0;\r
+ return T;\r
}\r
\r
\r
int XMLTreeBuilder::NewOpenTag(string tagname)\r
{\r
int i;\r
- \r
+\r
// inserts a new opening parentheses in the bit sequence\r
if (sizeof(pb)*8*parArraySize == npar) { // no space left for the new parenthesis\r
par_aux = (pb *)urealloc(par_aux, sizeof(pb)*2*parArraySize);\r
parArraySize *= 2;\r
}\r
- \r
- setbit(par_aux,npar,OP); // marks a new opening parenthesis\r
- \r
+\r
+ bp_setbit(par_aux,npar,OP); // marks a new opening parenthesis\r
+\r
TagIdMapIT tag_id = tIdMap->find(tagname);\r
- \r
+\r
if (tag_id == tIdMap->end()){\r
REGISTER_TAG(TagName,tIdMap,tagname);\r
i = TagName->size() - 1;\r
if (tagname.compare(PCDATA_OPEN_TAG) == 0 ||\r
tagname.compare(ATTRIBUTE_DATA_OPEN_TAG) == 0){\r
};\r
- \r
+\r
tags_aux = (TagType *) urealloc(tags_aux, sizeof(TagType)*(npar + 1));\r
- \r
+\r
tags_aux[npar] = i; // inserts the new tag id within the preorder sequence of tags\r
- \r
+\r
npar++;\r
- \r
- return 1; // success \r
+\r
+ return 1; // success\r
}\r
\r
\r
int XMLTreeBuilder::NewClosingTag(string tagname)\r
{\r
int i;\r
- \r
+\r
// inserts a new closing parentheses in the bit sequence\r
if (sizeof(pb)*8*parArraySize == npar) { // no space left for the new parenthesis\r
par_aux = (pb *)urealloc(par_aux, sizeof(pb)*2*parArraySize);\r
parArraySize *= 2;\r
}\r
- \r
- setbit(par_aux,npar,CP); // marks a new closing parenthesis\r
- \r
+\r
+ bp_setbit(par_aux,npar,CP); // marks a new closing parenthesis\r
+\r
//tagname.insert(0,"/");\r
\r
- //TagIdMapIT tag_id = tIdMap->find(tagname); \r
+ //TagIdMapIT tag_id = tIdMap->find(tagname);\r
\r
// if (tag_id == tIdMap->end()){\r
// REGISTER_TAG(TagName,tIdMap,tagname);\r
tags_aux = (TagType *)urealloc(tags_aux, sizeof(TagType)*(npar + 1));\r
\r
tags_aux[npar] = CLOSING_TAG_ID; // inserts the new tag id within the preorder sequence of tags\r
- \r
+\r
npar++;\r
\r
return 1; // success\r
\r
int n_eta_size = sizeof(uint)*(1+(npar-1)/(8*sizeof(uint)));\r
//see basics.h, recalloc resizes and sets the new area to 0.\r
- \r
+\r
empty_texts_aux = (uint *)urecalloc(empty_texts_aux,eta_size,n_eta_size);\r
eta_size = n_eta_size;\r
bitset(empty_texts_aux, npar-1); // marks the non-empty text with a 1 in the bit vector\r