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_interiorcheck (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: usizeNumber of spatial dimensions.
all_wrap: boolWhether all boundaries wrap (torus topology → all positions interior).
connectivity: GridConnectivityConnectivity type for graph-distance computation.
Implementations§
Source§impl GridGeometry
impl GridGeometry
Sourcepub fn from_space(space: &dyn Space) -> Option<Self>
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.
Sourcepub fn canonical_rank(&self, coord: &[i32]) -> usize
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].
Sourcepub fn in_bounds(&self, coord: &[i32]) -> bool
pub fn in_bounds(&self, coord: &[i32]) -> bool
Check if a coordinate is within the grid bounds.
Sourcepub fn is_interior(&self, center: &[i32], radius: u32) -> bool
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.
Sourcepub fn graph_distance(&self, relative: &[i32]) -> u32
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 distancemax(|d0|, |d1|, ...)Hex: Cube distancemax(|dq|, |dr|, |dq + dr|)(axial coords)
Trait Implementations§
Source§impl Clone for GridGeometry
impl Clone for GridGeometry
Source§fn clone(&self) -> GridGeometry
fn clone(&self) -> GridGeometry
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more