]> git.lizzy.rs Git - libscout.git/commitdiff
First Prototype (unfinished)
authorEliasFleckenstein03 <eliasfleckenstein@web.de>
Mon, 28 Sep 2020 13:18:36 +0000 (15:18 +0200)
committerEliasFleckenstein03 <eliasfleckenstein@web.de>
Mon, 28 Sep 2020 13:18:36 +0000 (15:18 +0200)
scout.c [new file with mode: 0644]
scout.h [new file with mode: 0644]

diff --git a/scout.c b/scout.c
new file mode 100644 (file)
index 0000000..b9a2170
--- /dev/null
+++ b/scout.c
@@ -0,0 +1,67 @@
+#include <stdlib.h>
+#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 (file)
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