#include <stdlib.h>
+#define __LIBSCOUT_INTERNAL__
#include "scout.h"
typedef struct scnode scnode;
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)
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;
-}
-#ifndef _LIBSCOUT_H_
-#define _LIBSCOUT_H_
+#ifndef __LIBSCOUT__
+#define __LIBSCOUT__
struct scnode {
struct scway *way;
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__