Optimize LibAddressArray and update CHANGELOG
This commit is contained in:
		| @@ -517,3 +517,4 @@ describe('Coordinator tests', () => { | |||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
|  | // tslint:disable:max-file-line-count | ||||||
|   | |||||||
| @@ -5,6 +5,10 @@ | |||||||
|             { |             { | ||||||
|                 "note": "Set evmVersion to byzantium", |                 "note": "Set evmVersion to byzantium", | ||||||
|                 "pr": 1678 |                 "pr": 1678 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Optimize loops in LibAddressArray", | ||||||
|  |                 "pr": 1668 | ||||||
|             } |             } | ||||||
|         ] |         ] | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -99,19 +99,21 @@ library LibAddressArray { | |||||||
|             let arrayByteLen := mul(mload(addressArray), 32) |             let arrayByteLen := mul(mload(addressArray), 32) | ||||||
|             // Calculate beginning of array contents |             // Calculate beginning of array contents | ||||||
|             let arrayContentsStart := add(addressArray, 32) |             let arrayContentsStart := add(addressArray, 32) | ||||||
|  |             // Calclulate end of array contents | ||||||
|  |             let arrayContentsEnd := add(arrayContentsStart, arrayByteLen) | ||||||
|  |  | ||||||
|             // Loop through array |             // Loop through array | ||||||
|             for {let i:= 0} lt(i, arrayByteLen) {i := add(i, 32)} { |             for {let i:= arrayContentsStart} lt(i, arrayContentsEnd) {i := add(i, 32)} { | ||||||
|  |  | ||||||
|                 // Load array element |                 // Load array element | ||||||
|                 let arrayElement := mload(add(arrayContentsStart, i)) |                 let arrayElement := mload(i) | ||||||
|  |  | ||||||
|                 // Return true if array element equals target |                 // Return true if array element equals target | ||||||
|                 if eq(target, arrayElement) { |                 if eq(target, arrayElement) { | ||||||
|                     // Set success to true |                     // Set success to true | ||||||
|                     success := 1 |                     success := 1 | ||||||
|                     // Break loop |                     // Break loop | ||||||
|                     i := arrayByteLen |                     i := arrayContentsEnd | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -133,12 +135,14 @@ library LibAddressArray { | |||||||
|             let arrayByteLen := mul(mload(addressArray), 32) |             let arrayByteLen := mul(mload(addressArray), 32) | ||||||
|             // Calculate beginning of array contents |             // Calculate beginning of array contents | ||||||
|             let arrayContentsStart := add(addressArray, 32) |             let arrayContentsStart := add(addressArray, 32) | ||||||
|  |             // Calclulate end of array contents | ||||||
|  |             let arrayContentsEnd := add(arrayContentsStart, arrayByteLen) | ||||||
|  |  | ||||||
|             // Loop through array |             // Loop through array | ||||||
|             for {let i:= 0} lt(i, arrayByteLen) {i := add(i, 32)} { |             for {let i:= arrayContentsStart} lt(i, arrayContentsEnd) {i := add(i, 32)} { | ||||||
|  |  | ||||||
|                 // Load array element |                 // Load array element | ||||||
|                 let arrayElement := mload(add(arrayContentsStart, i)) |                 let arrayElement := mload(i) | ||||||
|  |  | ||||||
|                 // Return true if array element equals target |                 // Return true if array element equals target | ||||||
|                 if eq(target, arrayElement) { |                 if eq(target, arrayElement) { | ||||||
| @@ -146,7 +150,7 @@ library LibAddressArray { | |||||||
|                     success := 1 |                     success := 1 | ||||||
|                     index := div(i, 32) |                     index := div(i, 32) | ||||||
|                     // Break loop |                     // Break loop | ||||||
|                     i := arrayByteLen |                     i := arrayContentsEnd | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user