Remove root nodes source edge
This commit is contained in:
@@ -5,8 +5,8 @@ export class Edge {
|
|||||||
public name: string
|
public name: string
|
||||||
|
|
||||||
public node!: TreeNode
|
public node!: TreeNode
|
||||||
public source: TreeNode | undefined
|
public source?: TreeNode | undefined
|
||||||
public target: TreeNode | undefined
|
private cachedHash?: string
|
||||||
|
|
||||||
constructor(name: string) {
|
constructor(name: string) {
|
||||||
this.name = name
|
this.name = name
|
||||||
@@ -17,12 +17,16 @@ export class Edge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public hash(): string {
|
public hash(): string {
|
||||||
let previousHash = this.source ? this.source.sourceEdge.hash() : ''
|
if (!this.cachedHash) {
|
||||||
return 'H' + sha1(previousHash + this.name)
|
let previousHash = (this.source && this.source.sourceEdge) ? this.source.sourceEdge.hash() : ''
|
||||||
|
this.cachedHash = 'H' + sha1(previousHash + this.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.cachedHash
|
||||||
}
|
}
|
||||||
|
|
||||||
public firstEdge(): Edge {
|
public firstEdge(): Edge {
|
||||||
if (this.source) {
|
if (this.source && this.source.sourceEdge) {
|
||||||
return this.source.sourceEdge.firstEdge()
|
return this.source.sourceEdge.firstEdge()
|
||||||
} else {
|
} else {
|
||||||
return this
|
return this
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ import { Edge, TreeNode } from './'
|
|||||||
|
|
||||||
export class Tree extends TreeNode {
|
export class Tree extends TreeNode {
|
||||||
constructor() {
|
constructor() {
|
||||||
const rootEdge = new Edge('')
|
super(undefined, undefined)
|
||||||
super(rootEdge, undefined)
|
|
||||||
rootEdge.node = this
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,15 +3,17 @@ import { EventEmitter } from 'events'
|
|||||||
|
|
||||||
export class TreeNode extends EventEmitter {
|
export class TreeNode extends EventEmitter {
|
||||||
public sourceEdge?: Edge
|
public sourceEdge?: Edge
|
||||||
public value: any | null | undefined = undefined
|
public value?: any | null
|
||||||
public edges: {[s: string]: Edge} = {}
|
public edges: {[s: string]: Edge} = {}
|
||||||
public collapsed = false
|
public collapsed = false
|
||||||
|
|
||||||
constructor(sourceEdge: Edge, value: any) {
|
constructor(sourceEdge?: Edge, value?: any) {
|
||||||
super()
|
super()
|
||||||
|
|
||||||
|
if (sourceEdge) {
|
||||||
this.sourceEdge = sourceEdge
|
this.sourceEdge = sourceEdge
|
||||||
sourceEdge.target = this
|
sourceEdge.target = this
|
||||||
|
}
|
||||||
this.value = value
|
this.value = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export abstract class TreeNodeFactory {
|
|||||||
let leaf = reversed[0].node
|
let leaf = reversed[0].node
|
||||||
|
|
||||||
let sourceTree = new Tree()
|
let sourceTree = new Tree()
|
||||||
sourceTree.addEdge(leaf.firstNode().sourceEdge)
|
sourceTree.updateWithNode(leaf.firstNode())
|
||||||
|
|
||||||
return leaf
|
return leaf
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user