diff --git a/src/Model/Edge.ts b/src/Model/Edge.ts index 3eef8ba..92faa77 100644 --- a/src/Model/Edge.ts +++ b/src/Model/Edge.ts @@ -5,8 +5,8 @@ export class Edge { public name: string public node!: TreeNode - public source: TreeNode | undefined - public target: TreeNode | undefined + public source?: TreeNode | undefined + private cachedHash?: string constructor(name: string) { this.name = name @@ -17,12 +17,16 @@ export class Edge { } public hash(): string { - let previousHash = this.source ? this.source.sourceEdge.hash() : '' - return 'H' + sha1(previousHash + this.name) + if (!this.cachedHash) { + let previousHash = (this.source && this.source.sourceEdge) ? this.source.sourceEdge.hash() : '' + this.cachedHash = 'H' + sha1(previousHash + this.name) + } + + return this.cachedHash } public firstEdge(): Edge { - if (this.source) { + if (this.source && this.source.sourceEdge) { return this.source.sourceEdge.firstEdge() } else { return this diff --git a/src/Model/Tree.ts b/src/Model/Tree.ts index 155ef1e..2f8bdf0 100644 --- a/src/Model/Tree.ts +++ b/src/Model/Tree.ts @@ -2,8 +2,6 @@ import { Edge, TreeNode } from './' export class Tree extends TreeNode { constructor() { - const rootEdge = new Edge('') - super(rootEdge, undefined) - rootEdge.node = this + super(undefined, undefined) } } diff --git a/src/Model/TreeNode.ts b/src/Model/TreeNode.ts index 1e356cf..b1e4a3d 100644 --- a/src/Model/TreeNode.ts +++ b/src/Model/TreeNode.ts @@ -3,15 +3,17 @@ import { EventEmitter } from 'events' export class TreeNode extends EventEmitter { public sourceEdge?: Edge - public value: any | null | undefined = undefined + public value?: any | null public edges: {[s: string]: Edge} = {} public collapsed = false - constructor(sourceEdge: Edge, value: any) { + constructor(sourceEdge?: Edge, value?: any) { super() - this.sourceEdge = sourceEdge - sourceEdge.target = this + if (sourceEdge) { + this.sourceEdge = sourceEdge + sourceEdge.target = this + } this.value = value } diff --git a/src/Model/TreeNodeFactory.ts b/src/Model/TreeNodeFactory.ts index 549b1a9..3255f90 100644 --- a/src/Model/TreeNodeFactory.ts +++ b/src/Model/TreeNodeFactory.ts @@ -25,7 +25,7 @@ export abstract class TreeNodeFactory { let leaf = reversed[0].node let sourceTree = new Tree() - sourceTree.addEdge(leaf.firstNode().sourceEdge) + sourceTree.updateWithNode(leaf.firstNode()) return leaf }