#ifndef _PHRASE_LOCATION_H_ #define _PHRASE_LOCATION_H_ #include <memory> #include <vector> using namespace std; namespace extractor { /** * Structure containing information about the occurrences of a phrase in the * source data. * * Every consecutive (disjoint) group of num_subpatterns entries in matchings * vector encodes an occurrence of the phrase. The i-th entry of a group * represents the start of the i-th subpattern of the phrase. If the phrase * doesn't contain any nonterminals, then it may also be represented as the * range in the suffix array which matches the phrase. */ struct PhraseLocation { PhraseLocation(int sa_low = -1, int sa_high = -1); PhraseLocation(const vector<int>& matchings, int num_subpatterns); // Checks if a phrase has any occurrences in the source data. bool IsEmpty() const; // Returns the number of occurrences of a phrase in the source data. int GetSize() const; friend bool operator==(const PhraseLocation& a, const PhraseLocation& b); int sa_low, sa_high; shared_ptr<vector<int>> matchings; int num_subpatterns; }; } // namespace extractor #endif