Package org.apache.lucene.spatial.prefix.tree

## 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.

- - ### Field Summary

    - ### Fields inherited from class org.apache.lucene.spatial.prefix.tree.CellIterator

      `nextCell, thisCell`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `NumberRangePrefixTree.UnitNRShape` | `clone()` | Deep clone
    `int` | `compareTo​(NumberRangePrefixTree.UnitNRShape o)` |
    `int` | `compareToNoLeaf​(Cell fromCell)` | Equivalent to `this.getTokenBytesNoLeaf(null).compareTo(fromCell.getTokenBytesNoLeaf(null))`.
    `boolean` | `equals​(Object obj)` |
    `double` | `getArea​(org.locationtech.spatial4j.context.SpatialContext ctx)` |
    `org.locationtech.spatial4j.shape.Rectangle` | `getBoundingBox()` |
    `org.locationtech.spatial4j.shape.Shape` | `getBuffered​(double distance, org.locationtech.spatial4j.context.SpatialContext ctx)` |
    `org.locationtech.spatial4j.shape.Point` | `getCenter()` |
    `org.locationtech.spatial4j.context.SpatialContext` | `getContext()` |
    `int` | `getLevel()` | Level 0 is the world (and has no parent), from then on a higher level means a smaller cell than the level before it.
    `CellIterator` | `getNextLevelCells​(org.locationtech.spatial4j.shape.Shape shapeFilter)` | Gets the cells at the next grid cell level underneath this one, optionally filtered by `shapeFilter`.
    `NumberRangePrefixTree.UnitNRShape` | `getShape()` | Gets the shape for this cell; typically a Rectangle.
    `NumberRangePrefixTree.NRCell` | `getShapeAtLevel​(int level)` | Gets an ancestor at the specified level.
    `org.locationtech.spatial4j.shape.SpatialRelation` | `getShapeRel()` | Gets the relationship this cell has with the shape from which it was filtered from, assuming it came from a `CellIterator`.
    `BytesRef` | `getTokenBytesNoLeaf​(BytesRef result)` | Returns the bytes for this cell, without a leaf set.
    `BytesRef` | `getTokenBytesWithLeaf​(BytesRef result)` | Returns the bytes for this cell, with a leaf byte if this is a leaf cell.
    `int` | `getValAtLevel​(int level)` | Gets the value at the specified level of this unit.
    `boolean` | `hasArea()` |
    `int` | `hashCode()` |
    `boolean` | `hasNext()` |
    `boolean` | `isEmpty()` |
    `boolean` | `isLeaf()` | Some cells are flagged as leaves, which are indexed as such.
    `boolean` | `isPrefixOf​(Cell c)` | Returns if the target term is within/underneath this cell; not necessarily a direct descendant.
    `org.locationtech.spatial4j.shape.SpatialRelation` | `relate​(NumberRangePrefixTree.SpanUnitsNRShape spanShape)` |
    `org.locationtech.spatial4j.shape.SpatialRelation` | `relate​(NumberRangePrefixTree.UnitNRShape lv)` |
    `org.locationtech.spatial4j.shape.SpatialRelation` | `relate​(org.locationtech.spatial4j.shape.Shape shape)` |
    `NumberRangePrefixTree.UnitNRShape` | `roundToLevel​(int targetLevel)` | Returns this shape rounded to the target level.
    `void` | `setLeaf()` | Set this cell to be a leaf.
    `void` | `setShapeRel​(org.locationtech.spatial4j.shape.SpatialRelation rel)` | See `Cell.getShapeRel()`.
    `String` | `toString()` | The result should be parseable by `NumberRangePrefixTree.parseShape(String)`.
    `String` | `toStringDebug()` | Configure your IDE to use this.

    - ### Methods inherited from class org.apache.lucene.spatial.prefix.tree.CellIterator

      `next, nextFrom, remove, thisCell`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.util.Iterator

      `forEachRemaining`

- - ### Method Detail

    - #### 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`
      See `Cell.getShapeRel()`.
      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

          public NumberRangePrefixTree.UnitNRShape 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

          public NumberRangePrefixTree.UnitNRShape 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.