Nodes are defined by a hyperCube area as well as a list of children,
as well as a pointer next
to the corresponding node in the
next highest tree.
Nodes are defined by a hyperCube area as well as a list of children,
as well as a pointer next
to the corresponding node in the
next highest tree. A Branch
also provides various search methods.
Utility trait which elements the rightward search findPN
.
Utility trait which elements the rightward search findPN
.
A leaf in the octree, carrying a map entry in the form of a point and associated value.
A leaf in the octree, carrying a map entry in the form of a point and associated value. Note that a single instance of a leaf is used across the levels of the octree! That means that multiple child pointers may go to the same leaf, while the parent of a leaf always points into the highest level octree that the leaf resides in, according to the skiplist.
A left tree node implementation provides more specialized child nodes
of type LeftChild
.
A left tree node implementation provides more specialized child nodes
of type LeftChild
. It furthermore defines a resolution method
findImmediateLeaf
which is typically called after arriving here
from a findP0
call.
A tree element in Q0 has markers for the in-order traversal.
A tree element in Q0 has markers for the in-order traversal. NOT ANYMORE
A common trait used in pattern matching, comprised of Leaf
and LeftChildBranch
.
A common trait used in pattern matching, comprised of Leaf
and LeftChildBranch
.
A node is an object that can be stored in a orthant of a branch.
A node is an object that can be stored in a orthant of a branch.
An inner non empty tree element has a mutable parent node.
A right tree node implementation provides more specialized child nodes
of type RightChild
.
A right tree node implementation provides more specialized child nodes
of type RightChild
. It furthermore defines the node in Qi-1 via the
prev
method.
A common trait used in pattern matching, comprised of Leaf
and RightChildBranch
.
A common trait used in pattern matching, comprised of Leaf
and RightChildBranch
.
The base square of the tree.
The base square of the tree. No point can lie outside this square (or hyper-cube).
A function which maps an element (possibly through transactional access) to a geometric point coordinate.
A function which maps an element (possibly through transactional access) to a geometric point coordinate.
The space (i.e., resolution and dimensionality) underlying the tree.
The space (i.e., resolution and dimensionality) underlying the tree.
Adds an element to the tree.
Adds an element to the tree. If there is already an element stored at the point represented by the new element, it will be replaced.
Removes an element from the tree.
Removes an element from the tree. If the element is not found, this operation does nothing.
Adds an element to the tree (or replaces a given element with the same point location).
Adds an element to the tree (or replaces a given element with the same point location).
the element to add
true
if the element is new in the tree. If a previous entry with the
same point view is overwritten, this is true
if the elements were
not equal, false
if they were equal
Tests whether the tree contains an element.
Tests whether the tree contains an element.
Returns a string debug representation of the octree.
Returns a string debug representation of the octree.
Queries the element at a given point.
Queries the element at a given point.
the point to look up.
Some
element if found, None
if the point was not present.
Queries whether an element is stored at a given point.
Queries whether an element is stored at a given point.
the point to query
true
if an element is associated with the query point, false
otherwise
Tests whether the tree is empty (true
) or whether it contains any elements (false
).
Tests whether the tree is empty (true
) or whether it contains any elements (false
).
An Iterator
which iterates over the points stored
in the octree, using an in-order traversal directed
by the orthant indices of the nodes of the tree.
An Iterator
which iterates over the points stored
in the octree, using an in-order traversal directed
by the orthant indices of the nodes of the tree.
Great care has to be taken as the iterator might be corrupted if the tree is successively changed before the iterator is exhausted.
Reports the nearest neighbor entry with respect to a given point.
Reports the nearest neighbor entry with respect to a given point.
Note: There is a potential numeric overflow if the
squared distance of the query point towards the
furthest corner of the tree's root hyper-cube exceeds 63 bits.
For a root IntSquare(0x40000000, 0x40000000, 0x40000000)
, this
happens for example for any point going more towards north-west
than IntPoint2DLike(-1572067139, -1572067139)
.
the point of which the nearest neighbor is to be found
(description missing)
NoSuchElementException
if the tree is empty
Same as nearestNeighbor
but returning an Option
, thus not throwing an exception
if no neighbor is found.
Same as nearestNeighbor
but returning an Option
, thus not throwing an exception
if no neighbor is found.
Reports the number of decimation levels in the tree.
Reports the number of decimation levels in the tree.
The number of orthants in each hyperCube.
The number of orthants in each hyperCube. This is equal
to 1 << numDimensions
and gives the upper bound
of the index to QNode.child()
.
Removes an element from the tree
Removes an element from the tree
the element to remove
true
if the element had been found in the tree and thus been removed.
Removes the element stored under a given point view.
Removes the element stored under a given point view.
the location of the element to remove
the element removed, wrapped as Some
, or None
if no element was
found for the given point.
Queries the number of leaves in the tree.
Queries the number of leaves in the tree. This may be a very costly action, so it is recommended to only use it for debugging purposes.
Converts the tree into a linearized indexed sequence.
Converts the tree into a linearized indexed sequence. This is not necessarily a very efficient method, and should usually just be used for debugging.
Converts the tree into a linearized list.
Converts the tree into a linearized list. This is not necessarily a very efficient method, and should usually just be used for debugging.
Converts the tree into a linearized sequence.
Converts the tree into a linearized sequence. This is not necessarily a
very efficient method, and should usually just be used for debugging.
To avoid surprises, this does not call iterator.toSeq
because that would
produce a Stream
and thus subject to further changes to the tree while
traversing. The returned seq instead is 'forced' and thus stable.
Converts the tree into a non-transactional set.
Converts the tree into a non-transactional set. This is not necessarily a very efficient method, and should usually just be used for debugging.
Looks up a point and applies a transformation to the entry associated with it.
Looks up a point and applies a transformation to the entry associated with it. This can be used to update an element in-place, or used for maintaining a spatial multi-map.
the location at which to perform the transformation
a function to transform the element found, or generate a new element. The argument is the
element previously stored with the point, or None
if no element is found. The result is
expected to be Some
new element to be stored, or None
if no element is to be stored
(in this case, if an element was previously stored, it is removed)
the previously stored element (if any)
Adds an element to the tree (or replaces a given element with the same point location).
Adds an element to the tree (or replaces a given element with the same point location).
the element to add to the tree
the old element stored for the same point view, if it existed