#include <Heap.h>
Maintains a hash table in order to find halfedges in n*log(n) time.
Public Member Functions | |
HeapPQ () | |
void | PQinitialize (int sqrt_nsites, double ymin, double deltay) |
void | PQreset () |
void | PQinsert (Halfedge *he, Site *v, double offset) |
void | PQdelete (Halfedge *he) |
int | PQbucket (Halfedge *he) |
int | PQempty () |
Vector2D | PQ_min () |
Halfedge * | PQextractmin () |
Protected Attributes | |
int | PQcount |
int | PQmin |
int | PQhashsize |
double | ymin |
double | deltay |
Halfedge * | PQhash |
HeapPQ::HeapPQ | ( | ) |
void HeapPQ::PQinitialize | ( | int | sqrt_nsites, | |
double | ymin, | |||
double | deltay | |||
) |
00032 { 00033 PQcount = 0; 00034 PQmin = 0; 00035 PQhashsize = 4 * sqrt_nsites; 00036 PQhash = new Halfedge[PQhashsize]; 00037 this->ymin = ymin; 00038 this->deltay = deltay; 00039 }
void HeapPQ::PQreset | ( | ) |
00047 { 00048 Halfedge *last, *next; 00049 00050 he->vertex = v; 00051 he->ystar = v->coord.y + offset; 00052 last = &PQhash[PQbucket(he)]; 00053 while((next = last->PQnext) != NULL && (he->ystar > next->ystar || (he->ystar == next->ystar && v->coord.x > next->vertex->coord.x))) { 00054 last = next; 00055 } 00056 he->PQnext = last->PQnext; 00057 last->PQnext = he; 00058 PQcount++; 00059 }
void HeapPQ::PQdelete | ( | Halfedge * | he | ) |
int HeapPQ::PQbucket | ( | Halfedge * | he | ) |
00076 { 00077 int bucket; 00078 00079 bucket = (int)((he->ystar - ymin)/deltay) * PQhashsize; 00080 if(bucket < 0) bucket = 0; 00081 if(bucket >= PQhashsize) bucket = PQhashsize-1; 00082 if(bucket < PQmin) PQmin = bucket; 00083 return bucket; 00084 }
int HeapPQ::PQempty | ( | ) |
Vector2D HeapPQ::PQ_min | ( | ) |
Halfedge * HeapPQ::PQextractmin | ( | ) |
int HeapPQ::PQcount [protected] |
int HeapPQ::PQmin [protected] |
int HeapPQ::PQhashsize [protected] |
double HeapPQ::ymin [protected] |
double HeapPQ::deltay [protected] |
Halfedge* HeapPQ::PQhash [protected] |