pub trait Point: Copy + Clone + PartialEq + Debug {
type Scalar: RTreeNum;
const DIMENSIONS: usize;
fn generate(generator: impl Fn(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.
Point
is implemented out of the box for arrays like [f32; 2]
or [f64; 7]
(up to dimension 8).
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(generator: impl Fn(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!()
}
}
}
Required Associated Types
Required Associated Constants
sourceconst DIMENSIONS: usize
const DIMENSIONS: usize
The number of dimensions of this point type.
Required Methods
sourcefn generate(generator: impl Fn(usize) -> Self::Scalar) -> Self
fn generate(generator: impl Fn(usize) -> Self::Scalar) -> Self
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
.