pub trait Point:
Clone
+ PartialEq
+ Debug {
type Scalar: RTreeNum;
const DIMENSIONS: usize;
// Required methods
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]
(for any number of dimensions),
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!()
}
}
}
Required Associated Constants§
Sourceconst DIMENSIONS: usize
const DIMENSIONS: usize
The number of dimensions of this point type.
Required Associated Types§
Required Methods§
Sourcefn generate(generator: impl FnMut(usize) -> Self::Scalar) -> Self
fn generate(generator: impl FnMut(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
,
and will be called with values of n
in ascending order.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.