Skip to content

Commit

Permalink
Reindent voronoi code to make it somewhat readable.
Browse files Browse the repository at this point in the history
indent -kr -i8 -brf
  • Loading branch information
e-n-f committed Mar 3, 2013
1 parent a30400b commit b1ba43c
Show file tree
Hide file tree
Showing 7 changed files with 883 additions and 1,060 deletions.
312 changes: 138 additions & 174 deletions voronoi/edgelist.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,186 +3,150 @@

#include "vdefs.h"

int ELhashsize ;
Site * bottomsite ;
Freelist hfl ;
Halfedge * ELleftend, * ELrightend, **ELhash ;

int ntry, totalsearch ;

void
ELinitialize(void)
{
int i ;

freeinit(&hfl, sizeof(Halfedge)) ;
ELhashsize = 2 * sqrt_nsites ;
ELhash = (Halfedge **)myalloc( sizeof(*ELhash) * ELhashsize) ;
for (i = 0 ; i < ELhashsize ; i++)
{
ELhash[i] = (Halfedge *)NULL ;
}
ELleftend = HEcreate((Edge *)NULL, 0) ;
ELrightend = HEcreate((Edge *)NULL, 0) ;
ELleftend->ELleft = (Halfedge *)NULL ;
ELleftend->ELright = ELrightend ;
ELrightend->ELleft = ELleftend ;
ELrightend->ELright = (Halfedge *)NULL ;
ELhash[0] = ELleftend ;
ELhash[ELhashsize-1] = ELrightend ;
}

Halfedge *
HEcreate(Edge * e, int pm)
{
Halfedge * answer ;

answer = (Halfedge *)getfree(&hfl) ;
answer->ELedge = e ;
answer->ELpm = pm ;
answer->PQnext = (Halfedge *)NULL ;
answer->vertex = (Site *)NULL ;
answer->ELrefcnt = 0 ;
return (answer) ;
}

void
ELinsert(Halfedge * lb, Halfedge * new)
{
new->ELleft = lb ;
new->ELright = lb->ELright ;
(lb->ELright)->ELleft = new ;
lb->ELright = new ;
}
int ELhashsize;
Site *bottomsite;
Freelist hfl;
Halfedge *ELleftend, *ELrightend, **ELhash;

int ntry, totalsearch;

void ELinitialize(void) {
int i;

freeinit(&hfl, sizeof(Halfedge));
ELhashsize = 2 * sqrt_nsites;
ELhash = (Halfedge **) myalloc(sizeof(*ELhash) * ELhashsize);
for (i = 0; i < ELhashsize; i++) {
ELhash[i] = (Halfedge *) NULL;
}
ELleftend = HEcreate((Edge *) NULL, 0);
ELrightend = HEcreate((Edge *) NULL, 0);
ELleftend->ELleft = (Halfedge *) NULL;
ELleftend->ELright = ELrightend;
ELrightend->ELleft = ELleftend;
ELrightend->ELright = (Halfedge *) NULL;
ELhash[0] = ELleftend;
ELhash[ELhashsize - 1] = ELrightend;
}

Halfedge *HEcreate(Edge * e, int pm) {
Halfedge *answer;

answer = (Halfedge *) getfree(&hfl);
answer->ELedge = e;
answer->ELpm = pm;
answer->PQnext = (Halfedge *) NULL;
answer->vertex = (Site *) NULL;
answer->ELrefcnt = 0;
return (answer);
}

void ELinsert(Halfedge * lb, Halfedge * new) {
new->ELleft = lb;
new->ELright = lb->ELright;
(lb->ELright)->ELleft = new;
lb->ELright = new;
}

/* Get entry from hash table, pruning any deleted nodes */

Halfedge *
ELgethash(int b)
{
Halfedge * he ;

if ((b < 0) || (b >= ELhashsize))
{
return ((Halfedge *)NULL) ;
}
he = ELhash[b] ;
if ((he == (Halfedge *)NULL) || (he->ELedge != (Edge *)DELETED))
{
return (he) ;
}
/* Hash table points to deleted half edge. Patch as necessary. */
ELhash[b] = (Halfedge *)NULL ;
if ((--(he->ELrefcnt)) == 0)
{
makefree((Freenode *)he, (Freelist *)&hfl) ;
}
return ((Halfedge *)NULL) ;
}

Halfedge *
ELleftbnd(Point * p)
{
int i, bucket ;
Halfedge * he ;

/* Use hash table to get close to desired halfedge */
bucket = (p->x - xmin) / deltax * ELhashsize ;
if (bucket < 0)
{
bucket = 0 ;
}
if (bucket >= ELhashsize)
{
bucket = ELhashsize - 1 ;
}
he = ELgethash(bucket) ;
if (he == (Halfedge *)NULL)
{
for (i = 1 ; 1 ; i++)
{
if ((he = ELgethash(bucket-i)) != (Halfedge *)NULL)
{
break ;
}
if ((he = ELgethash(bucket+i)) != (Halfedge *)NULL)
{
break ;
}
}
totalsearch += i ;
}
ntry++ ;
/* Now search linear list of halfedges for the corect one */
if (he == ELleftend || (he != ELrightend && right_of(he,p)))
{
do {
he = he->ELright ;
} while (he != ELrightend && right_of(he,p)) ;
he = he->ELleft ;
}
else
{
do {
he = he->ELleft ;
} while (he != ELleftend && !right_of(he,p)) ;
}
Halfedge *ELgethash(int b) {
Halfedge *he;

if ((b < 0) || (b >= ELhashsize)) {
return ((Halfedge *) NULL);
}
he = ELhash[b];
if ((he == (Halfedge *) NULL) || (he->ELedge != (Edge *) DELETED)) {
return (he);
}
/* Hash table points to deleted half edge. Patch as necessary. */
ELhash[b] = (Halfedge *) NULL;
if ((--(he->ELrefcnt)) == 0) {
makefree((Freenode *) he, (Freelist *) & hfl);
}
return ((Halfedge *) NULL);
}

Halfedge *ELleftbnd(Point * p) {
int i, bucket;
Halfedge *he;

/* Use hash table to get close to desired halfedge */
bucket = (p->x - xmin) / deltax * ELhashsize;
if (bucket < 0) {
bucket = 0;
}
if (bucket >= ELhashsize) {
bucket = ELhashsize - 1;
}
he = ELgethash(bucket);
if (he == (Halfedge *) NULL) {
for (i = 1; 1; i++) {
if ((he =
ELgethash(bucket - i)) != (Halfedge *) NULL) {
break;
}
if ((he =
ELgethash(bucket + i)) != (Halfedge *) NULL) {
break;
}
}
totalsearch += i;
}
ntry++;
/* Now search linear list of halfedges for the corect one */
if (he == ELleftend || (he != ELrightend && right_of(he, p))) {
do {
he = he->ELright;
} while (he != ELrightend && right_of(he, p));
he = he->ELleft;
} else {
do {
he = he->ELleft;
} while (he != ELleftend && !right_of(he, p));
}
/*** Update hash table and reference counts ***/
if ((bucket > 0) && (bucket < ELhashsize-1))
{
if (ELhash[bucket] != (Halfedge *)NULL)
{
(ELhash[bucket]->ELrefcnt)-- ;
}
ELhash[bucket] = he ;
(ELhash[bucket]->ELrefcnt)++ ;
}
return (he) ;
}
if ((bucket > 0) && (bucket < ELhashsize - 1)) {
if (ELhash[bucket] != (Halfedge *) NULL) {
(ELhash[bucket]->ELrefcnt)--;
}
ELhash[bucket] = he;
(ELhash[bucket]->ELrefcnt)++;
}
return (he);
}

/*** This delete routine can't reclaim node, since pointers from hash
: table may be present.
***/

void
ELdelete(Halfedge * he)
{
(he->ELleft)->ELright = he->ELright ;
(he->ELright)->ELleft = he->ELleft ;
he->ELedge = (Edge *)DELETED ;
}

Halfedge *
ELright(Halfedge * he)
{
return (he->ELright) ;
}

Halfedge *
ELleft(Halfedge * he)
{
return (he->ELleft) ;
}

Site *
leftreg(Halfedge * he)
{
if (he->ELedge == (Edge *)NULL)
{
return(bottomsite) ;
}
return (he->ELpm == le ? he->ELedge->reg[le] :
he->ELedge->reg[re]) ;
}

Site *
rightreg(Halfedge * he)
{
if (he->ELedge == (Edge *)NULL)
{
return(bottomsite) ;
}
return (he->ELpm == le ? he->ELedge->reg[re] :
he->ELedge->reg[le]) ;
}

void ELdelete(Halfedge * he) {
(he->ELleft)->ELright = he->ELright;
(he->ELright)->ELleft = he->ELleft;
he->ELedge = (Edge *) DELETED;
}

Halfedge *ELright(Halfedge * he) {
return (he->ELright);
}

Halfedge *ELleft(Halfedge * he) {
return (he->ELleft);
}

Site *leftreg(Halfedge * he) {
if (he->ELedge == (Edge *) NULL) {
return (bottomsite);
}
return (he->ELpm == le ? he->ELedge->reg[le] :
he->ELedge->reg[re]);
}

Site *rightreg(Halfedge * he) {
if (he->ELedge == (Edge *) NULL) {
return (bottomsite);
}
return (he->ELpm == le ? he->ELedge->reg[re] :
he->ELedge->reg[le]);
}
Loading

0 comments on commit b1ba43c

Please sign in to comment.