gwr_components/store/
byte_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 ByteStore<T>(std::marker::PhantomData<T>);
20
21impl<T> ByteStore<T>
22where
23 T: SimObject,
24{
25 pub fn new_and_register_with_renames(
29 engine: &Engine,
30 clock: &Clock,
31 parent: &Rc<Entity>,
32 name: &str,
33 aka: Option<&Aka>,
34 capacity_bytes: usize,
35 ) -> Result<Rc<Store<T>>, SimError> {
36 let entity = Rc::new(Entity::new(parent, name));
37 entity.track_capacity(capacity_bytes, "bytes");
38 let store = Rc::new(Store::new(
39 engine,
40 clock,
41 &entity,
42 aka,
43 capacity_bytes,
44 |value: &T| value.total_bytes(),
45 )?);
46 store.set_capacity_unit("bytes");
47 engine.register(store.clone());
48 Ok(store)
49 }
50
51 pub fn new_and_register(
55 engine: &Engine,
56 clock: &Clock,
57 parent: &Rc<Entity>,
58 name: &str,
59 capacity_bytes: usize,
60 ) -> Result<Rc<Store<T>>, SimError> {
61 Self::new_and_register_with_renames(engine, clock, parent, name, None, capacity_bytes)
62 }
63}