gwr_components/store/
object_store.rs1use std::rc::Rc;
4
5use gwr_engine::engine::Engine;
6use gwr_engine::time::clock::Clock;
7use gwr_engine::traits::SimObject;
8use gwr_engine::types::SimError;
9use gwr_track::entity::Entity;
10use gwr_track::tracker::aka::Aka;
11
12use super::Store;
13
14pub struct ObjectStore<T>(std::marker::PhantomData<T>);
18
19impl<T> ObjectStore<T>
20where
21 T: SimObject,
22{
23 pub fn new_and_register_with_renames(
27 engine: &Engine,
28 clock: &Clock,
29 parent: &Rc<Entity>,
30 name: &str,
31 aka: Option<&Aka>,
32 capacity: usize,
33 ) -> Result<Rc<Store<T>>, SimError> {
34 let entity = Rc::new(Entity::new(parent, name));
35 entity.track_capacity(capacity, "objects");
36 let store = Rc::new(Store::new(engine, clock, &entity, aka, capacity, |_| 1)?);
37 engine.register(store.clone());
38 Ok(store)
39 }
40
41 pub fn new_and_register(
45 engine: &Engine,
46 clock: &Clock,
47 parent: &Rc<Entity>,
48 name: &str,
49 capacity: usize,
50 ) -> Result<Rc<Store<T>>, SimError> {
51 Self::new_and_register_with_renames(engine, clock, parent, name, None, capacity)
52 }
53}