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 let store = Rc::new(Store::new(
36 engine,
37 clock,
38 &entity,
39 aka,
40 capacity,
41 "objects",
42 |_| 1,
43 )?);
44 engine.register(store.clone());
45 Ok(store)
46 }
47
48 pub fn new_and_register(
52 engine: &Engine,
53 clock: &Clock,
54 parent: &Rc<Entity>,
55 name: &str,
56 capacity: usize,
57 ) -> Result<Rc<Store<T>>, SimError> {
58 Self::new_and_register_with_renames(engine, clock, parent, name, None, capacity)
59 }
60}