Skip to main content

SpatialHash

Struct SpatialHash 

Source
pub struct SpatialHash<T> { /* private fields */ }
Expand description

A uniform-grid spatial hash map keyed by (cell_x, cell_y).

T must be Clone because a single large item may be registered in multiple cells simultaneously.

Implementations§

Source§

impl<T: Clone> SpatialHash<T>

Source

pub fn new(cell_size: f32) -> Option<Self>

Create an empty spatial hash with the given cell size.

cell_size should be chosen to match the typical object size: too small wastes memory, too large reduces query selectivity. 64.0 px is a good default for UI graphs; use smaller values for dense physics simulations.

Source

pub fn insert(&mut self, rect: Rect, item: T)

Insert item into every cell that rect overlaps.

The item is cloned once per overlapping cell. For items that span many cells this can be expensive — prefer large cell_size for large objects.

Source

pub fn query(&self, rect: Rect) -> Vec<T>

Return all items registered in cells that overlap rect.

The returned list may contain duplicates if an item spans multiple cells that all overlap the query rect. Callers must deduplicate if needed. This is intentionally a broad-phase query — exact AABB testing is the caller’s responsibility.

Source

pub fn clear(&mut self)

Remove all items from every cell, resetting to an empty grid.

This does NOT free the backing HashMap’s allocated memory; call this at the start of each frame before re-inserting the current object set.

Source

pub fn len(&self) -> usize

Return the number of cell-item registrations (not unique item count).

This is useful for profiling and capacity planning. An item spanning N cells contributes N to this count.

Source

pub fn is_empty(&self) -> bool

Returns true if no items have been inserted since the last clear().

Auto Trait Implementations§

§

impl<T> Freeze for SpatialHash<T>

§

impl<T> RefUnwindSafe for SpatialHash<T>
where T: RefUnwindSafe,

§

impl<T> Send for SpatialHash<T>
where T: Send,

§

impl<T> Sync for SpatialHash<T>
where T: Sync,

§

impl<T> Unpin for SpatialHash<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for SpatialHash<T>

§

impl<T> UnwindSafe for SpatialHash<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more