shipyard/track/
insertion_modification.rs

1use 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 {}