diff options
author | Amir Bandeali <abandeali1@gmail.com> | 2018-05-23 07:57:02 +0800 |
---|---|---|
committer | Amir Bandeali <abandeali1@gmail.com> | 2018-05-31 08:11:30 +0800 |
commit | ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41 (patch) | |
tree | 957b18cbfe92c8f08db607b4af30fdc793c3a140 /packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol | |
parent | fc5c598f8f6cc9c17407c8078101fa07356aa257 (diff) | |
download | dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.tar dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.tar.gz dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.tar.bz2 dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.tar.lz dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.tar.xz dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.tar.zst dexon-sol-tools-ecdd0ce9f2378a1ac271b9eb5661a6d37d6edf41.zip |
Update Whitelist
Diffstat (limited to 'packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol')
-rw-r--r-- | packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol b/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol index f0a622fe4..df2221c93 100644 --- a/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol +++ b/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol @@ -32,19 +32,23 @@ contract LibBytes { /// @return The byte that was popped off. function popByte(bytes memory b) internal - returns (byte result) + pure + returns (bytes1 result) { require( b.length > 0, GT_ZERO_LENGTH_REQUIRED ); + // Store last byte. result = b[b.length - 1]; + assembly { + // Decrement length of byte array. let newLen := sub(mload(b), 1) mstore(b, newLen) } - result; + return result; } /// @dev Pops the last 20 bytes off of a byte array by modifying its length. @@ -52,6 +56,7 @@ contract LibBytes { /// @return The 20 byte address that was popped off. function popAddress(bytes memory b) internal + pure returns (address result) { require( @@ -59,9 +64,11 @@ contract LibBytes { GTE_20_LENGTH_REQUIRED ); + // Store last 20 bytes. result = readAddress(b, b.length - 20); assembly { + // Subtract 20 from byte array length. let newLen := sub(mload(b), 20) mstore(b, newLen) } @@ -72,7 +79,10 @@ contract LibBytes { /// @param lhs First byte array to compare. /// @param rhs Second byte array to compare. /// @return True if arrays are the same. False otherwise. - function areBytesEqual(bytes memory lhs, bytes memory rhs) + function areBytesEqual( + bytes memory lhs, + bytes memory rhs + ) internal pure returns (bool equal) @@ -106,7 +116,8 @@ contract LibBytes { /// @return address from byte array. function readAddress( bytes memory b, - uint256 index) + uint256 index + ) internal pure returns (address result) @@ -138,7 +149,8 @@ contract LibBytes { function writeAddress( bytes memory b, uint256 index, - address input) + address input + ) internal pure { @@ -175,7 +187,8 @@ contract LibBytes { /// @return bytes32 value from byte array. function readBytes32( bytes memory b, - uint256 index) + uint256 index + ) internal pure returns (bytes32 result) @@ -202,7 +215,8 @@ contract LibBytes { function writeBytes32( bytes memory b, uint256 index, - bytes32 input) + bytes32 input + ) internal pure { @@ -226,7 +240,8 @@ contract LibBytes { /// @return uint256 value from byte array. function readUint256( bytes memory b, - uint256 index) + uint256 index + ) internal pure returns (uint256 result) @@ -241,7 +256,8 @@ contract LibBytes { function writeUint256( bytes memory b, uint256 index, - uint256 input) + uint256 input + ) internal pure { |