+ // Delete everything
+ delete dynFMI; dynFMI = 0;
+ delete alphabetrank; alphabetrank = 0;
+ delete sampled; sampled = 0;
+ delete suffixes; suffixes = 0;
+ delete suffixDocId; suffixDocId = 0;
+ delete positions; positions = 0;
+ delete [] codetable; codetable = 0;
+
+ delete endmarkerDocId; endmarkerDocId = 0;
+ delete emptyTextRank; emptyTextRank = 0;
+ // FIXME Remove following:
+ delete textLength; textLength = 0;
+ delete textStartPos; textStartPos = 0;
+
+ this->maxTextLength = 0;
+ this->numberOfTexts = 0;
+ this->numberOfAllTexts = 0;
+ this->samplerate = samplerate;
+ this->n = 0;
+
+ uchar verFlag = 0;
+ if (std::fread(&verFlag, 1, 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (version flag).");
+ if (verFlag != CSA::versionFlag)
+ throw std::runtime_error("CSA::Load(): invalid save file version.");
+
+ if (std::fread(&(this->n), sizeof(TextPosition), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (n).");
+ if (std::fread(&samplerate, sizeof(unsigned), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (samplerate).");
+// FIXME samplerate can not be changed during load.
+// if (this->samplerate == 0)
+// this->samplerate = samplerate;
+
+ for(ulong i = 0; i < 256; ++i)
+ if (std::fread(this->C + i, sizeof(unsigned), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (C table).");
+
+ if (std::fread(&(this->bwtEndPos), sizeof(TextPosition), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (bwt end position).");
+
+ alphabetrank = static_sequence::load(file);
+ sampled = new BSGAP(file);
+ suffixes = new BlockArray(file);
+ suffixDocId = new BlockArray(file);
+
+ if (std::fread(&(this->numberOfTexts), sizeof(unsigned), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (numberOfTexts).");
+ if (std::fread(&(this->numberOfAllTexts), sizeof(unsigned), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (numberOfAllTexts).");
+ if (std::fread(&(this->maxTextLength), sizeof(ulong), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (maxTextLength).");
+
+ endmarkerDocId = new BlockArray(file);
+ emptyTextRank = new BSGAP(file);
+
+ // FIXME Construct data structures with new samplerate
+ //maketables(); // FIXME: this will redo text length tables