Skip to main content

rustsim_spaces/
lib.rs

1//! Space implementations for agent-based models.
2//!
3//! Each space defines a topology in which agents exist and provides:
4//! - Position types
5//! - Agent registration / deregistration
6//! - Neighbor queries
7//! - Random position generation
8//!
9//! | Space | Position type | Metric | Use case |
10//! |-------|--------------|--------|----------|
11//! | [`NothingSpace`](nothing::NothingSpace) | - | - | Non-spatial models |
12//! | [`Grid2D`](grid::Grid2D) | `(usize, usize)` | Chebyshev | Cellular automata, Schelling |
13//! | [`Grid2DSingle`](grid::Grid2DSingle) | `(usize, usize)` | Chebyshev | Single-occupancy grids |
14//! | [`ContinuousSpace2D`](continuous::ContinuousSpace2D) | [`ContinuousPos`](continuous::ContinuousPos) | Euclidean | 2D flocking, particles |
15//! | [`ContinuousSpace3D`](continuous3d::ContinuousSpace3D) | [`ContinuousPos3D`](continuous3d::ContinuousPos3D) | Euclidean | 3D physics |
16//! | [`GraphSpace`](graph::GraphSpace) | `usize` (node index) | Hops (BFS) | Networks, social graphs |
17//! | [`HybridSpace`](hybrid::HybridSpace) | [`HybridPos`](hybrid::HybridPos) | Hops + Euclidean | Buildings, multi-room environments |
18//! | [`LinkSpace`](link::LinkSpace) | `(NodeId, NodeId)` | Link distance | Generic link-based networks |
19//!
20pub mod continuous;
21pub mod continuous3d;
22pub mod density;
23pub mod graph;
24pub mod grid;
25pub mod hybrid;
26pub mod link;
27pub mod nothing;
28
29/// Re-exports of all space types and their associated position/error types.
30pub mod prelude {
31    pub use crate::continuous::{
32        ContinuousPos, ContinuousSpace2D, ContinuousSpaceConfigError, ContinuousSpaceError,
33    };
34    pub use crate::continuous3d::{
35        ContinuousPos3D, ContinuousSpace3D, ContinuousSpace3DConfigError, ContinuousSpace3DError,
36    };
37    pub use crate::density::{
38        BicycleFacility, CustomLosCriteria, DensityGrid, DensityGridError, DensityStatistics,
39        LosCriteria, LosCriteriaConfigError, LosGrade, PedestrianQueuing, PedestrianStairway,
40        PedestrianWalkway, TransitCapacity, VehicularFreeway, VehicularUnsignalized,
41        VehicularUrbanStreet,
42    };
43    pub use crate::graph::{GraphPos, GraphSpace, GraphSpaceError, NeighborType};
44    pub use crate::grid::{Grid2D, Grid2DSingle, GridError, GridPos2};
45    pub use crate::hybrid::{
46        HybridPos, HybridSpace, HybridSpaceError, ZoneExtent, ZoneExtentError, ZoneWalkmap,
47        ZoneWalkmapError,
48    };
49    pub use crate::link::{LinkGeometry, LinkGeometryError, LinkId, LinkSpace, LinkSpaceError};
50    pub use crate::nothing::NothingSpace;
51}