/*------------------------------------------------------------------------------ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team * * Distributable under the terms of either the Apache License (Version 2.0) or * the GNU Lesser General Public License, as specified in the COPYING file. ------------------------------------------------------------------------------*/ #ifndef _lucene_search_HitQueue_ #define _lucene_search_HitQueue_ #if defined(_LUCENE_PRAGMA_ONCE) # pragma once #endif #include "SearchHeader.h" CL_NS_DEF(search) /** * An optimised PriorityQueue which takes ScoreDoc structs. Some by-ref passing * and memory related optimisations have been done. */ class HitQueue: LUCENE_BASE { private: ScoreDoc* heap; size_t _size; size_t maxSize; void upHeap(); void downHeap(); protected: bool lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB); public: void adjustTop(); struct ScoreDoc& top(); void put(struct ScoreDoc& element); ScoreDoc pop(); /** * Adds element to the PriorityQueue in log(size) time if either * the PriorityQueue is not full, or not lessThan(element, top()). * @param element * @return true if element is added, false otherwise. */ bool insert(struct ScoreDoc& element); /** * Returns the number of elements currently stored in the PriorityQueue. */ size_t size(); HitQueue(const int32_t maxSize); ~HitQueue(); }; CL_NS_END #endif