30
30
(da)->items[(da)->count++] = (item); \
31
31
} while (0)
32
32
33
- #define da_swap (type , da , i , j ) \
34
- do { \
35
- type t = (da)->items[(i)]; \
36
- (da)->items[(i)] = (da)->items[(j)]; \
37
- (da)->items[(j)] = t; \
38
- } while(0)
39
-
40
- #define da_remove_unordered (type , da , i ) \
41
- do { \
42
- da_swap(type, (da), (i), (da)->count-1); \
43
- (da)->count -= 1; \
33
+ #define da_remove_unordered (da , i ) \
34
+ do { \
35
+ size_t j = (i); \
36
+ assert(j < (da)->count); \
37
+ (da)->items[j] = (da)->items[--(da)->count]; \
44
38
} while(0)
45
39
46
40
#define TODO (message ) do { fprintf(stderr, "%s:%d: TODO: %s\n", __FILE__, __LINE__, message); abort(); } while(0)
@@ -180,14 +174,14 @@ void coroutine_switch_context(void *rsp, Sleep_Mode sm, int fd)
180
174
da_append (& asleep , active .items [current ]);
181
175
struct pollfd pfd = {.fd = fd , .events = POLLRDNORM ,};
182
176
da_append (& polls , pfd );
183
- da_remove_unordered (size_t , & active , current );
177
+ da_remove_unordered (& active , current );
184
178
} break ;
185
179
186
180
case SM_WRITE : {
187
181
da_append (& asleep , active .items [current ]);
188
182
struct pollfd pfd = {.fd = fd , .events = POLLWRNORM ,};
189
183
da_append (& polls , pfd );
190
- da_remove_unordered (size_t , & active , current );
184
+ da_remove_unordered (& active , current );
191
185
} break ;
192
186
193
187
default : UNREACHABLE ("coroutine_switch_context" );
@@ -201,8 +195,8 @@ void coroutine_switch_context(void *rsp, Sleep_Mode sm, int fd)
201
195
for (size_t i = 0 ; i < polls .count ;) {
202
196
if (polls .items [i ].revents ) {
203
197
size_t id = asleep .items [i ];
204
- da_remove_unordered (struct pollfd , & polls , i );
205
- da_remove_unordered (size_t , & asleep , i );
198
+ da_remove_unordered (& polls , i );
199
+ da_remove_unordered (& asleep , i );
206
200
da_append (& active , id );
207
201
} else {
208
202
++ i ;
@@ -242,7 +236,7 @@ void coroutine_finish(void)
242
236
243
237
contexts_ .items [active .items [current ]].dead = true;
244
238
da_append (& dead , active .items [current ]);
245
- da_remove_unordered (size_t , & active , current );
239
+ da_remove_unordered (& active , current );
246
240
247
241
if (polls .count > 0 ) {
248
242
int timeout = active .count == 0 ? -1 : 0 ;
@@ -252,8 +246,8 @@ void coroutine_finish(void)
252
246
for (size_t i = 0 ; i < polls .count ;) {
253
247
if (polls .items [i ].revents ) {
254
248
size_t id = asleep .items [i ];
255
- da_remove_unordered (struct pollfd , & polls , i );
256
- da_remove_unordered (size_t , & asleep , i );
249
+ da_remove_unordered (& polls , i );
250
+ da_remove_unordered (& asleep , i );
257
251
da_append (& active , id );
258
252
} else {
259
253
++ i ;
0 commit comments