private void DownHeap() { int i = 1; DoubleIteratorNode node = heap[i]; // save top node int j = i << 1; // find smaller child int k = j + 1; if (k <= size && (heap[k].CurFacet < heap[j].CurFacet)) { j = k; } while (j <= size && (heap[j].CurFacet < node.CurFacet)) { heap[i] = heap[j]; // shift up child i = j; j = i << 1; k = j + 1; if (k <= size && (heap[k].CurFacet < heap[j].CurFacet)) { j = k; } } heap[i] = node; // install saved node }
public virtual bool Insert(DoubleIteratorNode element) { return(InsertWithOverflow(element) != element); }
public void Put(DoubleIteratorNode element) { m_size++; m_heap[m_size] = element; UpHeap(); }
public virtual DoubleIteratorNode InsertWithOverflow(DoubleIteratorNode element) { if (size < maxSize) { Put(element); return null; } else if (size > 0 && !(element.CurFacet < heap[1].CurFacet)) { DoubleIteratorNode ret = heap[1]; heap[1] = element; AdjustTop(); return ret; } else { return element; } }
public virtual bool Insert(DoubleIteratorNode element) { return InsertWithOverflow(element) != element; }
public DoubleIteratorNode Add(DoubleIteratorNode element) { size++; heap[size] = element; UpHeap(); return heap[1]; }
public void Put(DoubleIteratorNode element) { size++; heap[size] = element; UpHeap(); }
public CombinedDoubleFacetIterator(IList<DoubleFacetIterator> iterators, int minHits) : this(iterators.Count) { _iterators = iterators; foreach (DoubleFacetIterator iterator in iterators) { DoubleIteratorNode node = new DoubleIteratorNode(iterator); if (node.Fetch(minHits)) _queue.Add(node); } _facet = TermDoubleList.VALUE_MISSING; count = 0; }