#ifndef _INTERSECTOR_H_ #define _INTERSECTOR_H_ #include #include #include #include #include "binary_search_merger.h" #include "linear_merger.h" using namespace std; typedef boost::hash > VectorHash; typedef unordered_map, vector, VectorHash> Index; class DataArray; class MatchingComparator; class Phrase; class PhraseLocation; class Precomputation; class SuffixArray; class Vocabulary; class Intersector { public: Intersector( shared_ptr vocabulary, shared_ptr precomputation, shared_ptr source_suffix_array, shared_ptr comparator, bool use_baeza_yates); // For testing. Intersector( shared_ptr vocabulary, shared_ptr precomputation, shared_ptr source_suffix_array, shared_ptr linear_merger, shared_ptr binary_search_merger, bool use_baeza_yates); virtual ~Intersector(); virtual PhraseLocation Intersect( const Phrase& prefix, PhraseLocation& prefix_location, const Phrase& suffix, PhraseLocation& suffix_location, const Phrase& phrase); protected: Intersector(); private: void ConvertIndexes(shared_ptr precomputation, shared_ptr data_array); vector ConvertPhrase(const vector& old_phrase, shared_ptr data_array); void ExtendPhraseLocation(const Phrase& phrase, PhraseLocation& phrase_location); shared_ptr vocabulary; shared_ptr suffix_array; shared_ptr linear_merger; shared_ptr binary_search_merger; Index inverted_index; Index collocations; bool use_baeza_yates; // TODO(pauldb): Don't forget to remove these. public: double sort_time; double linear_merge_time; double binary_merge_time; }; #endif