xref: /php-src/ext/spl/spl_iterators.stub.php (revision f0757100)
1<?php
2
3/** @generate-class-entries */
4
5class EmptyIterator implements Iterator
6{
7    /** @tentative-return-type */
8    public function current(): never {}
9
10    /** @tentative-return-type */
11    public function next(): void {}
12
13    /** @tentative-return-type */
14    public function key(): never {}
15
16    /** @tentative-return-type */
17    public function valid(): false {}
18
19    /** @tentative-return-type */
20    public function rewind(): void {}
21}
22
23class CallbackFilterIterator extends FilterIterator
24{
25    public function __construct(Iterator $iterator, callable $callback) {}
26
27    /** @tentative-return-type */
28    public function accept(): bool {}
29}
30
31class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator
32{
33    public function __construct(RecursiveIterator $iterator, callable $callback) {}
34
35    /**
36     * @tentative-return-type
37     * @implementation-alias RecursiveFilterIterator::hasChildren
38     */
39    public function hasChildren(): bool {}
40
41    /** @tentative-return-type */
42    public function getChildren(): RecursiveCallbackFilterIterator {}
43}
44
45interface RecursiveIterator extends Iterator
46{
47    /** @tentative-return-type */
48    public function hasChildren(): bool;
49
50    /** @tentative-return-type */
51    public function getChildren(): ?RecursiveIterator;
52}
53
54class RecursiveIteratorIterator implements OuterIterator
55{
56    /** @cvalue RIT_LEAVES_ONLY */
57    public const int LEAVES_ONLY = UNKNOWN;
58    /** @cvalue RIT_SELF_FIRST */
59    public const int SELF_FIRST = UNKNOWN;
60    /** @cvalue RIT_CHILD_FIRST */
61    public const int CHILD_FIRST = UNKNOWN;
62    /** @cvalue RIT_CATCH_GET_CHILD */
63    public const int CATCH_GET_CHILD = UNKNOWN;
64
65    public function __construct(Traversable $iterator, int $mode = RecursiveIteratorIterator::LEAVES_ONLY, int $flags = 0) {}
66
67    /** @tentative-return-type */
68    public function rewind(): void {}
69
70    /** @tentative-return-type */
71    public function valid(): bool {}
72
73    /** @tentative-return-type */
74    public function key(): mixed {}
75
76    /** @tentative-return-type */
77    public function current(): mixed {}
78
79    /** @tentative-return-type */
80    public function next(): void {}
81
82    /** @tentative-return-type */
83    public function getDepth(): int {}
84
85    /** @tentative-return-type */
86    public function getSubIterator(?int $level = null): ?RecursiveIterator {}
87
88    /** @tentative-return-type */
89    public function getInnerIterator(): RecursiveIterator {}
90
91    /** @tentative-return-type */
92    public function beginIteration(): void {}
93
94    /** @tentative-return-type */
95    public function endIteration(): void {}
96
97    /** @tentative-return-type */
98    public function callHasChildren(): bool {}
99
100    /** @tentative-return-type */
101    public function callGetChildren(): ?RecursiveIterator {}
102
103    /** @tentative-return-type */
104    public function beginChildren(): void {}
105
106    /** @tentative-return-type */
107    public function endChildren(): void {}
108
109    /** @tentative-return-type */
110    public function nextElement(): void {}
111
112    /** @tentative-return-type */
113    public function setMaxDepth(int $maxDepth = -1): void {}
114
115    /** @tentative-return-type */
116    public function getMaxDepth(): int|false {}
117}
118
119interface OuterIterator extends Iterator
120{
121    /** @tentative-return-type */
122    public function getInnerIterator(): ?Iterator;
123}
124
125class IteratorIterator implements OuterIterator
126{
127    public function __construct(Traversable $iterator, ?string $class = null) {}
128
129    /** @tentative-return-type */
130    public function getInnerIterator(): ?Iterator {}
131
132    /** @tentative-return-type */
133    public function rewind(): void {}
134
135    /** @tentative-return-type */
136    public function valid(): bool {}
137
138    /** @tentative-return-type */
139    public function key(): mixed {}
140
141    /** @tentative-return-type */
142    public function current(): mixed {}
143
144    /** @tentative-return-type */
145    public function next(): void {}
146}
147
148abstract class FilterIterator extends IteratorIterator
149{
150    /** @tentative-return-type */
151    abstract public function accept(): bool;
152
153    public function __construct(Iterator $iterator) {}
154
155    /** @tentative-return-type */
156    public function rewind(): void {}
157
158    /** @tentative-return-type */
159    public function next(): void {}
160}
161
162abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator
163{
164    public function __construct(RecursiveIterator $iterator) {}
165
166    /** @tentative-return-type */
167    public function hasChildren(): bool {}
168
169    /** @tentative-return-type */
170    public function getChildren(): ?RecursiveFilterIterator {}
171}
172
173class ParentIterator extends RecursiveFilterIterator
174{
175    public function __construct(RecursiveIterator $iterator) {}
176
177    /**
178     * @tentative-return-type
179     * @implementation-alias RecursiveFilterIterator::hasChildren
180     */
181    public function accept(): bool {}
182}
183
184interface SeekableIterator extends Iterator
185{
186    /** @tentative-return-type */
187    public function seek(int $offset): void;
188}
189
190class LimitIterator extends IteratorIterator
191{
192    public function __construct(Iterator $iterator, int $offset = 0, int $limit = -1) {}
193
194    /** @tentative-return-type */
195    public function rewind(): void {}
196
197    /** @tentative-return-type */
198    public function valid(): bool {}
199
200    /** @tentative-return-type */
201    public function next(): void {}
202
203    /** @tentative-return-type */
204    public function seek(int $offset): int {}
205
206    /** @tentative-return-type */
207    public function getPosition(): int {}
208}
209
210class CachingIterator extends IteratorIterator implements ArrayAccess, Countable, Stringable
211{
212    /** @cvalue CIT_CALL_TOSTRING */
213    public const int CALL_TOSTRING = UNKNOWN;
214    /** @cvalue CIT_CATCH_GET_CHILD */
215    public const int CATCH_GET_CHILD = UNKNOWN;
216    /** @cvalue CIT_TOSTRING_USE_KEY */
217    public const int TOSTRING_USE_KEY = UNKNOWN;
218    /** @cvalue CIT_TOSTRING_USE_CURRENT */
219    public const int TOSTRING_USE_CURRENT = UNKNOWN;
220    /** @cvalue CIT_TOSTRING_USE_INNER */
221    public const int TOSTRING_USE_INNER = UNKNOWN;
222    /** @cvalue CIT_FULL_CACHE */
223    public const int FULL_CACHE = UNKNOWN;
224
225    public function __construct(Iterator $iterator, int $flags = CachingIterator::CALL_TOSTRING) {}
226
227    /** @tentative-return-type */
228    public function rewind(): void {}
229
230    /** @tentative-return-type */
231    public function valid(): bool {}
232
233    /** @tentative-return-type */
234    public function next(): void {}
235
236    /** @tentative-return-type */
237    public function hasNext(): bool {}
238
239    public function __toString(): string {}
240
241    /** @tentative-return-type */
242    public function getFlags(): int {}
243
244    /** @tentative-return-type */
245    public function setFlags(int $flags): void {}
246
247    /**
248     * @param string $key
249     * @tentative-return-type
250     */
251    public function offsetGet($key): mixed {}
252
253    /**
254     * @param string $key
255     * @tentative-return-type
256     */
257    public function offsetSet($key, mixed $value): void {}
258
259    /**
260     * @param string $key
261     * @tentative-return-type
262     */
263    public function offsetUnset($key): void {}
264
265    /**
266     * @param string $key
267     * @tentative-return-type
268     */
269    public function offsetExists($key): bool {}
270
271    /** @tentative-return-type */
272    public function getCache(): array {}
273
274    /** @tentative-return-type */
275    public function count(): int {}
276}
277
278class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator
279{
280    public function __construct(Iterator $iterator, int $flags = RecursiveCachingIterator::CALL_TOSTRING) {}
281
282    /** @tentative-return-type */
283    public function hasChildren(): bool {}
284
285    /** @tentative-return-type */
286    public function getChildren(): ?RecursiveCachingIterator {}
287}
288
289class NoRewindIterator extends IteratorIterator
290{
291    public function __construct(Iterator $iterator) {}
292
293    /** @tentative-return-type */
294    public function rewind(): void {}
295
296    /** @tentative-return-type */
297    public function valid(): bool {}
298
299    /** @tentative-return-type */
300    public function key(): mixed {}
301
302    /** @tentative-return-type */
303    public function current(): mixed {}
304
305    /** @tentative-return-type */
306    public function next(): void {}
307}
308
309class AppendIterator extends IteratorIterator
310{
311    public function __construct() {}
312
313    /** @tentative-return-type */
314    public function append(Iterator $iterator): void {}
315
316    /** @tentative-return-type */
317    public function rewind(): void {}
318
319    /** @tentative-return-type */
320    public function valid(): bool {}
321
322    /** @tentative-return-type */
323    public function current(): mixed {}
324
325    /** @tentative-return-type */
326    public function next(): void {}
327
328    /** @tentative-return-type */
329    public function getIteratorIndex(): ?int {}
330
331    /** @tentative-return-type */
332    public function getArrayIterator(): ArrayIterator {}
333}
334
335class InfiniteIterator extends IteratorIterator
336{
337    public function __construct(Iterator $iterator) {}
338
339    /** @tentative-return-type */
340    public function next(): void {}
341}
342
343class RegexIterator extends FilterIterator
344{
345    /** @cvalue REGIT_USE_KEY */
346    public const int USE_KEY = UNKNOWN;
347    /** @cvalue REGIT_INVERTED */
348    public const int INVERT_MATCH = UNKNOWN;
349    /** @cvalue REGIT_MODE_MATCH */
350    public const int MATCH = UNKNOWN;
351    /** @cvalue REGIT_MODE_GET_MATCH */
352    public const int GET_MATCH = UNKNOWN;
353    /** @cvalue REGIT_MODE_ALL_MATCHES */
354    public const int ALL_MATCHES = UNKNOWN;
355    /** @cvalue REGIT_MODE_SPLIT */
356    public const int SPLIT = UNKNOWN;
357    /** @cvalue REGIT_MODE_REPLACE */
358    public const int REPLACE = UNKNOWN;
359
360    public ?string $replacement = null;
361
362    public function __construct(Iterator $iterator, string $pattern, int $mode = RegexIterator::MATCH, int $flags = 0, int $pregFlags = 0) {}
363
364    /** @tentative-return-type */
365    public function accept(): bool {}
366
367    /** @tentative-return-type */
368    public function getMode(): int {}
369
370    /** @tentative-return-type */
371    public function setMode(int $mode): void {}
372
373    /** @tentative-return-type */
374    public function getFlags(): int {}
375
376    /** @tentative-return-type */
377    public function setFlags(int $flags): void {}
378
379    /** @tentative-return-type */
380    public function getRegex(): string {}
381
382    /** @tentative-return-type */
383    public function getPregFlags(): int {}
384
385    /** @tentative-return-type */
386    public function setPregFlags(int $pregFlags): void {}
387}
388
389class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator
390{
391    public function __construct(RecursiveIterator $iterator, string $pattern, int $mode = RecursiveRegexIterator::MATCH, int $flags = 0, int $pregFlags = 0) {}
392
393    /** @tentative-return-type */
394    public function accept(): bool {}
395
396    /**
397     * @tentative-return-type
398     * @implementation-alias RecursiveFilterIterator::hasChildren
399     */
400    public function hasChildren(): bool {}
401
402    /** @tentative-return-type */
403    public function getChildren(): RecursiveRegexIterator {}
404}
405
406class RecursiveTreeIterator extends RecursiveIteratorIterator
407{
408    /** @cvalue RTIT_BYPASS_CURRENT */
409    public const int BYPASS_CURRENT = UNKNOWN;
410    /** @cvalue RTIT_BYPASS_KEY */
411    public const int BYPASS_KEY = UNKNOWN;
412
413    public const int PREFIX_LEFT = 0;
414
415    public const int PREFIX_MID_HAS_NEXT = 1;
416
417    public const int PREFIX_MID_LAST = 2;
418
419    public const int PREFIX_END_HAS_NEXT = 3;
420
421    public const int PREFIX_END_LAST = 4;
422
423    public const int PREFIX_RIGHT = 5;
424
425    /** @param RecursiveIterator|IteratorAggregate $iterator */
426    public function __construct(
427        $iterator,
428        int $flags = RecursiveTreeIterator::BYPASS_KEY,
429        int $cachingIteratorFlags = CachingIterator::CATCH_GET_CHILD,
430        int $mode = RecursiveTreeIterator::SELF_FIRST
431    ) {}
432
433    /** @tentative-return-type */
434    public function key(): mixed {}
435
436    /** @tentative-return-type */
437    public function current(): mixed {}
438
439    /** @tentative-return-type */
440    public function getPrefix(): string {}
441
442    /** @tentative-return-type */
443    public function setPostfix(string $postfix): void {}
444
445    /** @tentative-return-type */
446    public function setPrefixPart(int $part, string $value): void {}
447
448    /** @tentative-return-type */
449    public function getEntry(): string {}
450
451    /** @tentative-return-type */
452    public function getPostfix(): string {}
453}
454