Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __HEAP_H_
00030 #define __HEAP_H_
00031
00032
00033 #define HEAPSIZE 20000000
00034 #define HEAPSIZE_INIT 5000
00035
00036 struct HEAPELEMENT
00037 {
00038 AbstractSearchState *heapstate;
00039 CKey key;
00040 };
00041 typedef struct HEAPELEMENT heapelement;
00042
00043 class CHeap
00044 {
00045
00046
00047 public:
00048 int percolates;
00049 heapelement* heap;
00050 int currentsize;
00051 int allocated;
00052
00053
00054 public:
00055 CHeap();
00056 ~CHeap();
00057
00058
00059 public:
00060
00061 bool emptyheap();
00062 bool fullheap();
00063 bool inheap(AbstractSearchState *AbstractSearchState);
00064 CKey getkeyheap(AbstractSearchState *AbstractSearchState);
00065 void makeemptyheap();
00066 void insertheap(AbstractSearchState *AbstractSearchState, CKey key);
00067 void deleteheap(AbstractSearchState *AbstractSearchState);
00068 void updateheap(AbstractSearchState *AbstractSearchState, CKey NewKey);
00069 AbstractSearchState *getminheap();
00070 AbstractSearchState *getminheap(CKey& ReturnKey);
00071 CKey getminkeyheap();
00072 AbstractSearchState *deleteminheap();
00073 void makeheap();
00074 void insert_unsafe(AbstractSearchState *state, CKey key);
00075 void updateheap_unsafe(AbstractSearchState *AbstractSearchState, CKey NewKey);
00076 void deleteheap_unsafe(AbstractSearchState *AbstractSearchState);
00077
00078
00079 private:
00080 void percolatedown(int hole, heapelement tmp);
00081 void percolateup(int hole, heapelement tmp);
00082 void percolateupordown(int hole, heapelement tmp);
00083
00084 void growheap();
00085 void sizecheck();
00086
00087
00088
00089 public:
00090
00091 };
00092
00093
00094 struct HEAPINTELEMENT
00095 {
00096 AbstractSearchState *heapstate;
00097 int key;
00098 };
00099 typedef struct HEAPINTELEMENT heapintelement;
00100
00101
00102 class CIntHeap
00103 {
00104
00105
00106 public:
00107 int percolates;
00108 heapintelement* heap;
00109 int currentsize;
00110 int allocated;
00111
00112
00113 public:
00114 CIntHeap();
00115 CIntHeap(int initial_size);
00116 ~CIntHeap();
00117
00118
00119 public:
00120
00121 bool emptyheap();
00122 bool fullheap();
00123 bool inheap(AbstractSearchState *AbstractSearchState);
00124 int getkeyheap(AbstractSearchState *AbstractSearchState);
00125 void makeemptyheap();
00126 void insertheap(AbstractSearchState *AbstractSearchState, int key);
00127 void deleteheap(AbstractSearchState *AbstractSearchState);
00128 void updateheap(AbstractSearchState *AbstractSearchState, int NewKey);
00129 AbstractSearchState *getminheap();
00130 AbstractSearchState *getminheap(int& ReturnKey);
00131 int getminkeyheap();
00132 AbstractSearchState *deleteminheap();
00133 void makeheap();
00134
00135 private:
00136 void percolatedown(int hole, heapintelement tmp);
00137 void percolateup(int hole, heapintelement tmp);
00138 void percolateupordown(int hole, heapintelement tmp);
00139
00140 void growheap();
00141 void sizecheck();
00142
00143
00144
00145 public:
00146
00147 };
00148
00149
00150 #endif
00151
00152
00153