Skip to content

Commit 4b6cd8c

Browse files
Code organization
Moves impl blocks directly after types, organizes like-types together, presents shared functionality first
1 parent 92358df commit 4b6cd8c

File tree

1 file changed

+137
-138
lines changed

1 file changed

+137
-138
lines changed

crates/bevy_ecs/src/event.rs

Lines changed: 137 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -140,144 +140,6 @@ impl<T> Default for Events<T> {
140140
}
141141
}
142142

143-
fn map_instance_event_with_id<T>(event_instance: &EventInstance<T>) -> (&T, EventId<T>) {
144-
(&event_instance.event, event_instance.event_id)
145-
}
146-
147-
fn map_instance_event<T>(event_instance: &EventInstance<T>) -> &T {
148-
&event_instance.event
149-
}
150-
151-
/// Reads events of type `T` in order and tracks which events have already been read.
152-
pub struct EventReader<'a, T: Component> {
153-
last_event_count: Local<'a, (usize, PhantomData<T>)>,
154-
events: &'a Events<T>,
155-
}
156-
157-
impl<'a, T: Component> SystemParam for EventReader<'a, T> {
158-
type Fetch = ResState<Events<T>>;
159-
}
160-
161-
/// Sends events of type `T`.
162-
pub struct EventWriter<'a, T: Component> {
163-
events: &'a mut Events<T>,
164-
}
165-
166-
impl<'a, T: Component> SystemParam for EventWriter<'a, T> {
167-
type Fetch = ResMutState<Events<T>>;
168-
}
169-
170-
impl<'a, T: Component> EventWriter<'a, T> {
171-
pub fn new(events: &'a mut Events<T>) -> Self {
172-
EventWriter::<'a, T> { events }
173-
}
174-
175-
pub fn send(&mut self, event: T) {
176-
self.events.send(event);
177-
}
178-
179-
pub fn send_batch(&mut self, events: impl Iterator<Item = T>) {
180-
self.events.extend(events);
181-
}
182-
}
183-
184-
pub struct ManualEventReader<T> {
185-
last_event_count: usize,
186-
_marker: PhantomData<T>,
187-
}
188-
189-
impl<T> Default for ManualEventReader<T> {
190-
fn default() -> Self {
191-
ManualEventReader {
192-
last_event_count: 0,
193-
_marker: Default::default(),
194-
}
195-
}
196-
}
197-
198-
impl<T> ManualEventReader<T> {
199-
/// See [`EventReader::iter`]
200-
pub fn iter<'a>(&mut self, events: &'a Events<T>) -> impl DoubleEndedIterator<Item = &'a T> {
201-
internal_event_reader(&mut self.last_event_count, events).map(|(e, _)| e)
202-
}
203-
204-
/// See [`EventReader::iter_with_id`]
205-
pub fn iter_with_id<'a>(
206-
&mut self,
207-
events: &'a Events<T>,
208-
) -> impl DoubleEndedIterator<Item = (&'a T, EventId<T>)> {
209-
internal_event_reader(&mut self.last_event_count, events)
210-
}
211-
}
212-
213-
/// Like [`iter_with_id`](EventReader::iter_with_id) except not emitting any traces for read
214-
/// messages.
215-
fn internal_event_reader<'a, T>(
216-
last_event_count: &mut usize,
217-
events: &'a Events<T>,
218-
) -> impl DoubleEndedIterator<Item = (&'a T, EventId<T>)> {
219-
// if the reader has seen some of the events in a buffer, find the proper index offset.
220-
// otherwise read all events in the buffer
221-
let a_index = if *last_event_count > events.a_start_event_count {
222-
*last_event_count - events.a_start_event_count
223-
} else {
224-
0
225-
};
226-
let b_index = if *last_event_count > events.b_start_event_count {
227-
*last_event_count - events.b_start_event_count
228-
} else {
229-
0
230-
};
231-
*last_event_count = events.event_count;
232-
match events.state {
233-
State::A => events
234-
.events_b
235-
.get(b_index..)
236-
.unwrap_or_else(|| &[])
237-
.iter()
238-
.map(map_instance_event_with_id)
239-
.chain(
240-
events
241-
.events_a
242-
.get(a_index..)
243-
.unwrap_or_else(|| &[])
244-
.iter()
245-
.map(map_instance_event_with_id),
246-
),
247-
State::B => events
248-
.events_a
249-
.get(a_index..)
250-
.unwrap_or_else(|| &[])
251-
.iter()
252-
.map(map_instance_event_with_id)
253-
.chain(
254-
events
255-
.events_b
256-
.get(b_index..)
257-
.unwrap_or_else(|| &[])
258-
.iter()
259-
.map(map_instance_event_with_id),
260-
),
261-
}
262-
}
263-
264-
impl<'a, T: Component> EventReader<'a, T> {
265-
/// Iterates over the events this EventReader has not seen yet. This updates the EventReader's
266-
/// event counter, which means subsequent event reads will not include events that happened
267-
/// before now.
268-
pub fn iter(&mut self) -> impl DoubleEndedIterator<Item = &T> {
269-
self.iter_with_id().map(|(event, _id)| event)
270-
}
271-
272-
/// Like [`iter`](Self::iter), except also returning the [`EventId`] of the events.
273-
pub fn iter_with_id(&mut self) -> impl DoubleEndedIterator<Item = (&T, EventId<T>)> {
274-
internal_event_reader(&mut self.last_event_count.0, &self.events).map(|(event, id)| {
275-
trace!("EventReader::iter() -> {}", id);
276-
(event, id)
277-
})
278-
}
279-
}
280-
281143
impl<T: Component> Events<T> {
282144
/// "Sends" an `event` by writing it to the current event buffer. [EventReader]s can then read
283145
/// the event.
@@ -390,6 +252,143 @@ impl<T: Component> Events<T> {
390252
}
391253
}
392254

255+
fn map_instance_event_with_id<T>(event_instance: &EventInstance<T>) -> (&T, EventId<T>) {
256+
(&event_instance.event, event_instance.event_id)
257+
}
258+
259+
fn map_instance_event<T>(event_instance: &EventInstance<T>) -> &T {
260+
&event_instance.event
261+
}
262+
263+
/// Like [`iter_with_id`](EventReader::iter_with_id) except not emitting any traces for read
264+
/// messages.
265+
fn internal_event_reader<'a, T>(
266+
last_event_count: &mut usize,
267+
events: &'a Events<T>,
268+
) -> impl DoubleEndedIterator<Item = (&'a T, EventId<T>)> {
269+
// if the reader has seen some of the events in a buffer, find the proper index offset.
270+
// otherwise read all events in the buffer
271+
let a_index = if *last_event_count > events.a_start_event_count {
272+
*last_event_count - events.a_start_event_count
273+
} else {
274+
0
275+
};
276+
let b_index = if *last_event_count > events.b_start_event_count {
277+
*last_event_count - events.b_start_event_count
278+
} else {
279+
0
280+
};
281+
*last_event_count = events.event_count;
282+
match events.state {
283+
State::A => events
284+
.events_b
285+
.get(b_index..)
286+
.unwrap_or_else(|| &[])
287+
.iter()
288+
.map(map_instance_event_with_id)
289+
.chain(
290+
events
291+
.events_a
292+
.get(a_index..)
293+
.unwrap_or_else(|| &[])
294+
.iter()
295+
.map(map_instance_event_with_id),
296+
),
297+
State::B => events
298+
.events_a
299+
.get(a_index..)
300+
.unwrap_or_else(|| &[])
301+
.iter()
302+
.map(map_instance_event_with_id)
303+
.chain(
304+
events
305+
.events_b
306+
.get(b_index..)
307+
.unwrap_or_else(|| &[])
308+
.iter()
309+
.map(map_instance_event_with_id),
310+
),
311+
}
312+
}
313+
/// Sends events of type `T`.
314+
pub struct EventWriter<'a, T: Component> {
315+
events: &'a mut Events<T>,
316+
}
317+
318+
impl<'a, T: Component> SystemParam for EventWriter<'a, T> {
319+
type Fetch = ResMutState<Events<T>>;
320+
}
321+
322+
impl<'a, T: Component> EventWriter<'a, T> {
323+
pub fn new(events: &'a mut Events<T>) -> Self {
324+
EventWriter::<'a, T> { events }
325+
}
326+
327+
pub fn send(&mut self, event: T) {
328+
self.events.send(event);
329+
}
330+
331+
pub fn send_batch(&mut self, events: impl Iterator<Item = T>) {
332+
self.events.extend(events);
333+
}
334+
}
335+
336+
/// Reads events of type `T` in order and tracks which events have already been read.
337+
pub struct EventReader<'a, T: Component> {
338+
last_event_count: Local<'a, (usize, PhantomData<T>)>,
339+
events: &'a Events<T>,
340+
}
341+
342+
impl<'a, T: Component> SystemParam for EventReader<'a, T> {
343+
type Fetch = ResState<Events<T>>;
344+
}
345+
346+
impl<'a, T: Component> EventReader<'a, T> {
347+
/// Iterates over the events this EventReader has not seen yet. This updates the EventReader's
348+
/// event counter, which means subsequent event reads will not include events that happened
349+
/// before now.
350+
pub fn iter(&mut self) -> impl DoubleEndedIterator<Item = &T> {
351+
self.iter_with_id().map(|(event, _id)| event)
352+
}
353+
354+
/// Like [`iter`](Self::iter), except also returning the [`EventId`] of the events.
355+
pub fn iter_with_id(&mut self) -> impl DoubleEndedIterator<Item = (&T, EventId<T>)> {
356+
internal_event_reader(&mut self.last_event_count.0, &self.events).map(|(event, id)| {
357+
trace!("EventReader::iter() -> {}", id);
358+
(event, id)
359+
})
360+
}
361+
}
362+
363+
pub struct ManualEventReader<T> {
364+
last_event_count: usize,
365+
_marker: PhantomData<T>,
366+
}
367+
368+
impl<T> Default for ManualEventReader<T> {
369+
fn default() -> Self {
370+
ManualEventReader {
371+
last_event_count: 0,
372+
_marker: Default::default(),
373+
}
374+
}
375+
}
376+
377+
impl<T> ManualEventReader<T> {
378+
/// See [`EventReader::iter`]
379+
pub fn iter<'a>(&mut self, events: &'a Events<T>) -> impl DoubleEndedIterator<Item = &'a T> {
380+
internal_event_reader(&mut self.last_event_count, events).map(|(e, _)| e)
381+
}
382+
383+
/// See [`EventReader::iter_with_id`]
384+
pub fn iter_with_id<'a>(
385+
&mut self,
386+
events: &'a Events<T>,
387+
) -> impl DoubleEndedIterator<Item = (&'a T, EventId<T>)> {
388+
internal_event_reader(&mut self.last_event_count, events)
389+
}
390+
}
391+
393392
#[cfg(test)]
394393
mod tests {
395394
use super::*;

0 commit comments

Comments
 (0)