@@ -328,14 +328,25 @@ impl<T: Component> Events<T> {
328
328
events. update ( ) ;
329
329
}
330
330
331
+ #[ inline]
332
+ fn increment_start_event_count ( & mut self ) {
333
+ let count = self . event_count + 1 ;
334
+ self . a_start_event_count = count;
335
+ self . b_start_event_count = count;
336
+ }
337
+
331
338
/// Removes all events.
339
+ #[ inline]
332
340
pub fn clear ( & mut self ) {
341
+ self . increment_start_event_count ( ) ;
333
342
self . events_a . clear ( ) ;
334
343
self . events_b . clear ( ) ;
335
344
}
336
345
337
346
/// Creates a draining iterator that removes all events.
338
347
pub fn drain ( & mut self ) -> impl Iterator < Item = T > + ' _ {
348
+ self . increment_start_event_count ( ) ;
349
+
339
350
let map = |i : EventInstance < T > | i. event ;
340
351
match self . state {
341
352
State :: A => self
@@ -480,4 +491,40 @@ mod tests {
480
491
) -> Vec < TestEvent > {
481
492
reader. iter ( events) . cloned ( ) . collect :: < Vec < TestEvent > > ( )
482
493
}
494
+
495
+ #[ derive( PartialEq , Eq , Debug ) ]
496
+ struct E ( usize ) ;
497
+
498
+ fn events_clear_and_read_impl ( clear_func : impl FnOnce ( & mut Events < E > ) ) {
499
+ let mut events = Events :: < E > :: default ( ) ;
500
+ let mut reader = events. get_reader ( ) ;
501
+
502
+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
503
+
504
+ events. send ( E ( 0 ) ) ;
505
+ assert_eq ! ( * reader. iter( & events) . next( ) . unwrap( ) , E ( 0 ) ) ;
506
+ assert_eq ! ( reader. iter( & events) . next( ) , None ) ;
507
+
508
+ events. send ( E ( 1 ) ) ;
509
+ clear_func ( & mut events) ;
510
+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
511
+
512
+ events. send ( E ( 2 ) ) ;
513
+ events. update ( ) ;
514
+ events. send ( E ( 3 ) ) ;
515
+
516
+ assert ! ( reader. iter( & events) . eq( [ E ( 2 ) , E ( 3 ) ] . iter( ) ) ) ;
517
+ }
518
+
519
+ #[ test]
520
+ fn test_events_clear_and_read ( ) {
521
+ events_clear_and_read_impl ( |events| events. clear ( ) ) ;
522
+ }
523
+
524
+ #[ test]
525
+ fn test_events_drain_and_read ( ) {
526
+ events_clear_and_read_impl ( |events| {
527
+ assert ! ( events. drain( ) . eq( vec![ E ( 0 ) , E ( 1 ) ] . into_iter( ) ) ) ;
528
+ } ) ;
529
+ }
483
530
}
0 commit comments