/ contracts / common / SafeMath.sol
SafeMath.sol
 1  pragma solidity >=0.5.0 <0.7.0;
 2  
 3  /**
 4   * Math operations with safety checks
 5   */
 6  library SafeMath {
 7      function mul(uint a, uint b) internal pure returns (uint) {
 8          uint c = a * b;
 9          assert(a == 0 || c / a == b);
10          return c;
11      }
12  
13      function div(uint a, uint b) internal pure returns (uint) {
14          // assert(b > 0); // Solidity automatically throws when dividing by 0
15          uint c = a / b;
16          // assert(a == b * c + a % b); // There is no case in which this doesn't hold
17          return c;
18      }
19  
20      function sub(uint a, uint b) internal pure returns (uint) {
21          assert(b <= a);
22          return a - b;
23      }
24  
25      function add(uint a, uint b) internal pure returns (uint) {
26          uint c = a + b;
27          assert(c >= a);
28          return c;
29      }
30  
31      function max64(uint64 a, uint64 b) internal pure returns (uint64) {
32          return a >= b ? a : b;
33      }
34  
35      function min64(uint64 a, uint64 b) internal pure returns (uint64) {
36          return a < b ? a : b;
37      }
38  
39      function max256(uint256 a, uint256 b) internal pure returns (uint256) {
40          return a >= b ? a : b;
41      }
42  
43      function min256(uint256 a, uint256 b) internal pure returns (uint256) {
44          return a < b ? a : b;
45      }
46  }