DirectedEdgeStar.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import Collections from '../../../../java/util/Collections'
  2. import DirectedEdge from './DirectedEdge'
  3. import ArrayList from '../../../../java/util/ArrayList'
  4. import Edge from './Edge'
  5. export default class DirectedEdgeStar {
  6. constructor() {
  7. DirectedEdgeStar.constructor_.apply(this, arguments)
  8. }
  9. static constructor_() {
  10. this._outEdges = new ArrayList()
  11. this._sorted = false
  12. }
  13. getNextEdge(dirEdge) {
  14. const i = this.getIndex(dirEdge)
  15. return this._outEdges.get(this.getIndex(i + 1))
  16. }
  17. getCoordinate() {
  18. const it = this.iterator()
  19. if (!it.hasNext()) return null
  20. const e = it.next()
  21. return e.getCoordinate()
  22. }
  23. iterator() {
  24. this.sortEdges()
  25. return this._outEdges.iterator()
  26. }
  27. sortEdges() {
  28. if (!this._sorted) {
  29. Collections.sort(this._outEdges)
  30. this._sorted = true
  31. }
  32. }
  33. remove(de) {
  34. this._outEdges.remove(de)
  35. }
  36. getEdges() {
  37. this.sortEdges()
  38. return this._outEdges
  39. }
  40. getNextCWEdge(dirEdge) {
  41. const i = this.getIndex(dirEdge)
  42. return this._outEdges.get(this.getIndex(i - 1))
  43. }
  44. getIndex() {
  45. if (arguments[0] instanceof Edge) {
  46. const edge = arguments[0]
  47. this.sortEdges()
  48. for (let i = 0; i < this._outEdges.size(); i++) {
  49. const de = this._outEdges.get(i)
  50. if (de.getEdge() === edge) return i
  51. }
  52. return -1
  53. } else if (arguments[0] instanceof DirectedEdge) {
  54. const dirEdge = arguments[0]
  55. this.sortEdges()
  56. for (let i = 0; i < this._outEdges.size(); i++) {
  57. const de = this._outEdges.get(i)
  58. if (de === dirEdge) return i
  59. }
  60. return -1
  61. } else if (Number.isInteger(arguments[0])) {
  62. const i = arguments[0]
  63. let modi = i % this._outEdges.size()
  64. if (modi < 0) modi += this._outEdges.size()
  65. return modi
  66. }
  67. }
  68. add(de) {
  69. this._outEdges.add(de)
  70. this._sorted = false
  71. }
  72. getDegree() {
  73. return this._outEdges.size()
  74. }
  75. }