mirror of https://github.com/ethereum/go-ethereum
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
616 B
25 lines
616 B
package math
|
|
|
|
import gmath "math"
|
|
|
|
/*
|
|
* NOTE: The following methods need to be optimised using either bit checking or asm
|
|
*/
|
|
|
|
// SafeSub returns subtraction result and whether overflow occurred.
|
|
func SafeSub(x, y uint64) (uint64, bool) {
|
|
return x - y, x < y
|
|
}
|
|
|
|
// SafeAdd returns the result and whether overflow occurred.
|
|
func SafeAdd(x, y uint64) (uint64, bool) {
|
|
return x + y, y > gmath.MaxUint64-x
|
|
}
|
|
|
|
// SafeMul returns multiplication result and whether overflow occurred.
|
|
func SafeMul(x, y uint64) (uint64, bool) {
|
|
if x == 0 {
|
|
return 0, false
|
|
}
|
|
return x * y, x != 0 && y != 0 && y > gmath.MaxUint64/x
|
|
}
|
|
|