N
- Node typeE
- Entry typepublic abstract class AbstractRStarTree<N extends AbstractRStarTreeNode<N,E>,E extends SpatialEntry> extends SpatialIndexTree<N,E>
Modifier and Type | Field and Description |
---|---|
protected BulkSplit |
bulkSplitter
The strategy for bulk load.
|
int |
distanceCalcs
For counting the number of distance computations.
|
protected static boolean |
extraIntegrityChecks
Development flag: This will enable some extra integrity checks on the tree.
|
protected int |
height
The height of this R*-Tree.
|
protected InsertionStrategy |
insertionStrategy
The insertion strategy to use
|
(package private) E |
lastInsertedEntry
The last inserted entry
|
protected SplitStrategy<? super E> |
nodeSplitter
The split strategy
|
protected Map<Integer,Boolean> |
reinsertions
Contains a boolean for each level of this R*-Tree that indicates if there
was already a reinsert operation in this level during the current insert /
delete operation.
|
dirCapacity, dirMinimum, initialized, leafCapacity, leafMinimum
Constructor and Description |
---|
AbstractRStarTree(PageFile<N> pagefile,
BulkSplit bulkSplitter,
InsertionStrategy insertionStrategy)
Constructor
|
Modifier and Type | Method and Description |
---|---|
protected void |
adjustTree(IndexTreePath<E> subtree)
Adjusts the tree after insertion of some nodes.
|
protected abstract void |
bulkLoad(List<E> entrys)
Performs a bulk load on this RTree with the specified data.
|
boolean |
canBulkLoad()
Test whether a bulk insert is still possible.
|
protected IndexTreePath<E> |
choosePath(IndexTreePath<E> subtree,
SpatialComparable mbr,
int level)
Chooses the best path of the specified subtree for insertion of the given
mbr at the specified level.
|
protected void |
clearReinsertions()
Clears the reinsertions.
|
protected abstract int |
computeHeight()
Computes the height of this RTree.
|
private void |
condenseTree(IndexTreePath<E> subtree,
Stack<N> stack)
Condenses the tree after deletion of some nodes.
|
protected TreeIndexPathComponent<E> |
containedTest(N node,
SpatialComparable mbr)
Test on whether or not any child of
node contains
mbr . |
protected List<N> |
createBulkLeafNodes(List<E> objects)
Creates and returns the leaf nodes for bulk load.
|
protected abstract E |
createNewDirectoryEntry(N node)
Creates a new directory entry representing the specified node.
|
protected IndexTreePath<E> |
createNewRoot(N oldRoot,
N newNode)
Creates a new root node that points to the two specified child nodes and
return the path to the new root.
|
protected void |
deletePath(IndexTreePath<E> deletionPath)
Delete a leaf at a given path - deletions for non-leaves are not supported!
|
void |
doExtraIntegrityChecks()
Perform additional integrity checks.
|
protected IndexTreePath<E> |
findPathToObject(IndexTreePath<E> subtree,
SpatialComparable mbr,
DBID id)
Returns the path to the leaf entry in the specified subtree that represents
the data object with the specified mbr and id.
|
int |
getHeight()
Returns the height of this R*-Tree.
|
private void |
getLeafNodes(N node,
List<E> result,
int currentLevel)
Determines the entries pointing to the leaf nodes of the specified subtree
|
private TreeIndexPathComponent<E> |
getLeastEnlargement(N node,
SpatialComparable mbr)
Returns the path information of the entry of the specified node with the
least enlargement if the given mbr would be inserted into.
|
List<E> |
getLeaves()
Returns a list of entries pointing to the leaf entries of this spatial
index.
|
protected abstract boolean |
hasOverflow(N node)
Returns true if in the specified node an overflow occurred, false
otherwise.
|
protected abstract boolean |
hasUnderflow(N node)
Returns true if in the specified node an underflow occurred, false
otherwise.
|
protected void |
initializeCapacities(E exampleLeaf)
Determines the maximum and minimum number of entries in a node.
|
void |
initializeFromFile(TreeIndexHeader header,
PageFile<N> file)
Initializes this R*-Tree from an existing persistent file.
|
protected void |
insertDirectoryEntry(E entry,
int level)
Inserts the specified directory entry at the specified level into this
R*-Tree.
|
void |
insertLeaf(E leaf)
Add a new leaf entry to the tree.
|
protected void |
insertLeafEntry(E entry)
Inserts the specified leaf entry into this R*-Tree.
|
private N |
overflowTreatment(N node,
IndexTreePath<E> path)
Treatment of overflow in the specified node: if the node is not the root
node and this is the first call of overflowTreatment in the given level
during insertion the specified node will be reinserted, otherwise the node
will be split.
|
protected void |
reInsert(N node,
int level,
IndexTreePath<E> path)
Reinserts the specified node at the specified level.
|
protected void |
setHeight(int height)
Sets the height of this R*-Tree.
|
private N |
split(N node)
Splits the specified node and returns the newly created split node.
|
String |
toString()
Returns a string representation of this R*-Tree.
|
createEmptyRoot, createHeader, createNewDirectoryNode, createNewLeafNode, createRootEntry, deleteNode, getFile, getLogger, getNode, getNode, getPageFileStatistics, getPageID, getPageSize, getRoot, getRootEntry, getRootID, getRootPath, initialize, initialize, isRoot, postDelete, preInsert, writeNode
protected static final boolean extraIntegrityChecks
protected final Map<Integer,Boolean> reinsertions
protected int height
public int distanceCalcs
E extends SpatialEntry lastInsertedEntry
protected BulkSplit bulkSplitter
protected SplitStrategy<? super E extends SpatialEntry> nodeSplitter
protected final InsertionStrategy insertionStrategy
public AbstractRStarTree(PageFile<N> pagefile, BulkSplit bulkSplitter, InsertionStrategy insertionStrategy)
pagefile
- Page filebulkSplitter
- bulk load strategyinsertionStrategy
- the strategy for finding the insertion candidate.protected IndexTreePath<E> findPathToObject(IndexTreePath<E> subtree, SpatialComparable mbr, DBID id)
subtree
- the subtree to be testedmbr
- the mbr to look forid
- the id to look forpublic void insertLeaf(E leaf)
SpatialIndexTree
insertLeaf
in class SpatialIndexTree<N extends AbstractRStarTreeNode<N,E>,E extends SpatialEntry>
leaf
- Leaf entryprotected void insertLeafEntry(E entry)
entry
- the leaf entry to be insertedprotected void insertDirectoryEntry(E entry, int level)
entry
- the directory entry to be insertedlevel
- the level at which the directory entry is to be insertedprotected void deletePath(IndexTreePath<E> deletionPath)
deletionPath
- Path to deletepublic void initializeFromFile(TreeIndexHeader header, PageFile<N> file)
initializeFromFile
in class IndexTree<N extends AbstractRStarTreeNode<N,E>,E extends SpatialEntry>
protected void initializeCapacities(E exampleLeaf)
IndexTree
initializeCapacities
in class IndexTree<N extends AbstractRStarTreeNode<N,E>,E extends SpatialEntry>
exampleLeaf
- an object that will be stored in the indexpublic boolean canBulkLoad()
protected List<N> createBulkLeafNodes(List<E> objects)
objects
- the objects to be insertedprotected abstract void bulkLoad(List<E> entrys)
public final int getHeight()
protected void setHeight(int height)
height
- the height to be setprotected abstract int computeHeight()
protected void clearReinsertions()
protected abstract boolean hasOverflow(N node)
node
- the node to be tested for overflowprotected abstract boolean hasUnderflow(N node)
node
- the node to be tested for underflowprotected abstract E createNewDirectoryEntry(N node)
node
- the node to be represented by the new entryprotected IndexTreePath<E> createNewRoot(N oldRoot, N newNode)
oldRoot
- the old root of this RTreenewNode
- the new split nodeprotected TreeIndexPathComponent<E> containedTest(N node, SpatialComparable mbr)
node
contains
mbr
. If there are several containing children, the child with
the minimum volume is chosen in order to get compact pages.node
- subtreembr
- MBR to test fornode
containing mbr
with the
minimum volume or null
if none existsprotected IndexTreePath<E> choosePath(IndexTreePath<E> subtree, SpatialComparable mbr, int level)
subtree
- the subtree to be tested for insertionmbr
- the mbr to be insertedlevel
- the level at which the mbr should be inserted (level 1
indicates leaf-level)private TreeIndexPathComponent<E> getLeastEnlargement(N node, SpatialComparable mbr)
node
- the node which children have to be testedmbr
- the mbr of the node to be insertedprivate N overflowTreatment(N node, IndexTreePath<E> path)
node
- the node where an overflow occurredpath
- the path to the specified nodeprivate N split(N node)
node
- the node to be splitprotected void reInsert(N node, int level, IndexTreePath<E> path)
node
- the node to be reinsertedlevel
- the level of the nodepath
- the path to the nodeprotected void adjustTree(IndexTreePath<E> subtree)
subtree
- the subtree to be adjustedprivate void condenseTree(IndexTreePath<E> subtree, Stack<N> stack)
subtree
- the subtree to be condensedstack
- the stack holding the nodes to be reinserted after the tree
has been condensedpublic final List<E> getLeaves()
SpatialIndexTree
getLeaves
in class SpatialIndexTree<N extends AbstractRStarTreeNode<N,E>,E extends SpatialEntry>
private void getLeafNodes(N node, List<E> result, int currentLevel)
node
- the subtreeresult
- the result to store the ids incurrentLevel
- the level of the node in the R-Treepublic void doExtraIntegrityChecks()