void getSortedResults(IteratorPtr<LookupResult<T> > pFindResultIter, DistanceCalculatorPtr<T> pDistanceCaculator, T pTarget, ElementWithDistances<T>& sortedResults) { pFindResultIter->toBegin(); //Traverse iterator to get element and push to results vector while(!pFindResultIter->isDone()) { #ifdef DENOISING if(pFindResultIter->getObj().m_distanceToTarget >= NOISE_THRESOLD) { sortedResults.push_back(pFindResultIter->getObj()); } #endif pFindResultIter->next(); } //Wind-back the iterator for future purpose pFindResultIter->toBegin(); }
IteratorPtr<LookupResult<T> > ComposerBasedElementApproximator<T>::getFullResultIterator(IteratorPtr<LookupResult<T> > pResultIter, DistanceCalculatorPtr<T> pDistanceCalculator) { std::vector<LookupResult<T> > fullResults; if(pResultIter != NullPtr) { while(!pResultIter->isDone()) { LookupResult<T> resultObj = pResultIter->getObj(); fullResults.push_back(resultObj); pResultIter->next(); } pResultIter->toBegin(); //Filter results before sort if(m_pLookupResultFilter != NullPtr) { m_pLookupResultFilter->filterLookupResults(fullResults, pDistanceCalculator, false); } std::sort(fullResults.begin(), fullResults.end(), DistanceComparator<T>()); } return IteratorPtr<LookupResult<T> >(new VectorBasedReadOnlyIteratorImpl<LookupResult<T> >(fullResults)); }