MediaWiki
REL1_35
MappedIterator.php
Go to the documentation of this file.
1
<?php
28
class
MappedIterator
extends
FilterIterator {
30
protected
$vCallback
;
32
protected
$aCallback
;
34
protected
$cache
= [];
35
36
protected
$rewound
=
false
;
// boolean; whether rewind() has been called
37
54
public
function
__construct
( $iter,
$vCallback
, array $options = [] ) {
55
if
( is_array( $iter ) ) {
56
$baseIterator =
new
ArrayIterator( $iter );
57
} elseif ( $iter instanceof Iterator ) {
58
$baseIterator = $iter;
59
}
else
{
60
throw
new
UnexpectedValueException(
"Invalid base iterator provided."
);
61
}
62
parent::__construct( $baseIterator );
63
$this->vCallback =
$vCallback
;
64
$this->aCallback = $options[
'accept'
] ??
null
;
65
}
66
67
public
function
next
(): void {
68
$this->cache = [];
69
parent::next();
70
}
71
72
public
function
rewind
(): void {
73
$this->rewound =
true
;
74
$this->cache = [];
75
parent::rewind();
76
}
77
78
public
function
accept
(): bool {
79
$value = call_user_func( $this->vCallback, $this->getInnerIterator()->current() );
80
$ok = ( $this->aCallback ) ? call_user_func( $this->aCallback, $value ) :
true
;
81
if
( $ok ) {
82
$this->cache[
'current'
] = $value;
83
}
84
85
return
$ok;
86
}
87
88
#[\ReturnTypeWillChange]
89
public
function
key
() {
90
$this->init();
91
92
return
parent::key();
93
}
94
95
public
function
valid
(): bool {
96
$this->init();
97
98
return
parent::valid();
99
}
100
101
#[\ReturnTypeWillChange]
102
public
function
current
() {
103
$this->init();
104
if
( parent::valid() ) {
105
return
$this->cache[
'current'
];
106
}
else
{
107
return
null
;
// out of range
108
}
109
}
110
114
protected
function
init
() {
115
if
( !$this->rewound ) {
116
$this->rewind();
117
}
118
}
119
}
MappedIterator
Convenience class for generating iterators from iterators.
Definition
MappedIterator.php:28
MappedIterator\key
key()
Definition
MappedIterator.php:89
MappedIterator\$aCallback
callable $aCallback
Definition
MappedIterator.php:32
MappedIterator\accept
accept()
Definition
MappedIterator.php:78
MappedIterator\__construct
__construct( $iter, $vCallback, array $options=[])
Build an new iterator from a base iterator by having the former wrap the later, returning the result ...
Definition
MappedIterator.php:54
MappedIterator\current
current()
Definition
MappedIterator.php:102
MappedIterator\valid
valid()
Definition
MappedIterator.php:95
MappedIterator\init
init()
Obviate the usual need for rewind() before using a FilterIterator in a manual loop.
Definition
MappedIterator.php:114
MappedIterator\$rewound
$rewound
Definition
MappedIterator.php:36
MappedIterator\$cache
array $cache
Definition
MappedIterator.php:34
MappedIterator\next
next()
Definition
MappedIterator.php:67
MappedIterator\rewind
rewind()
Definition
MappedIterator.php:72
MappedIterator\$vCallback
callable $vCallback
Definition
MappedIterator.php:30
true
return true
Definition
router.php:92
includes
libs
MappedIterator.php
Generated on Sat Apr 6 2024 00:07:23 for MediaWiki by
1.9.8