Below is current version of function removeStorage:
function removeStorage(string[] storage A, string memory a)
internal
{
(uint256 index, bool isIn) = indexOf(A, a);
if (!isIn) {
revert("String not in array.");
} else {
uint256 lastIndex = A.length - 1; // If the array would be empty, the previous line would throw, so no underflow here
if (index != lastIndex) { A[index] = A[lastIndex]; }
A.pop();
}
}
When isIn is ture, then value a is in array A, so array A is not empty, A.length > 0, uint256 lastIndex = A.length - 1; will not underflow. And if not check (index != lastIndex) will save gas in most cases.
Below is current version of function removeStorage:
When
isIn
is ture, then value a is in array A, so array A is not empty, A.length > 0,uint256 lastIndex = A.length - 1;
will not underflow. And if not check(index != lastIndex)
will save gas in most cases.