/*------------------------------------------------------------------------------ | |
* 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 |