Skip to main content

GridGeometry

Struct GridGeometry 

Source
pub struct GridGeometry {
    pub coord_dims: Vec<u32>,
    pub coord_strides: Vec<usize>,
    pub ndim: usize,
    pub all_wrap: bool,
    pub connectivity: GridConnectivity,
}
Expand description

Extracted grid geometry for fast interior/boundary dispatch.

If the space is a known grid type, we extract its dimensions and strides per coordinate index. This enables:

  • O(1) is_interior check (no BFS, no bounds-check per cell)
  • Direct stride arithmetic for the fast gather path

coord_dims\[i\] is the valid range for coord\[i\] (0..coord_dims[i]). coord_strides\[i\] is the stride for coord\[i\] in canonical rank.

Fields§

§coord_dims: Vec<u32>

Valid range per coordinate index: coord[i] must be in 0..coord_dims[i].

§coord_strides: Vec<usize>

Stride per coordinate index for canonical rank computation.

§ndim: usize

Number of spatial dimensions.

§all_wrap: bool

Whether all boundaries wrap (torus topology → all positions interior).

§connectivity: GridConnectivity

Connectivity type for graph-distance computation.

Implementations§

Source§

impl GridGeometry

Source

pub fn from_space(space: &dyn Space) -> Option<Self>

Try to extract grid geometry from a &dyn Space via downcast.

Returns Some for Square4, Square8, Hex2D (all 2D grids). Returns None for Line1D, Ring1D, ProductSpace (heterogeneous), or any unknown Space implementation.

Source

pub fn canonical_rank(&self, coord: &[i32]) -> usize

Compute the canonical rank of a coordinate using stride arithmetic.

For a 2D grid with dims [R, C], coord [a, b]: rank = a * strides[0] + b * strides[1].

Source

pub fn in_bounds(&self, coord: &[i32]) -> bool

Check if a coordinate is within the grid bounds.

Source

pub fn is_interior(&self, center: &[i32], radius: u32) -> bool

O(1) check: is the agent at center fully interior for a given radius?

An agent is interior if all cells within radius of center are in-bounds on every coordinate axis: radius <= center[i] and center[i] + radius < coord_dims[i] for all i.

For wrapped spaces (all_wrap == true), every position is interior.

Source

pub fn graph_distance(&self, relative: &[i32]) -> u32

Compute the graph distance from origin for a relative coordinate.

This uses the distance metric appropriate for the grid connectivity:

  • FourWay: Manhattan distance |d0| + |d1| + ...
  • EightWay: Chebyshev distance max(|d0|, |d1|, ...)
  • Hex: Cube distance max(|dq|, |dr|, |dq + dr|) (axial coords)

Trait Implementations§

Source§

impl Clone for GridGeometry

Source§

fn clone(&self) -> GridGeometry

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GridGeometry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.