callbacks. Users changed.
#ifndef AS_H
#define AS_H
-#include <stdio.h> /* for FILE */
-#include "misc.h" /* for s_char */
+#include <stdio.h>
+#include "misc.h"
/*
* Coordinate.
int maxneighbors; /* max # of neighbors a cell can have */
int hashsize; /* size of internal hash table */
- int (*hash) (struct as_coord); /* hash function (coord -> int) */
- int (*neighbor) (struct as_coord, struct as_coord *, s_char *); /* function to find neighbors */
- double (*lbcost) (struct as_coord, struct as_coord, s_char *); /* function to give lower bound cost */
- double (*realcost) (struct as_coord, struct as_coord, s_char *); /* function to give real cost */
- double (*seccost) (struct as_coord, struct as_coord, s_char *); /* function to secondary cost */
- char *userdata; /* user's data, passed to callbacks */
+ /* hash function (coord -> int) */
+ int (*hash)(struct as_coord);
+ /* function to find neighbors */
+ int (*neighbor)(struct as_coord, struct as_coord *, void *);
+ /* function to give lower bound cost */
+ 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 to; /* to coordinate */
struct as_path *path; /* solution */
/* Functions that the user can call. */
extern struct as_data *as_init(int maxneighbors, int hashsize,
- int (*hashfunc) (struct as_coord),
- int (*neighborfunc) (struct as_coord,
- struct as_coord *,
- s_char *),
- double (*lbcostfunc) (struct as_coord,
- struct as_coord,
- s_char *),
- double (*realcostfunc) (struct as_coord,
- struct as_coord,
- s_char *),
- double (*seccostfunc) (struct as_coord,
+ int (*hashfunc)(struct as_coord),
+ int (*neighborfunc)(struct as_coord,
+ struct as_coord *,
+ void *),
+ double (*lbcostfunc)(struct as_coord,
+ struct as_coord,
+ void *),
+ double (*realcostfunc)(struct as_coord,
struct as_coord,
- s_char *),
- s_char *userdata);
+ void *),
+ double (*seccostfunc)(struct as_coord,
+ struct as_coord,
+ void *),
+ void *userdata);
extern int as_search(struct as_data *adp);
extern void as_delete(struct as_data *adp);
extern void as_reset(struct as_data *adp);
struct as_data *
as_init(int maxneighbors,
int hashsize,
- int (*hashfunc) (struct as_coord),
- int (*neighborfunc) (struct as_coord, struct as_coord *, s_char *),
- double (*lbcostfunc) (struct as_coord, struct as_coord, s_char *),
- double (*realcostfunc) (struct as_coord, struct as_coord,
- s_char *),
- double (*seccostfunc) (struct as_coord, struct as_coord, s_char *),
- s_char *userdata)
+ int (*hashfunc)(struct as_coord),
+ int (*neighborfunc)(struct as_coord, struct as_coord *, void *),
+ double (*lbcostfunc)(struct as_coord, struct as_coord, void *),
+ double (*realcostfunc)(struct as_coord, struct as_coord, void *),
+ double (*seccostfunc)(struct as_coord, struct as_coord, void *),
+ void *userdata)
{
struct as_data *adp;
};
static int bp_path(struct as_path *pp, s_char *buf);
-static int bp_neighbors(struct as_coord c, struct as_coord *cp,
- s_char *pp);
-static double bp_lbcost(struct as_coord from, struct as_coord to,
- s_char *pp);
-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_neighbors(struct as_coord c, struct as_coord *cp, void *);
+static double bp_lbcost(struct as_coord from, struct as_coord to, void *);
+static double bp_realcost(struct as_coord from, struct as_coord to, void *);
+static double bp_seccost(struct as_coord from, struct as_coord to, void *);
static int bp_coord_hash(struct as_coord c);
/* We use this for caching neighbors. It never changes except
memset(bp, 0, sizeof(*bp));
bp->adp = as_init(BP_NEIGHBORS, BP_ASHASHSIZE, bp_coord_hash,
bp_neighbors, bp_lbcost, bp_realcost,
- bp_seccost, (s_char *)bp);
+ bp_seccost, bp);
if (bp->adp == NULL)
return NULL;
* XXX need to check ownership, sector types, etc.
*/
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;
coord x, y;
*/
/*ARGSUSED*/
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 bestp *bp = (struct bestp *)pp;
* Compute the real cost to move from "from" to "to".
*/
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);
}
*/
/*ARGSUSED*/
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,
(coord)to.x, (coord)to.y);