pub trait Point: Copy + Clone + PartialEq + Debug {
type Scalar: RTreeNum;
const DIMENSIONS: usize;
fn generate(generator: impl FnMut(usize) -> Self::Scalar) -> Self;
fn nth(&self, index: usize) -> Self::Scalar;
fn nth_mut(&mut self, index: usize) -> &mut Self::Scalar;
}
Expand description
Defines a point type that is compatible with rstar.
This trait should be used for interoperability with other point types, not to define custom objects
that can be inserted into r-trees. Use crate::RTreeObject
or
crate::primitives::GeomWithData
instead.
This trait defines points, not points with metadata.
Point
is implemented out of the box for arrays like [f32; 2]
or [f64; 7]
(up to dimension 9)
and for tuples like (int, int)
and (f64, f64, f64)
so tuples with only elements of the same type (up to dimension 9).
Implementation example
Supporting a custom point type might look like this:
use rstar::Point;
#[derive(Copy, Clone, PartialEq, Debug)]
struct IntegerPoint
{
x: i32,
y: i32
}
impl Point for IntegerPoint
{
type Scalar = i32;
const DIMENSIONS: usize = 2;
fn generate(mut generator: impl FnMut(usize) -> Self::Scalar) -> Self
{
IntegerPoint {
x: generator(0),
y: generator(1)
}
}
fn nth(&self, index: usize) -> Self::Scalar
{
match index {
0 => self.x,
1 => self.y,
_ => unreachable!()
}
}
fn nth_mut(&mut self, index: usize) -> &mut Self::Scalar
{
match index {
0 => &mut self.x,
1 => &mut self.y,
_ => unreachable!()
}
}
}
Associated Types
Associated Constants
const DIMENSIONS: usize
const DIMENSIONS: usize
The number of dimensions of this point type.
Required methods
Creates a new point value with given values for each dimension.
The value that each dimension should be initialized with is given by the parameter generator
.
Calling generator(n)
returns the value of dimension n
, n
will be in the range 0 .. Self::DIMENSIONS
,
and will be called with values of n
in ascending order.
Returns a single coordinate of this point.
Returns the coordinate indicated by index
. index
is always smaller than Self::DIMENSIONS
.