aboutsummaryrefslogtreecommitdiffstats
path: root/common/math/integer.go
blob: 8162b19854dc1f4a370bd10be32175c7c3e2b91a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
}