+ // Delete everything
+ delete dynFMI; dynFMI = 0;
+ delete alphabetrank; alphabetrank = 0;
+ delete sampled; sampled = 0;
+ delete [] suffixes; suffixes = 0;
+ delete [] positions; positions = 0;
+ delete [] codetable; codetable = 0;
+
+ endmarkers.clear();
+ textLength.clear();
+
+ this->samplerate = samplerate;
+ this->n = 0;
+
+ uchar versionFlag = 0;
+ if (std::fread(&versionFlag, 1, 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (version flag).");
+ if (versionFlag != 1)
+ throw std::runtime_error("CSA::Load(): invalid start byte.");
+
+ if (std::fread(&samplerate, sizeof(unsigned), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (samplerate).");
+ if (this->samplerate == 0)
+ this->samplerate = samplerate;
+
+ if (std::fread(&(this->n), sizeof(TextPosition), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (n).");
+
+ if (std::fread(&(this->bwtEndPos), sizeof(TextPosition), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (bwt end position).");
+
+ uchar *bwt = new uchar[n];
+ for (ulong offset = 0; offset < n; offset ++)
+ if (std::fread((bwt + offset), sizeof(uchar), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (bwt sequence).");
+
+ unsigned r = 0;
+ if (std::fread(&r, sizeof(unsigned), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (r).");
+
+ while (r > 0)
+ {
+ TextPosition length = 0, start = 0;
+ if (std::fread(&length, sizeof(TextPosition), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (text length).");
+ if (std::fread(&start, sizeof(TextPosition), 1, file) != 1)
+ throw std::runtime_error("CSA::Load(): file read error (text start).");
+
+ textLength.push_back(make_pair(length, start));
+ --r;
+ }
+
+ // Construct data structures
+ makewavelet(bwt);
+ delete [] bwt;
+ maketables();