@@ -208,46 +208,54 @@ ZEND_API int zend_llist_count(zend_llist *l)
208
208
}
209
209
210
210
211
- ZEND_API void * zend_llist_get_first (zend_llist * l )
211
+ ZEND_API void * zend_llist_get_first_ex (zend_llist * l , zend_llist_position * pos )
212
212
{
213
- l -> traverse_ptr = l -> head ;
214
- if (l -> traverse_ptr ) {
215
- return l -> traverse_ptr -> data ;
213
+ zend_llist_position * current = pos ? pos : & l -> traverse_ptr ;
214
+
215
+ * current = l -> head ;
216
+ if (* current ) {
217
+ return (* current )-> data ;
216
218
} else {
217
219
return NULL ;
218
220
}
219
221
}
220
222
221
223
222
- ZEND_API void * zend_llist_get_last (zend_llist * l )
224
+ ZEND_API void * zend_llist_get_last_ex (zend_llist * l , zend_llist_position * pos )
223
225
{
224
- l -> traverse_ptr = l -> tail ;
225
- if (l -> traverse_ptr ) {
226
- return l -> traverse_ptr -> data ;
226
+ zend_llist_position * current = pos ? pos : & l -> traverse_ptr ;
227
+
228
+ * current = l -> tail ;
229
+ if (* current ) {
230
+ return (* current )-> data ;
227
231
} else {
228
232
return NULL ;
229
233
}
230
234
}
231
235
232
236
233
- ZEND_API void * zend_llist_get_next (zend_llist * l )
237
+ ZEND_API void * zend_llist_get_next_ex (zend_llist * l , zend_llist_position * pos )
234
238
{
235
- if (l -> traverse_ptr ) {
236
- l -> traverse_ptr = l -> traverse_ptr -> next ;
237
- if (l -> traverse_ptr ) {
238
- return l -> traverse_ptr -> data ;
239
+ zend_llist_position * current = pos ? pos : & l -> traverse_ptr ;
240
+
241
+ if (* current ) {
242
+ * current = (* current )-> next ;
243
+ if (* current ) {
244
+ return (* current )-> data ;
239
245
}
240
246
}
241
247
return NULL ;
242
248
}
243
249
244
250
245
- ZEND_API void * zend_llist_get_prev (zend_llist * l )
251
+ ZEND_API void * zend_llist_get_prev_ex (zend_llist * l , zend_llist_position * pos )
246
252
{
247
- if (l -> traverse_ptr ) {
248
- l -> traverse_ptr = l -> traverse_ptr -> prev ;
249
- if (l -> traverse_ptr ) {
250
- return l -> traverse_ptr -> data ;
253
+ zend_llist_position * current = pos ? pos : & l -> traverse_ptr ;
254
+
255
+ if (* current ) {
256
+ * current = (* current )-> prev ;
257
+ if (* current ) {
258
+ return (* current )-> data ;
251
259
}
252
260
}
253
261
return NULL ;
0 commit comments