Skip to content

Commit 67afc54

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 987a62f commit 67afc54

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.
@@ -228,9 +215,25 @@ impl<T: Component> Events<T> {
228215
where
229216
I: Iterator<Item = T>,
230217
{
231-
for event in events {
232-
self.send(event);
218+
let mut event_count = self.event_count;
219+
let events = events.map(|event| {
220+
let event_id = EventId {
221+
id: event_count,
222+
_marker: PhantomData,
223+
};
224+
event_count += 1;
225+
EventInstance { event_id, event }
226+
});
227+
match self.state {
228+
BufferState::A => self.events_a.extend(events),
229+
BufferState::B => self.events_b.extend(events),
233230
}
231+
trace!(
232+
"Events::extend() -> [{}, {})",
233+
self.event_count,
234+
event_count
235+
);
236+
self.event_count = event_count;
234237
}
235238

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

0 commit comments

Comments
 (0)