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;