// // Created by Jake Close on 3/13/18. // #pragma once #include "ISR.h" #include <vector> // Find occurrences of any child ISR. using namespace std; class ISROr : public ISR { public: vector<ISR*>Terms; unsigned NumberOfTerms; Location GetCurrentLocation(); Location GetStartLocation ( ); Location GetEndLocation ( ); Location Seek ( Location target ); //ISR *GetCurrentEndDoc ( ); Location First ( ) ; Location Next ( ); //{ Do a next on the nearest term, then return// the new nearest match.} //next on nearest term, return nearest temr Location NextDocument ( ); // // { Seek all the ISRs to the first occurrence just past the end of this document.returnSeek( DocumentEnd->GetEndLocation( ) + 1 );} ISROr ( vector<ISR * > InputTerms ) : Terms( InputTerms ) { for(auto currentTerm : InputTerms) { currentTerm->First( ); Location currentLocation = currentTerm->currentLocation; if ( currentLocation < nearestStartLocation ) { nearestTerm = currentTerm; nearestStartLocation = currentLocation; } if ( currentLocation > nearestEndLocation ) { nearestEndLocation = currentLocation; } ++NumberOfTerms; currentTerm++; } } private: ISR *nearestTerm; // nearStartLocation and nearestEndLocation are// the start and end of the nearestTerm. Location nearestStartLocation, nearestEndLocation; };