void FilteredTermEnum::setEnum(TermEnumPtr actualEnum) { this->actualEnum = actualEnum; // Find the first term that matches TermPtr term(actualEnum->term()); if (term && termCompare(term)) currentTerm = term; else next(); }
bool NumericRangeTermEnum::next() { // if a current term exists, the actual enum is initialized: try change to next term, if no // such term exists, fall-through if (currentTerm) { BOOST_ASSERT(actualEnum); if (actualEnum->next()) { currentTerm = actualEnum->term(); if (termCompare(currentTerm)) { return true; } } } // if all above fails, we go forward to the next enum, if one is available currentTerm.reset(); while (rangeBounds.size() >= 2) { BOOST_ASSERT(rangeBounds.size() % 2 == 0); // close the current enum and read next bounds if (actualEnum) { actualEnum->close(); actualEnum.reset(); } String lowerBound(rangeBounds.removeFirst()); currentUpperBound = rangeBounds.removeFirst(); // create a new enum actualEnum = reader->terms(termTemplate->createTerm(lowerBound)); currentTerm = actualEnum->term(); if (currentTerm && termCompare(currentTerm)) { return true; } // clear the current term for next iteration currentTerm.reset(); } // no more sub-range enums available BOOST_ASSERT(rangeBounds.empty() && !currentTerm); return false; }
void FilteredTermEnum::setEnum(TermEnum* actualEnum) { //Func - Sets the actual Enumeration //Pre - actualEnum != NULL //Post - The instance has been created CND_PRECONDITION(actualEnum != NULL,"actualEnum is NULL"); _CLLDELETE(this->actualEnum); this->actualEnum = actualEnum; // Find the first term that matches //Ordered term not to return reference ownership here. Term* term = actualEnum->term(false); if (term != NULL && termCompare(term)){ _CLDECDELETE(currentTerm); currentTerm = _CL_POINTER(term); }else{ next(); } }
bool FilteredTermEnum::next() { //Func - Increments the enumeration to the next element. //Pre - true //Post - Returns True if the enumeration has been moved to the next element otherwise false //The actual enumerator is not initialized! if (actualEnum == NULL){ return false; } //Finalize the currentTerm and reset it to NULL currentTerm->finalize(); currentTerm = NULL; //Iterate through the enumeration while (currentTerm == NULL) { if (EndEnum()) return false; if (actualEnum->next()) { //Order getTerm not to return reference ownership here. */ Term* term = actualEnum->getTerm(false); //Compare the retrieved term if (termCompare(term)){ //Matched so finalize the current currentTerm->finalize(); //Get a reference to the matched term currentTerm = term->pointer(); return true; } } else return false; } currentTerm->finalize(); currentTerm = NULL; return false; }
bool FilteredTermEnum::next() { if (!actualEnum) return false; // the actual enumerator is not initialized currentTerm.reset(); while (!currentTerm) { if (endEnum()) return false; if (actualEnum->next()) { TermPtr term(actualEnum->term()); if (termCompare(term)) { currentTerm = term; return true; } } else return false; } currentTerm.reset(); return false; }