(as_data): Use void * for userdata member and userdata parameter of

callbacks.  Users changed.
This commit is contained in:
Markus Armbruster 2006-03-28 21:00:00 +00:00
parent aa5a8ec0dc
commit 8383f33229
3 changed files with 41 additions and 41 deletions

View file

@ -30,8 +30,8 @@
#ifndef AS_H #ifndef AS_H
#define AS_H #define AS_H
#include <stdio.h> /* for FILE */ #include <stdio.h>
#include "misc.h" /* for s_char */ #include "misc.h"
/* /*
* Coordinate. * Coordinate.
@ -90,12 +90,17 @@ struct as_data {
int maxneighbors; /* max # of neighbors a cell can have */ int maxneighbors; /* max # of neighbors a cell can have */
int hashsize; /* size of internal hash table */ int hashsize; /* size of internal hash table */
int (*hash) (struct as_coord); /* hash function (coord -> int) */ /* hash function (coord -> int) */
int (*neighbor) (struct as_coord, struct as_coord *, s_char *); /* function to find neighbors */ int (*hash)(struct as_coord);
double (*lbcost) (struct as_coord, struct as_coord, s_char *); /* function to give lower bound cost */ /* function to find neighbors */
double (*realcost) (struct as_coord, struct as_coord, s_char *); /* function to give real cost */ int (*neighbor)(struct as_coord, struct as_coord *, void *);
double (*seccost) (struct as_coord, struct as_coord, s_char *); /* function to secondary cost */ /* function to give lower bound cost */
char *userdata; /* user's data, passed to callbacks */ double (*lbcost)(struct as_coord, struct as_coord, void *);
/* function to give real cost */
double (*realcost)(struct as_coord, struct as_coord, void *);
/* function to secondary cost */
double (*seccost)(struct as_coord, struct as_coord, void *);
void *userdata; /* user's data, passed to callbacks */
struct as_coord from; /* from coordinate */ struct as_coord from; /* from coordinate */
struct as_coord to; /* to coordinate */ struct as_coord to; /* to coordinate */
struct as_path *path; /* solution */ struct as_path *path; /* solution */
@ -144,20 +149,20 @@ struct as_frompath {
/* Functions that the user can call. */ /* Functions that the user can call. */
extern struct as_data *as_init(int maxneighbors, int hashsize, extern struct as_data *as_init(int maxneighbors, int hashsize,
int (*hashfunc) (struct as_coord), int (*hashfunc)(struct as_coord),
int (*neighborfunc) (struct as_coord, int (*neighborfunc)(struct as_coord,
struct as_coord *, struct as_coord *,
s_char *), void *),
double (*lbcostfunc) (struct as_coord, double (*lbcostfunc)(struct as_coord,
struct as_coord, struct as_coord,
s_char *), void *),
double (*realcostfunc) (struct as_coord, double (*realcostfunc)(struct as_coord,
struct as_coord,
s_char *),
double (*seccostfunc) (struct as_coord,
struct as_coord, struct as_coord,
s_char *), void *),
s_char *userdata); double (*seccostfunc)(struct as_coord,
struct as_coord,
void *),
void *userdata);
extern int as_search(struct as_data *adp); extern int as_search(struct as_data *adp);
extern void as_delete(struct as_data *adp); extern void as_delete(struct as_data *adp);
extern void as_reset(struct as_data *adp); extern void as_reset(struct as_data *adp);

View file

@ -31,13 +31,12 @@
struct as_data * struct as_data *
as_init(int maxneighbors, as_init(int maxneighbors,
int hashsize, int hashsize,
int (*hashfunc) (struct as_coord), int (*hashfunc)(struct as_coord),
int (*neighborfunc) (struct as_coord, struct as_coord *, s_char *), int (*neighborfunc)(struct as_coord, struct as_coord *, void *),
double (*lbcostfunc) (struct as_coord, struct as_coord, s_char *), double (*lbcostfunc)(struct as_coord, struct as_coord, void *),
double (*realcostfunc) (struct as_coord, struct as_coord, double (*realcostfunc)(struct as_coord, struct as_coord, void *),
s_char *), double (*seccostfunc)(struct as_coord, struct as_coord, void *),
double (*seccostfunc) (struct as_coord, struct as_coord, s_char *), void *userdata)
s_char *userdata)
{ {
struct as_data *adp; struct as_data *adp;

View file

@ -60,14 +60,10 @@ struct bestp {
}; };
static int bp_path(struct as_path *pp, s_char *buf); static int bp_path(struct as_path *pp, s_char *buf);
static int bp_neighbors(struct as_coord c, struct as_coord *cp, static int bp_neighbors(struct as_coord c, struct as_coord *cp, void *);
s_char *pp); static double bp_lbcost(struct as_coord from, struct as_coord to, void *);
static double bp_lbcost(struct as_coord from, struct as_coord to, static double bp_realcost(struct as_coord from, struct as_coord to, void *);
s_char *pp); static double bp_seccost(struct as_coord from, struct as_coord to, void *);
static double bp_realcost(struct as_coord from, struct as_coord to,
s_char *pp);
static double bp_seccost(struct as_coord from, struct as_coord to,
s_char *pp);
static int bp_coord_hash(struct as_coord c); static int bp_coord_hash(struct as_coord c);
/* We use this for caching neighbors. It never changes except /* We use this for caching neighbors. It never changes except
@ -83,7 +79,7 @@ bp_init(void)
memset(bp, 0, sizeof(*bp)); memset(bp, 0, sizeof(*bp));
bp->adp = as_init(BP_NEIGHBORS, BP_ASHASHSIZE, bp_coord_hash, bp->adp = as_init(BP_NEIGHBORS, BP_ASHASHSIZE, bp_coord_hash,
bp_neighbors, bp_lbcost, bp_realcost, bp_neighbors, bp_lbcost, bp_realcost,
bp_seccost, (s_char *)bp); bp_seccost, bp);
if (bp->adp == NULL) if (bp->adp == NULL)
return NULL; return NULL;
@ -183,7 +179,7 @@ bp_path(struct as_path *pp, s_char *buf)
* XXX need to check ownership, sector types, etc. * XXX need to check ownership, sector types, etc.
*/ */
static int static int
bp_neighbors(struct as_coord c, struct as_coord *cp, s_char *pp) bp_neighbors(struct as_coord c, struct as_coord *cp, void *pp)
{ {
struct sctstr *sectp = (void *)empfile[EF_SECTOR].cache; struct sctstr *sectp = (void *)empfile[EF_SECTOR].cache;
coord x, y; coord x, y;
@ -238,7 +234,7 @@ bp_neighbors(struct as_coord c, struct as_coord *cp, s_char *pp)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
static double static double
bp_lbcost(struct as_coord from, struct as_coord to, s_char *pp) bp_lbcost(struct as_coord from, struct as_coord to, void *pp)
{ {
struct sctstr *sectp = (void *)empfile[EF_SECTOR].cache; struct sctstr *sectp = (void *)empfile[EF_SECTOR].cache;
struct bestp *bp = (struct bestp *)pp; struct bestp *bp = (struct bestp *)pp;
@ -260,7 +256,7 @@ bp_lbcost(struct as_coord from, struct as_coord to, s_char *pp)
* Compute the real cost to move from "from" to "to". * Compute the real cost to move from "from" to "to".
*/ */
static double static double
bp_realcost(struct as_coord from, struct as_coord to, s_char *pp) bp_realcost(struct as_coord from, struct as_coord to, void *pp)
{ {
return bp_lbcost(from, to, pp); return bp_lbcost(from, to, pp);
} }
@ -271,7 +267,7 @@ bp_realcost(struct as_coord from, struct as_coord to, s_char *pp)
*/ */
/*ARGSUSED*/ /*ARGSUSED*/
static double static double
bp_seccost(struct as_coord from, struct as_coord to, s_char *pp) bp_seccost(struct as_coord from, struct as_coord to, void *pp)
{ {
return (double)mapdist((coord)from.x, (coord)from.y, return (double)mapdist((coord)from.x, (coord)from.y,
(coord)to.x, (coord)to.y); (coord)to.x, (coord)to.y);