pub struct KdTree<A: Copy + Default, T: Copy + Default, const K: usize, const B: usize, IDX> { /* private fields */ }
Expand description
Floating point k-d tree
For use when the co-ordinates of the points being stored in the tree
on the float KdTree
. This will be f64
or f32
,
or f16
if the f16
or f16_rkyv_08
features
are enabled
A convenient type alias exists for KdTree with some sensible defaults set: kiddo::KdTree
.
Implementations§
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn add(&mut self, query: &[A; K], item: T)
pub fn add(&mut self, query: &[A; K], item: T)
Adds an item to the tree.
The first argument specifies co-ordinates of the point where the item is located. The second argument is an integer identifier / index for the item being stored.
§Examples
use kiddo::KdTree;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
assert_eq!(tree.size(), 1);
Sourcepub fn remove(&mut self, query: &[A; K], item: T) -> usize
pub fn remove(&mut self, query: &[A; K], item: T) -> usize
Removes an item from the tree.
The first argument specifies co-ordinates of the point where the item is located. The second argument is the integer identifier / index for the stored item.
§Examples
use kiddo::KdTree;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[1.0, 2.0, 5.0], 200);
assert_eq!(tree.size(), 2);
tree.remove(&[1.0, 2.0, 5.0], 100);
assert_eq!(tree.size(), 1);
tree.remove(&[1.0, 2.0, 5.0], 200);
assert_eq!(tree.size(), 0);
Source§impl<A, T, const K: usize, const B: usize, IDX> KdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> KdTree<A, T, K, B, IDX>
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new float KdTree.
Capacity is set by default to 10x the bucket size (32 in this case).
§Examples
use kiddo::KdTree;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
assert_eq!(tree.size(), 1);
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Creates a new float KdTree and reserve capacity for a specific number of items.
§Examples
use kiddo::KdTree;
let mut tree: KdTree<f64, 3> = KdTree::with_capacity(1_000_000);
tree.add(&[1.0, 2.0, 5.0], 100);
assert_eq!(tree.size(), 1);
Sourcepub fn iter(&self) -> impl Iterator<Item = (T, [A; K])> + '_
pub fn iter(&self) -> impl Iterator<Item = (T, [A; K])> + '_
Iterate over all (index, point)
tuples in arbitrary order.
use kiddo::KdTree;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0f64, 2.0f64, 3.0f64], 10);
tree.add(&[11.0f64, 12.0f64, 13.0f64], 20);
tree.add(&[21.0f64, 22.0f64, 23.0f64], 30);
let mut pairs: Vec<_> = tree.iter().collect();
assert_eq!(pairs.pop().unwrap(), (10, [1.0f64, 2.0f64, 3.0f64]));
assert_eq!(pairs.pop().unwrap(), (20, [11.0f64, 12.0f64, 13.0f64]));
assert_eq!(pairs.pop().unwrap(), (30, [21.0f64, 22.0f64, 23.0f64]));
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn best_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_qty: usize,
) -> impl Iterator<Item = BestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn best_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_qty: usize,
) -> impl Iterator<Item = BestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds the “best” n
elements within dist
of query
.
Results are returned in arbitrary order. ‘Best’ is determined by
performing a comparison of the elements using < (ie, std::cmp::Ordering::is_lt
). Returns an iterator.
Returns an iterator.
§Examples
use kiddo::KdTree;
use kiddo::best_neighbour::BestNeighbour;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let mut best_n_within = tree.best_n_within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64, 1);
let first = best_n_within.next().unwrap();
assert_eq!(first, BestNeighbour { distance: 0.0, item: 100 });
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn nearest_n<D>(
&self,
query: &[A; K],
qty: usize,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn nearest_n<D>(
&self,
query: &[A; K],
qty: usize,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds the nearest qty
elements to query
, using the specified
distance metric function.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let nearest: Vec<_> = tree.nearest_n::<SquaredEuclidean>(&[1.0, 2.0, 5.1], 1);
assert_eq!(nearest.len(), 1);
assert!((nearest[0].distance - 0.01f64).abs() < f64::EPSILON);
assert_eq!(nearest[0].item, 100);
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn nearest_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_items: NonZero<usize>,
sorted: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn nearest_n_within<D>(
&self,
query: &[A; K],
dist: A,
max_items: NonZero<usize>,
sorted: bool,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds up to n elements within dist
of query
, using the specified
distance metric function.
Results are returned in as a ResultCollection, which can return a sorted or unsorted Vec.
§Examples
use std::num::NonZero;
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let max_qty = NonZero::new(1).unwrap();
let within = tree.nearest_n_within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64, max_qty, true);
assert_eq!(within.len(), 1);
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn nearest_one<D>(&self, query: &[A; K]) -> NearestNeighbour<A, T>where
D: DistanceMetric<A, K>,
pub fn nearest_one<D>(&self, query: &[A; K]) -> NearestNeighbour<A, T>where
D: DistanceMetric<A, K>,
Finds the nearest element to query
, using the specified
distance metric function.
Faster than querying for nearest_n(point, 1, …) due to not needing to allocate memory or maintain sorted results.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let nearest = tree.nearest_one::<SquaredEuclidean>(&[1.0, 2.0, 5.1]);
assert!((nearest.distance - 0.01f64).abs() < f64::EPSILON);
assert_eq!(nearest.item, 100);
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn within<D>(&self, query: &[A; K], dist: A) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn within<D>(&self, query: &[A; K], dist: A) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds all elements within dist
of query
, using the specified
distance metric function.
Results are returned sorted nearest-first
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let within = tree.within::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64);
assert_eq!(within.len(), 2);
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn within_unsorted<D>(
&self,
query: &[A; K],
dist: A,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
pub fn within_unsorted<D>(
&self,
query: &[A; K],
dist: A,
) -> Vec<NearestNeighbour<A, T>>where
D: DistanceMetric<A, K>,
Finds all elements within dist
of query
, using the specified
distance metric function.
Results are returned in arbitrary order. Faster than within
.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let within = tree.within_unsorted::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64);
assert_eq!(within.len(), 2);
Source§impl<'a, A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
impl<'a, A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> KdTree<A, T, K, B, IDX>
Sourcepub fn within_unsorted_iter<D>(
&'a self,
query: &'a [A; K],
dist: A,
) -> WithinUnsortedIter<'a, A, T> ⓘwhere
D: DistanceMetric<A, K>,
pub fn within_unsorted_iter<D>(
&'a self,
query: &'a [A; K],
dist: A,
) -> WithinUnsortedIter<'a, A, T> ⓘwhere
D: DistanceMetric<A, K>,
Finds all elements within dist
of query
, using the specified
distance metric function.
Returns an Iterator
. Results are returned in arbitrary order.
§Examples
use kiddo::KdTree;
use kiddo::SquaredEuclidean;
let mut tree: KdTree<f64, 3> = KdTree::new();
tree.add(&[1.0, 2.0, 5.0], 100);
tree.add(&[2.0, 3.0, 6.0], 101);
let within = tree.within_unsorted_iter::<SquaredEuclidean>(&[1.0, 2.0, 5.0], 10f64).collect::<Vec<_>>();
assert_eq!(within.len(), 2);
Trait Implementations§
Source§impl<A: Copy + Default, T, const K: usize, const B: usize, IDX> Archive for KdTree<A, T, K, B, IDX>
impl<A: Copy + Default, T, const K: usize, const B: usize, IDX> Archive for KdTree<A, T, K, B, IDX>
Source§type Archived = ArchivedKdTree<A, T, K, B, IDX>
type Archived = ArchivedKdTree<A, T, K, B, IDX>
Source§type Resolver = KdTreeResolver<A, T, K, B, IDX>
type Resolver = KdTreeResolver<A, T, K, B, IDX>
Source§impl<A: Clone + Copy + Default, T: Clone + Copy + Default, const K: usize, const B: usize, IDX: Clone> Clone for KdTree<A, T, K, B, IDX>
impl<A: Clone + Copy + Default, T: Clone + Copy + Default, const K: usize, const B: usize, IDX: Clone> Clone for KdTree<A, T, K, B, IDX>
Source§impl<A: Debug + Copy + Default, T: Debug + Copy + Default, const K: usize, const B: usize, IDX: Debug> Debug for KdTree<A, T, K, B, IDX>
impl<A: Debug + Copy + Default, T: Debug + Copy + Default, const K: usize, const B: usize, IDX: Debug> Debug for KdTree<A, T, K, B, IDX>
Source§impl<'de, A, T, const K: usize, const B: usize, IDX> Deserialize<'de> for KdTree<A, T, K, B, IDX>where
A: Deserialize<'de> + Copy + Default,
T: Deserialize<'de> + Copy + Default,
IDX: Deserialize<'de>,
impl<'de, A, T, const K: usize, const B: usize, IDX> Deserialize<'de> for KdTree<A, T, K, B, IDX>where
A: Deserialize<'de> + Copy + Default,
T: Deserialize<'de> + Copy + Default,
IDX: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<__D: Fallible + ?Sized, A: Copy + Default, T, const K: usize, const B: usize, IDX> Deserialize<KdTree<A, T, K, B, IDX>, __D> for Archived<KdTree<A, T, K, B, IDX>>where
Vec<LeafNode<A, T, K, B, IDX>>: Archive,
Archived<Vec<LeafNode<A, T, K, B, IDX>>>: Deserialize<Vec<LeafNode<A, T, K, B, IDX>>, __D>,
Vec<StemNode<A, K, IDX>>: Archive,
Archived<Vec<StemNode<A, K, IDX>>>: Deserialize<Vec<StemNode<A, K, IDX>>, __D>,
IDX: Archive,
Archived<IDX>: Deserialize<IDX, __D>,
T: Archive + Copy + Default,
Archived<T>: Deserialize<T, __D>,
impl<__D: Fallible + ?Sized, A: Copy + Default, T, const K: usize, const B: usize, IDX> Deserialize<KdTree<A, T, K, B, IDX>, __D> for Archived<KdTree<A, T, K, B, IDX>>where
Vec<LeafNode<A, T, K, B, IDX>>: Archive,
Archived<Vec<LeafNode<A, T, K, B, IDX>>>: Deserialize<Vec<LeafNode<A, T, K, B, IDX>>, __D>,
Vec<StemNode<A, K, IDX>>: Archive,
Archived<Vec<StemNode<A, K, IDX>>>: Deserialize<Vec<StemNode<A, K, IDX>>, __D>,
IDX: Archive,
Archived<IDX>: Deserialize<IDX, __D>,
T: Archive + Copy + Default,
Archived<T>: Deserialize<T, __D>,
Source§impl<'a, 't, A: Axis + Copy, T: Content + Copy, const K: usize, const B: usize, IDX: Index<T = IDX>> Extend<(&'a [A; K], &'t T)> for KdTree<A, T, K, B, IDX>
impl<'a, 't, A: Axis + Copy, T: Content + Copy, const K: usize, const B: usize, IDX: Index<T = IDX>> Extend<(&'a [A; K], &'t T)> for KdTree<A, T, K, B, IDX>
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> Extend<([A; K], T)> for KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> Extend<([A; K], T)> for KdTree<A, T, K, B, IDX>
Source§fn extend<I: IntoIterator<Item = ([A; K], T)>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = ([A; K], T)>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
#72631)Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> From<&Vec<[A; K]>> for KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> From<&Vec<[A; K]>> for KdTree<A, T, K, B, IDX>
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>, const N: usize> From<[([A; K], T); N]> for KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>, const N: usize> From<[([A; K], T); N]> for KdTree<A, T, K, B, IDX>
Source§impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> FromIterator<([A; K], T)> for KdTree<A, T, K, B, IDX>
impl<A: Axis, T: Content, const K: usize, const B: usize, IDX: Index<T = IDX>> FromIterator<([A; K], T)> for KdTree<A, T, K, B, IDX>
Source§impl<A: PartialEq + Copy + Default, T: PartialEq + Copy + Default, const K: usize, const B: usize, IDX: PartialEq> PartialEq for KdTree<A, T, K, B, IDX>
impl<A: PartialEq + Copy + Default, T: PartialEq + Copy + Default, const K: usize, const B: usize, IDX: PartialEq> PartialEq for KdTree<A, T, K, B, IDX>
Source§impl<__S: Fallible + ?Sized, A: Copy + Default, T, const K: usize, const B: usize, IDX> Serialize<__S> for KdTree<A, T, K, B, IDX>
impl<__S: Fallible + ?Sized, A: Copy + Default, T, const K: usize, const B: usize, IDX> Serialize<__S> for KdTree<A, T, K, B, IDX>
impl<A: Copy + Default, T: Copy + Default, const K: usize, const B: usize, IDX> StructuralPartialEq for KdTree<A, T, K, B, IDX>
Auto Trait Implementations§
impl<A, T, const K: usize, const B: usize, IDX> Freeze for KdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> RefUnwindSafe for KdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> Send for KdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> Sync for KdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> Unpin for KdTree<A, T, K, B, IDX>
impl<A, T, const K: usize, const B: usize, IDX> UnwindSafe for KdTree<A, T, K, B, IDX>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive
, it may be unsized. Read moreSource§type MetadataResolver = ()
type MetadataResolver = ()
Source§unsafe fn resolve_metadata(
&self,
_: usize,
_: <T as ArchiveUnsized>::MetadataResolver,
_: *mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata,
)
unsafe fn resolve_metadata( &self, _: usize, _: <T as ArchiveUnsized>::MetadataResolver, _: *mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata, )
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
Source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
Source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
Source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.