Root.js 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. import NodeBase from './NodeBase'
  2. import Node from './Node'
  3. import IntervalSize from '../quadtree/IntervalSize'
  4. import Assert from '../../util/Assert'
  5. export default class Root extends NodeBase {
  6. constructor() {
  7. super()
  8. }
  9. insert(itemInterval, item) {
  10. const index = NodeBase.getSubnodeIndex(itemInterval, Root.origin)
  11. if (index === -1) {
  12. this.add(item)
  13. return null
  14. }
  15. const node = this._subnode[index]
  16. if (node === null || !node.getInterval().contains(itemInterval)) {
  17. const largerNode = Node.createExpanded(node, itemInterval)
  18. this._subnode[index] = largerNode
  19. }
  20. this.insertContained(this._subnode[index], itemInterval, item)
  21. }
  22. isSearchMatch(interval) {
  23. return true
  24. }
  25. insertContained(tree, itemInterval, item) {
  26. Assert.isTrue(tree.getInterval().contains(itemInterval))
  27. const isZeroArea = IntervalSize.isZeroWidth(itemInterval.getMin(), itemInterval.getMax())
  28. let node = null
  29. if (isZeroArea) node = tree.find(itemInterval); else node = tree.getNode(itemInterval)
  30. node.add(item)
  31. }
  32. }
  33. Root.origin = 0.0