shipyard/track/
insertion_modification.rs1use crate::component::Component;
2use crate::entity_id::EntityId;
3use crate::seal::Sealed;
4use crate::sparse_set::SparseSet;
5use crate::track::InsertionAndModification;
6use crate::tracking::{InsertionTracking, ModificationTracking, Tracking, TrackingTimestamp};
7
8impl Sealed for InsertionAndModification {}
9
10impl Tracking for InsertionAndModification {
11 const VALUE: u32 = 0b0011;
12
13 fn name() -> &'static str {
14 "Insertion and Modification"
15 }
16
17 #[inline]
18 fn is_inserted<T: Component>(
19 sparse_set: &SparseSet<T>,
20 entity: EntityId,
21 last: TrackingTimestamp,
22 current: TrackingTimestamp,
23 ) -> bool {
24 if let Some(dense) = sparse_set.index_of(entity) {
25 sparse_set.insertion_data[dense].is_within(last, current)
26 } else {
27 false
28 }
29 }
30
31 fn is_modified<T: Component>(
32 sparse_set: &SparseSet<T>,
33 entity: EntityId,
34 last: TrackingTimestamp,
35 current: TrackingTimestamp,
36 ) -> bool {
37 if let Some(dense) = sparse_set.index_of(entity) {
38 sparse_set.modification_data[dense].is_within(last, current)
39 } else {
40 false
41 }
42 }
43}
44
45impl InsertionTracking for InsertionAndModification {}
46impl ModificationTracking for InsertionAndModification {}