void SearchSpaceTimerEvaluatorImpl<T>::releaseResultIter(IteratorPtr<LookupResult<T> >& pFindResultIter) { while(pFindResultIter != NullPtr && !pFindResultIter->isDone()) { T element = pFindResultIter->getObj().m_resultElement; pFindResultIter->next(); _destroy(element); } _destroy(pFindResultIter); pFindResultIter = NullPtr; }
IteratorPtr<T> ComposerBasedElementApproximator<T>::getExtractedElementIterator(IteratorPtr<LookupResult<T> > pLookupResultIter, combination_counter_t* pCombinationCounter) { std::vector<T> elements; int count = 0; while(!pLookupResultIter->isDone() && (m_buildingBlocksBucketMaxSize == 0 || ++count <= m_buildingBlocksBucketMaxSize)) { elements.push_back(pLookupResultIter->getObj().m_resultElement); pLookupResultIter->next(); } //Side-effect: Count maximum possible number of combinations std::cout << "Size of subset: " << elements.size() << "\n"; if(pCombinationCounter != NULL) { *pCombinationCounter *= elements.size(); } return IteratorPtr<T>(new VectorBasedReadOnlyIteratorImpl<T>(elements)); }
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)); }