@@ -47,6 +47,14 @@ public static function fromMembers(iterable $members = []): self
47
47
return new self (...$ newMembers );
48
48
}
49
49
50
+ private static function filterMember (InnerList |Item |ByteSequence |Token |bool |int |float |string $ member ): InnerList |Item
51
+ {
52
+ return match (true ) {
53
+ $ member instanceof InnerList, $ member instanceof Item => $ member ,
54
+ default => Item::from ($ member ),
55
+ };
56
+ }
57
+
50
58
/**
51
59
* Returns an instance from an HTTP textual representation.
52
60
*
@@ -116,14 +124,6 @@ public function unshift(InnerList|Item|ByteSequence|Token|bool|int|float|string
116
124
$ this ->members = [...array_map (self ::filterMember (...), $ members ), ...$ this ->members ];
117
125
}
118
126
119
- private static function filterMember (InnerList |Item |ByteSequence |Token |bool |int |float |string $ member ): InnerList |Item
120
- {
121
- return match (true ) {
122
- $ member instanceof InnerList, $ member instanceof Item => $ member ,
123
- default => Item::from ($ member ),
124
- };
125
- }
126
-
127
127
/**
128
128
* Insert members at the end of the list.
129
129
*/
@@ -157,25 +157,30 @@ public function insert(
157
157
*/
158
158
public function replace (int $ index , InnerList |Item |ByteSequence |Token |bool |int |float |string $ member ): void
159
159
{
160
- if (! $ this ->has ($ index )) {
160
+ if (null === ( $ offset = $ this ->filterIndex ($ index) )) {
161
161
throw InvalidOffset::dueToIndexNotFound ($ index );
162
162
}
163
163
164
- $ this ->members [$ this -> filterIndex ( $ index ) ] = self ::filterMember ($ member );
164
+ $ this ->members [$ offset ] = self ::filterMember ($ member );
165
165
}
166
166
167
167
/**
168
168
* Delete members associated with the list of instance indexes.
169
169
*/
170
170
public function remove (int ...$ indexes ): void
171
171
{
172
- foreach (array_map (fn (int $ index ): int |null => $ this ->filterIndex ($ index ), $ indexes ) as $ index ) {
173
- if (null !== $ index ) {
174
- unset($ this ->members [$ index ]);
175
- }
172
+ $ offsets = array_filter (
173
+ array_map (fn (int $ index ): int |null => $ this ->filterIndex ($ index ), $ indexes ),
174
+ fn (int |null $ index ): bool => null !== $ index
175
+ );
176
+
177
+ foreach ($ offsets as $ offset ) {
178
+ unset($ this ->members [$ offset ]);
176
179
}
177
180
178
- $ this ->members = array_values ($ this ->members );
181
+ if ([] !== $ offsets ) {
182
+ $ this ->members = array_values ($ this ->members );
183
+ }
179
184
}
180
185
181
186
/**
0 commit comments