git » unicorn-sparkle-basic.git » commit f374011

Finally use vector successfully

author Alan Dipert
2024-03-29 23:58:42 UTC
committer Alan Dipert
2024-03-29 23:58:42 UTC
parent dd8848b51dab975a9966b586f75e2abeb00ce1bc

Finally use vector successfully

Makefile +5 -2
lines.c +85 -0
lines.h +14 -0
main.c +4 -1

diff --git a/Makefile b/Makefile
index 9f558af..82b1ee3 100644
--- a/Makefile
+++ b/Makefile
@@ -8,8 +8,11 @@ YFLAGS=-d
 
 all: usbasic
 
-usbasic: lex.yy.o usbasic.tab.o parse.o vec.o main.o
-	$(CC) $(CFLAGS) -o usbasic lex.yy.o usbasic.tab.o parse.o vec.o main.o -lgc -lfl -lreadline -lhistory
+usbasic: lex.yy.o usbasic.tab.o parse.o vec.o lines.o main.o
+	$(CC) $(CFLAGS) -o usbasic lex.yy.o usbasic.tab.o parse.o vec.o lines.o main.o -lgc -lfl -lreadline -lhistory
+
+lines.o: lines.c lines.h vec.h parse.h
+	$(CC) $(CFLAGS) -c lines.c
 
 vec.o: vec.c vec.h
 	$(CC) $(CFLAGS) -c vec.c
diff --git a/lines.c b/lines.c
new file mode 100644
index 0000000..d06ad4f
--- /dev/null
+++ b/lines.c
@@ -0,0 +1,85 @@
+/*
+ * This file is part of Unicorn Sparkle Basic and is released under
+ * CC0 1.0 Universal License.  See LICENSE.txt file or
+ * https://creativecommons.org/publicdomain/zero/1.0/ for full license
+ * text.
+ */
+
+#include "lines.h"
+
+struct node_tag **lines_make() {
+  struct node_tag** lines = vector_create();
+  return lines;
+}
+
+void lines_add(struct node_tag **lines, struct node_tag *line) {
+  vector_add(&lines, line);
+}
+
+void lines_print(struct node_tag **lines) {
+  printf("Size = %zu\n", vector_size(lines));
+}
+
+/* #include <stdio.h> */
+/* #include <stdlib.h> */
+
+/* typedef struct { */
+/*     double* array; */
+/*     size_t used; */
+/*     size_t size; */
+/* } Vector; */
+
+/* void initVector(Vector *v, size_t initialSize) { */
+/*     v->array = (double *)malloc(initialSize * sizeof(double)); */
+/*     v->used = 0; */
+/*     v->size = initialSize; */
+/* } */
+
+/* void insertSorted(Vector *v, double element) { */
+/*     // Check for reallocation needs */
+/*     if (v->used == v->size) { */
+/*         v->size *= 2; */
+/*         v->array = (double *)realloc(v->array, v->size * sizeof(double)); */
+/*     } */
+
+/*     // Binary search to find the correct insertion point */
+/*     size_t low = 0, high = v->used; */
+/*     while (low < high) { */
+/*         size_t mid = low + (high - low) / 2; */
+/*         if (v->array[mid] < element) { */
+/*             low = mid + 1; */
+/*         } else { */
+/*             high = mid; */
+/*         } */
+/*     } */
+
+/*     // Insert element at the correct position */
+/*     for (size_t i = v->used; i > low; --i) { */
+/*         v->array[i] = v->array[i - 1]; */
+/*     } */
+/*     v->array[low] = element; */
+/*     v->used++; */
+/* } */
+
+/* void freeVector(Vector *v) { */
+/*     free(v->array); */
+/*     v->array = NULL; */
+/*     v->used = v->size = 0; */
+/* } */
+
+/* int main() { */
+/*     Vector v; */
+/*     initVector(&v, 5); */
+
+/*     insertSorted(&v, 3.0); */
+/*     insertSorted(&v, 1.0); */
+/*     insertSorted(&v, 4.0); */
+/*     insertSorted(&v, 2.0); */
+
+/*     for (size_t i = 0; i < v.used; i++) { */
+/*         printf("%f ", v.array[i]); */
+/*     } */
+
+/*     freeVector(&v); */
+/*     return 0; */
+/* } */
diff --git a/lines.h b/lines.h
new file mode 100644
index 0000000..c1be860
--- /dev/null
+++ b/lines.h
@@ -0,0 +1,14 @@
+/*
+ * This file is part of Unicorn Sparkle Basic and is released under
+ * CC0 1.0 Universal License.  See LICENSE.txt file or
+ * https://creativecommons.org/publicdomain/zero/1.0/ for full license
+ * text.
+ */
+
+#include "parse.h"
+#include "vec.h"
+
+struct node_tag **lines_make();
+void lines_add(struct node_tag **lines, struct node_tag *line);
+void lines_print(struct node_tag **lines);
+
diff --git a/main.c b/main.c
index 55e628c..844cfd0 100644
--- a/main.c
+++ b/main.c
@@ -5,15 +5,18 @@
  * text.
  */
 
-#include "parse.h"
+#include "lines.h"
 #include <stdio.h>
 
 void read_loop() {
   struct node_tag *line;
+  struct node_tag **lines = lines_make();
   while (1) {
     if ((line = read_line_stdin("🦄 "))) {
       printf("It parsed 👍\n");
       printf("linum: %g\n", line->data.line.linum);
+      lines_add(lines, line);
+      lines_print(lines);
     }
   }
 }