|
|
|
@ -9,8 +9,15 @@ pragma solidity ^0.6.0; |
|
|
|
|
library SignedSafeMath { |
|
|
|
|
int256 constant private _INT256_MIN = -2**255; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @dev Multiplies two signed integers, reverts on overflow. |
|
|
|
|
/** |
|
|
|
|
* @dev Returns the multiplication of two signed integers, reverting on |
|
|
|
|
* overflow. |
|
|
|
|
* |
|
|
|
|
* Counterpart to Solidity's `*` operator. |
|
|
|
|
* |
|
|
|
|
* Requirements: |
|
|
|
|
* |
|
|
|
|
* - Multiplication cannot overflow. |
|
|
|
|
*/ |
|
|
|
|
function mul(int256 a, int256 b) internal pure returns (int256) { |
|
|
|
|
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the |
|
|
|
@ -29,7 +36,16 @@ library SignedSafeMath { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @dev Integer division of two signed integers truncating the quotient, reverts on division by zero. |
|
|
|
|
* @dev Returns the integer division of two signed integers. Reverts on |
|
|
|
|
* division by zero. The result is rounded towards zero. |
|
|
|
|
* |
|
|
|
|
* Counterpart to Solidity's `/` operator. Note: this function uses a |
|
|
|
|
* `revert` opcode (which leaves remaining gas untouched) while Solidity |
|
|
|
|
* uses an invalid opcode to revert (consuming all remaining gas). |
|
|
|
|
* |
|
|
|
|
* Requirements: |
|
|
|
|
* |
|
|
|
|
* - The divisor cannot be zero. |
|
|
|
|
*/ |
|
|
|
|
function div(int256 a, int256 b) internal pure returns (int256) { |
|
|
|
|
require(b != 0, "SignedSafeMath: division by zero"); |
|
|
|
@ -41,7 +57,14 @@ library SignedSafeMath { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @dev Subtracts two signed integers, reverts on overflow. |
|
|
|
|
* @dev Returns the subtraction of two signed integers, reverting on |
|
|
|
|
* overflow. |
|
|
|
|
* |
|
|
|
|
* Counterpart to Solidity's `-` operator. |
|
|
|
|
* |
|
|
|
|
* Requirements: |
|
|
|
|
* |
|
|
|
|
* - Subtraction cannot overflow. |
|
|
|
|
*/ |
|
|
|
|
function sub(int256 a, int256 b) internal pure returns (int256) { |
|
|
|
|
int256 c = a - b; |
|
|
|
@ -51,7 +74,14 @@ library SignedSafeMath { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @dev Adds two signed integers, reverts on overflow. |
|
|
|
|
* @dev Returns the addition of two signed integers, reverting on |
|
|
|
|
* overflow. |
|
|
|
|
* |
|
|
|
|
* Counterpart to Solidity's `+` operator. |
|
|
|
|
* |
|
|
|
|
* Requirements: |
|
|
|
|
* |
|
|
|
|
* - Addition cannot overflow. |
|
|
|
|
*/ |
|
|
|
|
function add(int256 a, int256 b) internal pure returns (int256) { |
|
|
|
|
int256 c = a + b; |
|
|
|
|