diff options
author | EliasFleckenstein03 <eliasfleckenstein@web.de> | 2020-09-28 15:36:11 +0200 |
---|---|---|
committer | EliasFleckenstein03 <eliasfleckenstein@web.de> | 2020-09-28 15:36:11 +0200 |
commit | fefba3e4af914bb914aaaa389f5d033306e6a780 (patch) | |
tree | c802983471828be41fb6374e8767496f587e8b09 | |
parent | 8430394c9d903a9ac246c47a31da59f774f6ae19 (diff) | |
download | libscout-fefba3e4af914bb914aaaa389f5d033306e6a780.tar.xz |
Still unfinished
-rw-r--r-- | scout.c | 48 | ||||
-rw-r--r-- | scout.h | 15 |
2 files changed, 35 insertions, 28 deletions
@@ -1,4 +1,5 @@ #include <stdlib.h> +#define __LIBSCOUT_INTERNAL__ #include "scout.h" typedef struct scnode scnode; @@ -20,16 +21,35 @@ scway *scaddway(scnode *from, const scnode *to, int len) return way; } -scwaypoint *__scallocwayp(const scnode *node, scway *way) +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; + scwaypoint *twayp = __scallocwayp(from, way); + stackend->nxt = twayp; + scwaypoint *nwayp = scout(way->lto, to, stack) + if (wayp && wayp->len <= (twayp->len = __scstackgetlen(twayp))) + __scstackfree(wayp); + wayp = twayp; + } + return wayp; +} + +scwaypoint *__scallocwayp(const scnode *node, const scway *way) { scwaypoint *wayp = malloc(sizeof(scwaypoint)); wayp->nod = node; wayp->way = way; wayp->nxt = NULL; - wayp->len = 0; + wayp->len = way->len; } -scwaypoint *__scstackfindgetend(scwaypoint *stack, scway *way) +scwaypoint *__scstackfindgetend(scwaypoint *stack, const scway *way) { scwaypoint *asptr, *sptr; for (asptr = stack; asptr != NULL; sptr = asptr, asptr = asptr->nxt) @@ -43,25 +63,3 @@ 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; -} @@ -1,5 +1,5 @@ -#ifndef _LIBSCOUT_H_ -#define _LIBSCOUT_H_ +#ifndef __LIBSCOUT__ +#define __LIBSCOUT__ struct scnode { struct scway *way; @@ -22,4 +22,13 @@ struct scwaypoint { struct scway *scaddway(struct scnode *, const struct scnode *, int); struct scwaypoint *scout(const struct scnode *, const struct scnode *, struct scwaypoint *); -#endif +#ifdef __LIBSCOUT_INTERNAL__ + +struct scwaypoint *__scallocwayp(const struct scnode *, const struct scway *); +struct scwaypoint *__scstackfindgetend(struct scwaypoint *, const struct scway *); +void __scstackfree(struct scwaypoint *); +int __scstackgetlen(struct scwaypoint *); + +#endif // __LIBSCOUT_INTERNAL__ + +#endif // __LIBSCOUT__ |