Skip to content

Commit ffdd605

Browse files
committed
Implement Events::extend with Vec::extend
Problem: - Events::extend manually called Vec::push for each element of the provided iterator. - This can potentially be an expensive. Solution: - Use Vec::extend over a Vec::push for loop.
1 parent 06d26e5 commit ffdd605

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

crates/bevy_ecs/src/event.rs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -145,20 +145,7 @@ impl<T: Component> Events<T> {
145145
/// "Sends" an `event` by writing it to the current event buffer. [EventReader]s can then read
146146
/// the event.
147147
pub fn send(&mut self, event: T) {
148-
let event_id = EventId {
149-
id: self.event_count,
150-
_marker: PhantomData,
151-
};
152-
trace!("Events::send() -> {}", event_id);
153-
154-
let event_instance = EventInstance { event_id, event };
155-
156-
match self.state {
157-
BufferState::A => self.events_a.push(event_instance),
158-
BufferState::B => self.events_b.push(event_instance),
159-
}
160-
161-
self.event_count += 1;
148+
self.extend(std::iter::once(event));
162149
}
163150

164151
/// Gets a new [ManualEventReader]. This will include all events already in the event buffers.
@@ -235,9 +222,25 @@ impl<T: Component> Events<T> {
235222
where
236223
I: Iterator<Item = T>,
237224
{
238-
for event in events {
239-
self.send(event);
225+
let mut event_count = self.event_count;
226+
let events = events.map(|event| {
227+
let event_id = EventId {
228+
id: event_count,
229+
_marker: PhantomData,
230+
};
231+
event_count += 1;
232+
EventInstance { event_id, event }
233+
});
234+
match self.state {
235+
BufferState::A => self.events_a.extend(events),
236+
BufferState::B => self.events_b.extend(events),
240237
}
238+
trace!(
239+
"Events::extend() -> [{}, {})",
240+
self.event_count,
241+
event_count
242+
);
243+
self.event_count = event_count;
241244
}
242245

243246
/// Iterates over events that happened since the last "update" call.

0 commit comments

Comments
 (0)