16
16
*/
17
17
18
18
import { Path } from '../util/Path' ;
19
- import { log , logger , exceptionGuard } from '../util/util' ;
19
+ import { exceptionGuard , log , logger } from '../util/util' ;
20
20
import { Event } from './Event' ;
21
21
22
22
/**
@@ -45,20 +45,20 @@ export class EventQueue {
45
45
*/
46
46
queueEvents ( eventDataList : Event [ ] ) {
47
47
// We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.
48
- let currList = null ;
48
+ let currList : EventList | null = null ;
49
49
for ( let i = 0 ; i < eventDataList . length ; i ++ ) {
50
- const eventData = eventDataList [ i ] ;
51
- const eventPath = eventData . getPath ( ) ;
52
- if ( currList !== null && ! eventPath . equals ( currList . getPath ( ) ) ) {
50
+ const data = eventDataList [ i ] ;
51
+ const path = data . getPath ( ) ;
52
+ if ( currList !== null && ! path . equals ( currList . path ) ) {
53
53
this . eventLists_ . push ( currList ) ;
54
54
currList = null ;
55
55
}
56
56
57
57
if ( currList === null ) {
58
- currList = new EventList ( eventPath ) ;
58
+ currList = { events : [ ] , path } ;
59
59
}
60
60
61
- currList . add ( eventData ) ;
61
+ currList . events . push ( data ) ;
62
62
}
63
63
if ( currList ) {
64
64
this . eventLists_ . push ( currList ) ;
@@ -107,9 +107,20 @@ export class EventQueue {
107
107
for ( let i = 0 ; i < this . eventLists_ . length ; i ++ ) {
108
108
const eventList = this . eventLists_ [ i ] ;
109
109
if ( eventList ) {
110
- const eventPath = eventList . getPath ( ) ;
110
+ const eventPath = eventList . path ;
111
111
if ( predicate ( eventPath ) ) {
112
- this . eventLists_ [ i ] . raise ( ) ;
112
+ eventListRaise ( this . eventLists_ [ i ] ) ;
113
+ for ( let i1 = 0 ; i1 < this . eventLists_ [ i ] . events . length ; i1 ++ ) {
114
+ const eventData = this . eventLists_ [ i ] . events [ i1 ] ;
115
+ if ( eventData !== null ) {
116
+ this . eventLists_ [ i ] . events [ i1 ] = null ;
117
+ const eventFn = eventData . getEventRunner ( ) ;
118
+ if ( logger ) {
119
+ log ( 'event: ' + eventData . toString ( ) ) ;
120
+ }
121
+ exceptionGuard ( eventFn ) ;
122
+ }
123
+ }
113
124
this . eventLists_ [ i ] = null ;
114
125
} else {
115
126
sentAll = false ;
@@ -125,33 +136,24 @@ export class EventQueue {
125
136
}
126
137
}
127
138
128
- export class EventList {
129
- private events_ : Event [ ] = [ ] ;
130
-
131
- constructor ( private readonly path_ : Path ) { }
132
-
133
- add ( eventData : Event ) {
134
- this . events_ . push ( eventData ) ;
135
- }
139
+ interface EventList {
140
+ events : Event [ ] ;
141
+ path : Path ;
142
+ }
136
143
137
- /**
138
- * Iterates through the list and raises each event
139
- */
140
- raise ( ) {
141
- for ( let i = 0 ; i < this . events_ . length ; i ++ ) {
142
- const eventData = this . events_ [ i ] ;
143
- if ( eventData !== null ) {
144
- this . events_ [ i ] = null ;
145
- const eventFn = eventData . getEventRunner ( ) ;
146
- if ( logger ) {
147
- log ( 'event: ' + eventData . toString ( ) ) ;
148
- }
149
- exceptionGuard ( eventFn ) ;
144
+ /**
145
+ * Iterates through the list and raises each event
146
+ */
147
+ function eventListRaise ( eventList : EventList ) {
148
+ for ( let i = 0 ; i < eventList . events . length ; i ++ ) {
149
+ const eventData = eventList . events [ i ] ;
150
+ if ( eventData !== null ) {
151
+ eventList . events [ i ] = null ;
152
+ const eventFn = eventData . getEventRunner ( ) ;
153
+ if ( logger ) {
154
+ log ( 'event: ' + eventData . toString ( ) ) ;
150
155
}
156
+ exceptionGuard ( eventFn ) ;
151
157
}
152
158
}
153
-
154
- getPath ( ) : Path {
155
- return this . path_ ;
156
- }
157
159
}
0 commit comments