
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com> Co-authored-by: Rob Parrett <robparrett@gmail.com> Co-authored-by: Carter Weinberg <weinbergcarter@gmail.com> Co-authored-by: MinerSebas <66798382+MinerSebas@users.noreply.github.com> Co-authored-by: Cameron <51241057+maniwani@users.noreply.github.com>
44 lines
1.6 KiB
Rust
44 lines
1.6 KiB
Rust
//! Storage layouts for ECS data.
|
|
//!
|
|
//! This module implements the low-level collections that store data in a [`World`]. These all offer minimal and often
|
|
//! unsafe APIs, and have been made `pub` primarily for debugging and monitoring purposes.
|
|
//!
|
|
//! # Fetching Storages
|
|
//! Each of the below data stores can be fetched via [`Storages`], which can be fetched from a
|
|
//! [`World`] via [`World::storages`]. It exposes a top level container for each class of storage within
|
|
//! ECS:
|
|
//!
|
|
//! - [`Tables`] - columnar contiguous blocks of memory, optimized for fast iteration.
|
|
//! - [`SparseSets`] - sparse `HashMap`-like mappings from entities to components, optimized for random
|
|
//! lookup and regular insertion/removal of components.
|
|
//! - [`Resources`] - singleton storage for the resources in the world
|
|
//!
|
|
//! # Safety
|
|
//! To avoid trivially unsound use of the APIs in this module, it is explicitly impossible to get a mutable
|
|
//! reference to [`Storages`] from [`World`], and none of the types publicly expose a mutable interface.
|
|
//!
|
|
//! [`World`]: crate::world::World
|
|
//! [`World::storages`]: crate::world::World::storages
|
|
|
|
mod blob_vec;
|
|
mod resource;
|
|
mod sparse_set;
|
|
mod table;
|
|
|
|
pub use resource::*;
|
|
pub use sparse_set::*;
|
|
pub use table::*;
|
|
|
|
/// The raw data stores of a [World](crate::world::World)
|
|
#[derive(Default)]
|
|
pub struct Storages {
|
|
/// Backing storage for [`SparseSet`] components.
|
|
pub sparse_sets: SparseSets,
|
|
/// Backing storage for [`Table`] components.
|
|
pub tables: Tables,
|
|
/// Backing storage for resources.
|
|
pub resources: Resources<true>,
|
|
/// Backing storage for `!Send` resources.
|
|
pub non_send_resources: Resources<false>,
|
|
}
|