diff options
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htlib/HtHeap.h')
-rw-r--r-- | debian/htdig/htdig-3.2.0b6/htlib/HtHeap.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htlib/HtHeap.h b/debian/htdig/htdig-3.2.0b6/htlib/HtHeap.h new file mode 100644 index 00000000..75e3c411 --- /dev/null +++ b/debian/htdig/htdig-3.2.0b6/htlib/HtHeap.h @@ -0,0 +1,92 @@ +// +// HtHeap.h +// +// HtHeap: A Heap class which holds objects of type Object. +// (A heap is a semi-ordered tree-like structure. +// it ensures that the first item is *always* the largest. +// NOTE: To use a heap, you must implement the Compare() function for +// your Object classes. The assumption used here is -1 means +// less-than, 0 means equal, and +1 means greater-than. Thus +// this is a "min heap" for that definition.) +// +// Part of the ht://Dig package <http://www.htdig.org/> +// Copyright (c) 1999-2004 The ht://Dig Group +// For copyright details, see the file COPYING in your distribution +// or the GNU Library General Public License (LGPL) version 2 or later +// <http://www.gnu.org/copyleft/lgpl.html> +// +// $Id: HtHeap.h,v 1.7 2004/05/28 13:15:20 lha Exp $ +// +// +#ifndef _HtHeap_h_ +#define _HtHeap_h_ +#include "Object.h" +#include "HtVector.h" + +class HtHeap : public Object +{ +public: + // + // Constructor/Destructor + // + HtHeap(); + HtHeap(HtVector vector); + ~HtHeap(); + + // + // Add() will add an Object to the heap in the appropriate location + // + void Add(Object *); + + // + // Destroy() will delete all the objects in the heap. This is + // equivalent to calling the destructor + // + void Destroy(); + + // + // Peek() will return a reference to the top object in the heap. + // + Object *Peek() {return data->Nth(0);} + + // + // Remove() will return a reference as Peek() but will also + // remove the reference from the heap and re-heapify + // + Object *Remove(); + + // + // Access to the number of elements + // + int Count() {return data->Count();} + int IsEmpty() {return data->IsEmpty();} + + // + // Deep copy member function + // + Object *Copy() const; + + // + // Assignment + // + HtHeap &operator= (HtHeap *heap) {return *this = *heap;} + HtHeap &operator= (HtHeap &heap); + +protected: + // The vector class should keep track of everything for us + HtVector *data; + + // Functions for establishing the relations between elements + int parentOf (int i) + { return (i - 1)/2; } + int leftChildOf (int i) + { return 2*i + 1; } + int rightChildOf (int i) + { return 2* (i+1); } + + // Protected procedures for performing heap-making operations + void percolateUp (int leaf); // pushes the node up as far as possible + void pushDownRoot (int root); // pushes the node down as necessary +}; + +#endif |