@@ -837,6 +837,23 @@ public function popArray(): Type
837
837
return $ this ->removeLastElements (1 );
838
838
}
839
839
840
+ private function reverseConstantArray (TrinaryLogic $ preserveKeys ): self
841
+ {
842
+ $ keyTypesReversed = array_reverse ($ this ->keyTypes , true );
843
+ $ keyTypes = array_values ($ keyTypesReversed );
844
+ $ keyTypesReversedKeys = array_keys ($ keyTypesReversed );
845
+ $ optionalKeys = array_map (static fn (int $ optionalKey ): int => $ keyTypesReversedKeys [$ optionalKey ], $ this ->optionalKeys );
846
+
847
+ $ reversed = new self ($ keyTypes , array_reverse ($ this ->valueTypes ), $ this ->nextAutoIndexes , $ optionalKeys , TrinaryLogic::createNo ());
848
+
849
+ return $ preserveKeys ->yes () ? $ reversed : $ reversed ->reindex ();
850
+ }
851
+
852
+ public function reverseArray (TrinaryLogic $ preserveKeys ): Type
853
+ {
854
+ return $ this ->reverseConstantArray ($ preserveKeys );
855
+ }
856
+
840
857
public function searchArray (Type $ needleType ): Type
841
858
{
842
859
$ matches = [];
@@ -1121,9 +1138,9 @@ public function slice(int $offset, ?int $limit, bool $preserveKeys = false): sel
1121
1138
$ offset *= -1 ;
1122
1139
$ reversedLimit = min ($ limit , $ offset );
1123
1140
$ reversedOffset = $ offset - $ reversedLimit ;
1124
- return $ this ->reverse ( true )
1141
+ return $ this ->reverseConstantArray (TrinaryLogic:: createYes () )
1125
1142
->slice ($ reversedOffset , $ reversedLimit , $ preserveKeys )
1126
- ->reverse ( true );
1143
+ ->reverseConstantArray (TrinaryLogic:: createYes () );
1127
1144
}
1128
1145
1129
1146
if ($ offset > 0 ) {
@@ -1162,16 +1179,10 @@ public function slice(int $offset, ?int $limit, bool $preserveKeys = false): sel
1162
1179
return $ preserveKeys ? $ slice : $ slice ->reindex ();
1163
1180
}
1164
1181
1182
+ /** @deprecated Use reverseArray() instead */
1165
1183
public function reverse (bool $ preserveKeys = false ): self
1166
1184
{
1167
- $ keyTypesReversed = array_reverse ($ this ->keyTypes , true );
1168
- $ keyTypes = array_values ($ keyTypesReversed );
1169
- $ keyTypesReversedKeys = array_keys ($ keyTypesReversed );
1170
- $ optionalKeys = array_map (static fn (int $ optionalKey ): int => $ keyTypesReversedKeys [$ optionalKey ], $ this ->optionalKeys );
1171
-
1172
- $ reversed = new self ($ keyTypes , array_reverse ($ this ->valueTypes ), $ this ->nextAutoIndexes , $ optionalKeys , TrinaryLogic::createNo ());
1173
-
1174
- return $ preserveKeys ? $ reversed : $ reversed ->reindex ();
1185
+ return $ this ->reverseConstantArray (TrinaryLogic::createFromBoolean ($ preserveKeys ));
1175
1186
}
1176
1187
1177
1188
/** @param positive-int $length */
0 commit comments