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 }