SetProtocol / set-protocol-v2

Set Protocol V2
118 stars 94 forks source link

perf: simplify function removeStorage #233

Open gzliudan opened 2 years ago

gzliudan commented 2 years ago

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.