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;
 }
 public void Put(DoubleIteratorNode element)
 {
     size++;
     heap[size] = element;
     UpHeap();
 }