Class NumberRangePrefixTree.NRCell

java.lang.Object
org.apache.lucene.spatial.prefix.tree.CellIterator
org.apache.lucene.spatial.prefix.tree.NumberRangePrefixTree.NRCell
All Implemented Interfaces:
Cloneable, Comparable<NumberRangePrefixTree.UnitNRShape>, Iterator<Cell>, Cell, NumberRangePrefixTree.NRShape, NumberRangePrefixTree.UnitNRShape, org.locationtech.spatial4j.shape.Shape
Enclosing class:
NumberRangePrefixTree

protected class NumberRangePrefixTree.NRCell extends CellIterator implements Cell, NumberRangePrefixTree.UnitNRShape
Most of the PrefixTree implementation is in this one class, which is both the Cell, the CellIterator, and the Shape to reduce object allocation. It's implemented as a re-used array/stack of Cells at adjacent levels, that all have a reference back to the cell array to traverse. They also share a common BytesRef for the term.
NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
  • Method Details

    • getLevel

      public int getLevel()
      Description copied from interface: Cell
      Level 0 is the world (and has no parent), from then on a higher level means a smaller cell than the level before it.
      Specified by:
      getLevel in interface Cell
      Specified by:
      getLevel in interface NumberRangePrefixTree.UnitNRShape
    • getShapeRel

      public org.locationtech.spatial4j.shape.SpatialRelation getShapeRel()
      Description copied from interface: Cell
      Gets the relationship this cell has with the shape from which it was filtered from, assuming it came from a CellIterator. Arguably it belongs there but it's very convenient here.
      Specified by:
      getShapeRel in interface Cell
    • setShapeRel

      public void setShapeRel(org.locationtech.spatial4j.shape.SpatialRelation rel)
      Description copied from interface: Cell
      Specified by:
      setShapeRel in interface Cell
    • isLeaf

      public boolean isLeaf()
      Description copied from interface: Cell
      Some cells are flagged as leaves, which are indexed as such. A leaf cell is either within some shape or it both intersects and the cell is at an accuracy threshold such that no smaller cells for the shape will be represented.
      Specified by:
      isLeaf in interface Cell
    • setLeaf

      public void setLeaf()
      Description copied from interface: Cell
      Set this cell to be a leaf. Warning: never call on a cell initialized to reference the same bytes from termsEnum, which should be treated as immutable. Note: not supported at level 0.
      Specified by:
      setLeaf in interface Cell
    • getShape

      Description copied from interface: Cell
      Gets the shape for this cell; typically a Rectangle.
      Specified by:
      getShape in interface Cell
    • getTokenBytesNoLeaf

      public BytesRef getTokenBytesNoLeaf(BytesRef result)
      Description copied from interface: Cell
      Returns the bytes for this cell, without a leaf set. The bytes should sort before Cell.getTokenBytesWithLeaf(org.apache.lucene.util.BytesRef). The result param is used to save object allocation, though its bytes aren't used.
      Specified by:
      getTokenBytesNoLeaf in interface Cell
      Parameters:
      result - where the result goes, or null to create new
    • getTokenBytesWithLeaf

      public BytesRef getTokenBytesWithLeaf(BytesRef result)
      Description copied from interface: Cell
      Returns the bytes for this cell, with a leaf byte if this is a leaf cell. The result param is used to save object allocation, though its bytes aren't used.
      Specified by:
      getTokenBytesWithLeaf in interface Cell
      Parameters:
      result - where the result goes, or null to create new
    • isPrefixOf

      public boolean isPrefixOf(Cell c)
      Description copied from interface: Cell
      Returns if the target term is within/underneath this cell; not necessarily a direct descendant.
      Specified by:
      isPrefixOf in interface Cell
      Parameters:
      c - the term
    • compareToNoLeaf

      public int compareToNoLeaf(Cell fromCell)
      Description copied from interface: Cell
      Equivalent to this.getTokenBytesNoLeaf(null).compareTo(fromCell.getTokenBytesNoLeaf(null)).
      Specified by:
      compareToNoLeaf in interface Cell
    • getNextLevelCells

      public CellIterator getNextLevelCells(org.locationtech.spatial4j.shape.Shape shapeFilter)
      Description copied from interface: Cell
      Gets the cells at the next grid cell level underneath this one, optionally filtered by shapeFilter. The returned cells should have Cell.getShapeRel() set to their relation with shapeFilter. In addition, for non-points Cell.isLeaf() must be true when that relation is WITHIN.

      IMPORTANT: Cells returned from this iterator can be shared, as well as the bytes.

      Precondition: Never called when getLevel() == maxLevel.

      Specified by:
      getNextLevelCells in interface Cell
      Parameters:
      shapeFilter - an optional filter for the returned cells.
      Returns:
      A set of cells (no dups), sorted. Not Modifiable.
    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface Iterator<Cell>
    • getValAtLevel

      public int getValAtLevel(int level)
      Description copied from interface: NumberRangePrefixTree.UnitNRShape
      Gets the value at the specified level of this unit. level must be >= 0 and <= getLevel().
      Specified by:
      getValAtLevel in interface NumberRangePrefixTree.UnitNRShape
    • getShapeAtLevel

      public NumberRangePrefixTree.NRCell getShapeAtLevel(int level)
      Description copied from interface: NumberRangePrefixTree.UnitNRShape
      Gets an ancestor at the specified level. It shares state, so you may want to clone() it.
      Specified by:
      getShapeAtLevel in interface NumberRangePrefixTree.UnitNRShape
    • roundToLevel

      public NumberRangePrefixTree.UnitNRShape roundToLevel(int targetLevel)
      Description copied from interface: NumberRangePrefixTree.NRShape
      Returns this shape rounded to the target level. If we are already more course than the level then the shape is simply returned. The result may refer to internal state of the argument so you may want to clone it.
      Specified by:
      roundToLevel in interface NumberRangePrefixTree.NRShape
      Specified by:
      roundToLevel in interface NumberRangePrefixTree.UnitNRShape
    • relate

      public org.locationtech.spatial4j.shape.SpatialRelation relate(org.locationtech.spatial4j.shape.Shape shape)
      Specified by:
      relate in interface org.locationtech.spatial4j.shape.Shape
    • relate

      public org.locationtech.spatial4j.shape.SpatialRelation relate(NumberRangePrefixTree.UnitNRShape lv)
    • relate

      public org.locationtech.spatial4j.shape.SpatialRelation relate(NumberRangePrefixTree.SpanUnitsNRShape spanShape)
    • clone

      Description copied from interface: NumberRangePrefixTree.UnitNRShape
      Deep clone
      Specified by:
      clone in interface NumberRangePrefixTree.UnitNRShape
      Overrides:
      clone in class Object
    • compareTo

      public int compareTo(NumberRangePrefixTree.UnitNRShape o)
      Specified by:
      compareTo in interface Comparable<NumberRangePrefixTree.UnitNRShape>
    • getBoundingBox

      public org.locationtech.spatial4j.shape.Rectangle getBoundingBox()
      Specified by:
      getBoundingBox in interface org.locationtech.spatial4j.shape.Shape
    • hasArea

      public boolean hasArea()
      Specified by:
      hasArea in interface org.locationtech.spatial4j.shape.Shape
    • getArea

      public double getArea(org.locationtech.spatial4j.context.SpatialContext ctx)
      Specified by:
      getArea in interface org.locationtech.spatial4j.shape.Shape
    • getCenter

      public org.locationtech.spatial4j.shape.Point getCenter()
      Specified by:
      getCenter in interface org.locationtech.spatial4j.shape.Shape
    • getBuffered

      public org.locationtech.spatial4j.shape.Shape getBuffered(double distance, org.locationtech.spatial4j.context.SpatialContext ctx)
      Specified by:
      getBuffered in interface org.locationtech.spatial4j.shape.Shape
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface org.locationtech.spatial4j.shape.Shape
    • equals

      public boolean equals(Object obj)
      Specified by:
      equals in interface org.locationtech.spatial4j.shape.Shape
      Overrides:
      equals in class Object
    • getContext

      public org.locationtech.spatial4j.context.SpatialContext getContext()
      Specified by:
      getContext in interface org.locationtech.spatial4j.shape.Shape
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Description copied from interface: NumberRangePrefixTree.NRShape
      The result should be parseable by NumberRangePrefixTree.parseShape(String).
      Specified by:
      toString in interface NumberRangePrefixTree.NRShape
      Overrides:
      toString in class Object
    • toStringDebug

      public String toStringDebug()
      Configure your IDE to use this.