org.apache.lucene.spatial.prefix.tree

Class LegacyCell

  • All Implemented Interfaces:
    Cell
    Direct Known Subclasses:
    QuadPrefixTree.QuadCell


    public abstract class LegacyCell
    extends Object
    implements Cell
    The base for the original two SPT's: Geohash and Quad. Don't subclass this for new SPTs.
    • Field Detail

      • bytes

        protected byte[] bytes
      • b_off

        protected int b_off
      • b_len

        protected int b_len
      • isLeaf

        protected boolean isLeaf
      • shapeRel

        protected SpatialRelation shapeRel
        When set via getSubCells(filter), it is the relationship between this cell and the given shape filter. Doesn't participate in shape equality.
      • shape

        protected Shape shape
    • Constructor Detail

      • LegacyCell

        protected LegacyCell(byte[] bytes,
                             int off,
                             int len)
        Warning: Refers to the same bytes (no copy). If setLeaf() is subsequently called then it may modify bytes.
    • Method Detail

      • getShapeRel

        public 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
      • 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
      • 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
      • 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
      • getNextLevelCells

        public CellIterator getNextLevelCells(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.
      • getSubCell

        protected abstract LegacyCell getSubCell(Point p)
        Performant implementations are expected to implement this efficiently by considering the current cell's boundary.

        Precondition: Never called when getLevel() == maxLevel. Precondition: this.getShape().relate(p) != DISJOINT.

      • getSubCells

        protected abstract Collection<CellgetSubCells()
        Gets the cells at the next grid cell level that covers this cell. Precondition: Never called when getLevel() == maxLevel.
        Returns:
        A set of cells (no dups), sorted, modifiable, not empty, not null.
      • 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
      • compare

        protected static int compare(byte[] aBytes,
                                     int aUpto,
                                     int a_length,
                                     byte[] bBytes,
                                     int bUpto,
                                     int b_length)
        Copied from BytesRef.compareTo(BytesRef). This is to avoid creating a BytesRef.