From: EliasFleckenstein03 Date: Mon, 28 Sep 2020 13:18:36 +0000 (+0200) Subject: First Prototype (unfinished) X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=8430394c9d903a9ac246c47a31da59f774f6ae19;p=libscout.git First Prototype (unfinished) --- diff --git a/scout.c b/scout.c new file mode 100644 index 0000000..b9a2170 --- /dev/null +++ b/scout.c @@ -0,0 +1,67 @@ +#include +#include "scout.h" + +typedef struct scnode scnode; +typedef struct scway scway; +typedef struct scwaypoint scwaypoint; + +scway *scaddway(scnode *from, const scnode *to, int len) +{ + scway *way = malloc(sizeof(scway)); + way->lto = to; + way->alt = NULL; + way->len = len; + scway *apar, *par = NULL; + for (apar = from->way; apar != NULL; par = apar, apar = apar->alt); + if (par) + par->alt = way; + else + from->way = way; + return way; +} + +scwaypoint *__scallocwayp(const scnode *node, scway *way) +{ + scwaypoint *wayp = malloc(sizeof(scwaypoint)); + wayp->nod = node; + wayp->way = way; + wayp->nxt = NULL; + wayp->len = 0; +} + +scwaypoint *__scstackfindgetend(scwaypoint *stack, scway *way) +{ + scwaypoint *asptr, *sptr; + for (asptr = stack; asptr != NULL; sptr = asptr, asptr = asptr->nxt) + if (asptr->nod == way->lto) + return NULL; + return sptr; +} + +void __scstackfree(scwaypoint *stack) +{ + for (scwaypoint *sptr = stack; sptr != NULL; sptr = sptr->nxt) + free(sptr); +} + +int __scstackgetlen(scwaypoint *stack) +{ + for (scwaypoitn) +} + +scwaypoint *scout(const scnode *from, const scnode *to, scwaypoint *stack) +{ + scwaypoint *wayp = NULL; + if (from == to) + return __scallocwayp(from, NULL); + for (scway *way = from->way; way != NULL; way = way->alt) { + scwaypoint *stackend; + if ((stackend = __scstackfindgetend(stack, way)) == NULL) + continue; + + if (wayp && wayp->len <= (tway->len = __scstackgetlen(tway))) + __scstackfree(wayp); + wayp = twayp; + } + return wayp; +} diff --git a/scout.h b/scout.h new file mode 100644 index 0000000..aa1130c --- /dev/null +++ b/scout.h @@ -0,0 +1,25 @@ +#ifndef _LIBSCOUT_H_ +#define _LIBSCOUT_H_ + +struct scnode { + struct scway *way; + void *dat; +}; + +struct scway { + const struct scnode *lto; + struct scway *alt; + int len; +}; + +struct scwaypoint { + const struct scnode *nod; + const struct scway *way; + struct scwaypoint *nxt; + int len; +}; + +struct scway *scaddway(struct scnode *, const struct scnode *, int); +struct scwaypoint *scout(const struct scnode *, const struct scnode *, struct scwaypoint *); + +#endif