1use crate::component::Component;
2use crate::entity_id::EntityId;
3use crate::views::ViewMut;
4
5pub trait Delete {
7 fn delete(&mut self, entity: EntityId) -> bool;
29}
30
31impl Delete for () {
32 #[inline]
33 fn delete(&mut self, _: EntityId) -> bool {
34 false
35 }
36}
37
38impl<T: Component, TRACK> Delete for ViewMut<'_, T, TRACK> {
39 #[inline]
40 fn delete(&mut self, entity: EntityId) -> bool {
41 let current = self.current;
42 self.dyn_delete(entity, current)
43 }
44}
45
46impl<T: Component, TRACK> Delete for &mut ViewMut<'_, T, TRACK> {
47 #[inline]
48 fn delete(&mut self, entity: EntityId) -> bool {
49 let current = self.current;
50 self.dyn_delete(entity, current)
51 }
52}
53
54macro_rules! impl_delete_component {
55 ($(($storage: ident, $index: tt))+) => {
56 impl<$($storage: Delete),+> Delete for ($($storage,)+) {
57 #[inline]
58 fn delete(&mut self, entity: EntityId) -> bool {
59 $(
60 self.$index.delete(entity)
61 )|+
62 }
63 }
64 }
65}
66
67macro_rules! delete_component {
68 ($(($storage: ident, $index: tt))+; ($storage1: ident, $index1: tt) $(($queue_type: ident, $queue_index: tt))*) => {
69 impl_delete_component![$(($storage, $index))*];
70 delete_component![$(($storage, $index))* ($storage1, $index1); $(($queue_type, $queue_index))*];
71 };
72 ($(($storage: ident, $index: tt))+;) => {
73 impl_delete_component![$(($storage, $index))*];
74 }
75}
76
77#[cfg(not(feature = "extended_tuple"))]
78delete_component![(ViewA, 0); (ViewB, 1) (ViewC, 2) (ViewD, 3) (ViewE, 4) (ViewF, 5) (ViewG, 6) (ViewH, 7) (ViewI, 8) (ViewJ, 9)];
79#[cfg(feature = "extended_tuple")]
80delete_component![
81 (ViewA, 0); (ViewB, 1) (ViewC, 2) (ViewD, 3) (ViewE, 4) (ViewF, 5) (ViewG, 6) (ViewH, 7) (ViewI, 8) (ViewJ, 9)
82 (ViewK, 10) (ViewL, 11) (ViewM, 12) (ViewN, 13) (ViewO, 14) (ViewP, 15) (ViewQ, 16) (ViewR, 17) (ViewS, 18) (ViewT, 19)
83 (ViewU, 20) (ViewV, 21) (ViewW, 22) (ViewX, 23) (ViewY, 24) (ViewZ, 25) (ViewAA, 26) (ViewBB, 27) (ViewCC, 28) (ViewDD, 29)
84 (ViewEE, 30) (ViewFF, 31)
85];