#ifndef _SUFFIX_ARRAY_H_ #define _SUFFIX_ARRAY_H_ #include #include #include #include namespace fs = boost::filesystem; using namespace std; namespace extractor { class DataArray; class PhraseLocation; class SuffixArray { public: SuffixArray(shared_ptr data_array); virtual ~SuffixArray(); virtual int GetSize() const; virtual shared_ptr GetData() const; virtual vector BuildLCPArray() const; virtual int GetSuffix(int rank) const; virtual PhraseLocation Lookup(int low, int high, const string& word, int offset) const; void WriteBinary(const fs::path& filepath) const; protected: SuffixArray(); private: void BuildSuffixArray(); void InitialBucketSort(vector& groups); void TernaryQuicksort(int left, int right, int step, vector& groups); void PrefixDoublingSort(vector& groups); int LookupRangeStart(int low, int high, int word_id, int offset) const; shared_ptr data_array; vector suffix_array; vector word_start; }; } // namespace extractor #endif