X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=TCImplementation.cpp;h=1a29f2524eccf74a394c02aed5b62bf4c54bb252;hb=443151511a86083b21c1c06eb610f86b3aed35be;hp=130b1a2a2c74508dbff30dff32065bae22cb66a6;hpb=9042e7b1b181a50b15e8ec1b79d5a5c2f913bfff;p=SXSI%2FTextCollection.git diff --git a/TCImplementation.cpp b/TCImplementation.cpp index 130b1a2..1a29f25 100644 --- a/TCImplementation.cpp +++ b/TCImplementation.cpp @@ -767,14 +767,16 @@ void TCImplementation::Save(FILE *file) const * * Throws a std::runtime_error exception on i/o error. * For more info, see TCImplementation::Save(). + * + * index_mode_t is defined in TextCollection.h and + * defaults to both the index and "naive" text. + * + * Note: Samplerate can not be changed during load. */ -TCImplementation::TCImplementation(FILE *file, unsigned samplerate_) +TCImplementation::TCImplementation(FILE *file, index_mode_t im, unsigned samplerate_) : n(0), samplerate(samplerate_), alphabetrank(0), sampled(0), suffixes(0), suffixDocId(0), numberOfTexts(0), maxTextLength(0), Doc(0) { -// Tools::StartTimer(); -// std::cout << std::endl << "Loading..."<< std::endl; - uchar verFlag = 0; if (std::fread(&verFlag, 1, 1, file) != 1) throw std::runtime_error("TCImplementation::Load(): file read error (version flag)."); @@ -796,24 +798,25 @@ TCImplementation::TCImplementation(FILE *file, unsigned samplerate_) if (std::fread(&(this->bwtEndPos), sizeof(TextPosition), 1, file) != 1) throw std::runtime_error("TCImplementation::Load(): file read error (bwt end position)."); -// std::cout << "Loading alphabet rank (" << Tools::GetTime() << " s)." << std::endl; alphabetrank = static_sequence::load(file); -// std::cout << "Loading samples (" << Tools::GetTime() << " s)." << std::endl; + if (im == index_mode_text_only) { delete alphabetrank; alphabetrank = 0; } + sampled = static_bitsequence::load(file); + if (im == index_mode_text_only) { delete sampled; sampled = 0; } suffixes = new BlockArray(file); + if (im == index_mode_text_only) { delete suffixes; suffixes = 0; } suffixDocId = new BlockArray(file); + if (im == index_mode_text_only) { delete suffixDocId; suffixDocId = 0; } if (std::fread(&(this->numberOfTexts), sizeof(unsigned), 1, file) != 1) throw std::runtime_error("TCImplementation::Load(): file read error (numberOfTexts)."); if (std::fread(&(this->maxTextLength), sizeof(ulong), 1, file) != 1) throw std::runtime_error("TCImplementation::Load(): file read error (maxTextLength)."); -// std::cout << "Loading Doc (" << Tools::GetTime() << " s)." << std::endl; Doc = new ArrayDoc(file); //static_sequence::load(file); -// std::cout << "Loading text storage (" << Tools::GetTime() << " s)." << std::endl; - textStorage = TextStorage::Load(file); + if (im == index_mode_text_only) { delete Doc; Doc = 0; } -// std::cout << "Loading done(" << Tools::GetTime() << " s)." << std::endl; + textStorage = TextStorage::Load(file); // FIXME Construct data structures with new samplerate //maketables();