| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import HashMap from '../../../../java/util/HashMap'
- import HalfEdge from './HalfEdge'
- export default class EdgeGraph {
- constructor() {
- EdgeGraph.constructor_.apply(this, arguments)
- }
- static constructor_() {
- this._vertexMap = new HashMap()
- }
- static isValidEdge(orig, dest) {
- const cmp = dest.compareTo(orig)
- return cmp !== 0
- }
- insert(orig, dest, eAdj) {
- const e = this.create(orig, dest)
- if (eAdj !== null)
- eAdj.insert(e)
- else
- this._vertexMap.put(orig, e)
-
- const eAdjDest = this._vertexMap.get(dest)
- if (eAdjDest !== null)
- eAdjDest.insert(e.sym())
- else
- this._vertexMap.put(dest, e.sym())
-
- return e
- }
- create(p0, p1) {
- const e0 = this.createEdge(p0)
- const e1 = this.createEdge(p1)
- e0.link(e1)
- return e0
- }
- createEdge(orig) {
- return new HalfEdge(orig)
- }
- addEdge(orig, dest) {
- if (!EdgeGraph.isValidEdge(orig, dest)) return null
- const eAdj = this._vertexMap.get(orig)
- let eSame = null
- if (eAdj !== null)
- eSame = eAdj.find(dest)
-
- if (eSame !== null)
- return eSame
-
- const e = this.insert(orig, dest, eAdj)
- return e
- }
- getVertexEdges() {
- return this._vertexMap.values()
- }
- findEdge(orig, dest) {
- const e = this._vertexMap.get(orig)
- if (e === null) return null
- return e.find(dest)
- }
- }
|