From b377cefa784d695bea4ac90cda9ba10c6c547873 Mon Sep 17 00:00:00 2001
From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com>
Date: Mon, 19 Dec 2022 18:10:39 -0600
Subject: [PATCH] testing graph structure
---
index.html | 2 +-
src/lib/Graph/GraphNode.ts | 10 +++++++---
src/lib/Graph/index.ts | 38 +++++++++++++++++++++++++++-----------
src/lib/helpers/sample.ts | 19 ++++++++++++++-----
src/main.ts | 5 +++--
5 files changed, 52 insertions(+), 22 deletions(-)
diff --git a/index.html b/index.html
index 67e0347..b48dc3b 100644
--- a/index.html
+++ b/index.html
@@ -9,7 +9,7 @@
-
Wew
+
Workshopping DS/A for Procedural Music Generation
diff --git a/src/lib/Graph/GraphNode.ts b/src/lib/Graph/GraphNode.ts
index 262af77..2b87ee7 100644
--- a/src/lib/Graph/GraphNode.ts
+++ b/src/lib/Graph/GraphNode.ts
@@ -3,10 +3,12 @@ import Edge from "./Edge";
export default class GraphNode
extends Node {
edges: Edge[]
+ id: number
- constructor(data: T, edges?: Edge[]) {
+ constructor(data: T, id: number, edges?: Edge[]) {
super(data);
this.edges = edges || new Array>();
+ this.id = id;
}
addEdge(destination: GraphNode, weight?: number) {
@@ -19,9 +21,11 @@ export default class GraphNode extends Node {
override print() {
if (this.edges.length) {
-
+ for (let edge of this.edges) {
+ console.log(`Event ${this.id} --> Event ${edge.end.id}`);
+ }
} else {
- console.log(this.data);
+ console.log(`Event ${this.id} -->`);
}
}
}
\ No newline at end of file
diff --git a/src/lib/Graph/index.ts b/src/lib/Graph/index.ts
index 2148b12..7e17ff4 100644
--- a/src/lib/Graph/index.ts
+++ b/src/lib/Graph/index.ts
@@ -1,9 +1,10 @@
import GraphNode from "./GraphNode";
export default class Graph {
- isWeighted: boolean;
- isDirected: boolean;
- points: GraphNode[];
+ private isWeighted: boolean;
+ private isDirected: boolean;
+ private points: GraphNode[];
+ private count = 0;
constructor(isWeighted: boolean, isDirected: boolean, points?: GraphNode[]) {
this.isWeighted = isWeighted;
@@ -12,17 +13,28 @@ export default class Graph {
}
createPoint(data: T) {
- const newPoint = new GraphNode(data);
+ const newPoint = new GraphNode(data, this.count);
this.points.push(newPoint);
+ this.count++;
return newPoint;
}
- addPoints(...points: GraphNode[]) {
+ addPoints(...points: T[]) {
for (let point of points) {
- this.points.push(point);
+ this.createPoint(point);
}
}
+ getPointByData(data: T): GraphNode | null {
+ for (let point of this.points) {
+ if (point.data === data) {
+ return point;
+ }
+ }
+
+ return null;
+ }
+
removePoint(target: GraphNode) {
this.points.filter((point: GraphNode) => point !== target);
}
@@ -32,12 +44,16 @@ export default class Graph {
}
addEdge(start: GraphNode, end: GraphNode, weight?: number) {
- if (this.isWeighted && weight) {
- start.addEdge(end, weight);
- end.addEdge(start, weight);
+ if (this.isDirected) {
+ this.isWeighted ? start.addEdge(end, weight) : start.addEdge(end);
} else {
- start.addEdge(end);
- end.addEdge(start);
+ if (this.isWeighted) {
+ start.addEdge(end, weight);
+ end.addEdge(start, weight);
+ } else {
+ start.addEdge(end);
+ end.addEdge(start);
+ }
}
}
diff --git a/src/lib/helpers/sample.ts b/src/lib/helpers/sample.ts
index 96d7fdf..0f450e5 100644
--- a/src/lib/helpers/sample.ts
+++ b/src/lib/helpers/sample.ts
@@ -1,6 +1,8 @@
import { ChordQuality, EventData } from "./index";
import LinkedList from "../LinkedList/index";
import ListNode from "../LinkedList/ListNode";
+import Graph from "../Graph/index";
+import GraphNode from "../Graph/GraphNode";
const firstEvent: EventData = {
root: "C",
@@ -43,16 +45,23 @@ const fourthEvent: EventData = {
const eventlist = new LinkedList();
eventlist.addManyToTail(firstEvent, secondEvent, thirdEvent, fourthEvent);
+const thirdnode = eventlist.findByData(thirdEvent) as ListNode;
+// console.log(eventlist.findByNode(thirdnode));
// eventlist.removeHead();
// eventlist.removeTail();
-
// eventlist.removeAtPosition(3);
// eventlist.removeByData(fourthEvent);
-// const thirdnode = eventlist.findByData(thirdEvent) as ListNode;
-// console.log(eventlist.findByNode(thirdnode));
+const eventgraph = new Graph(false, true);
-console.log(eventlist);
+eventgraph.addPoints(firstEvent, secondEvent, thirdEvent, fourthEvent);
-export default { eventlist }
+const secondstop = eventgraph.getPointByData(secondEvent) as GraphNode;
+const thirdstop = eventgraph.getPointByData(thirdEvent) as GraphNode;
+const fourthstop = eventgraph.getPointByData(fourthEvent) as GraphNode;
+eventgraph.addEdge(secondstop, thirdstop);
+eventgraph.addEdge(thirdstop, secondstop);
+eventgraph.addEdge(secondstop, fourthstop);
+
+export default { eventlist, eventgraph }
diff --git a/src/main.ts b/src/main.ts
index 07d7727..2042099 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,7 +1,8 @@
import data from "./lib/helpers/sample";
-const { eventlist } = data;
+const { eventlist, eventgraph } = data;
-eventlist.print();
+// eventlist.print();
+eventgraph.print();
// export default content;