+\r
+\r
+\r
+XMLTree::XMLTree( pb * const par, uint npar, vector<string> * const TN, TagIdMap * const tim,\r
+ uint *empty_texts_bmp, TagType *tags,\r
+ TextCollection * const TC, bool dis_tc,\r
+ TextCollectionBuilder::index_type_t _index_type )\r
+ {\r
+ buffer = 0;\r
+ print_stack = 0;\r
+ // creates the data structure for the tree topology\r
+ Par = (bp *)umalloc(sizeof(bp));\r
+ STARTTIMER();\r
+ bp_construct(Par, npar, (pb*) par, OPT_DEGREE|0);\r
+ STOPTIMER(Building);\r
+ PRINTTIME("Building parenthesis struct", Building);\r
+ STARTTIMER();\r
+\r
+\r
+ // creates structure for tags\r
+\r
+ TagName = (vector<string>*)TN;\r
+ tIdMap = (TagIdMap *) tim;\r
+\r
+ uint max_tag = TN->size() - 1;\r
+\r
+\r
+ static_bitsequence_builder *bmb = new static_bitsequence_builder_sdarray();\r
+ alphabet_mapper *am = new alphabet_mapper_none();\r
+ Tags = new static_sequence_bs((uint*)tags,npar,am,bmb);\r
+\r
+ //cout << "Tags test: " << Tags->test((uint*)tags,npar) << endl;\r
+\r
+ //Ensures that for small tag numbers, we are on an 8bit boundary.\r
+ //Makes tag access way faster with negligeable waste of space.\r
+ tags_blen = bits8(max_tag);\r
+ std::cerr << "Tags blen is " << tags_blen << "\n";\r
+ tags_len = (uint)npar;\r
+ tags_fix = new uint[uint_len(tags_blen,tags_len)];\r
+ for(uint i=0;i<(uint)npar;i++)\r
+ set_field(tags_fix,tags_blen,i,tags[i]);\r
+ delete bmb;\r
+ free(tags);\r
+ tags = NULL;\r
+\r
+ STOPTIMER(Building);\r
+ PRINTTIME("Building Tag Structure", Building);\r
+\r
+ Text = (TextCollection*) TC;\r
+\r
+\r
+ EBVector = new static_bitsequence_rrr02(empty_texts_bmp,npar,32);\r
+ //EBVector = new static_bitsequence_sdarray(empty_texts_bmp,npar);\r
+ free(empty_texts_bmp);\r
+ empty_texts_bmp = NULL;\r
+\r
+\r
+ disable_tc = dis_tc;\r
+ text_index_type = _index_type;\r
+ std::cerr << "Number of distinct tags " << TagName->size() << "\n";\r
+ //std::cerr.flush();\r
+ }\r
+\r
+\r
+// ~XMLTree: frees memory of XML tree.\r
+XMLTree::~XMLTree()\r
+ {\r
+ int i;\r
+\r
+ destroyTree(Par);\r
+ free(Par); // frees the memory of struct Par\r
+\r
+ delete tIdMap;\r
+ tIdMap = NULL;\r
+\r
+ delete TagName;\r
+ TagName = NULL;\r
+\r
+ delete Tags;\r
+ Tags = NULL;\r
+\r
+ delete Text;\r
+ Text = NULL;\r
+\r
+ delete EBVector;\r
+ EBVector = NULL;\r
+\r
+ }\r
+\r
+\r
+void XMLTree::print_stats()\r