- package math
-
- import (
- "errors"
- "math"
- )
-
- var ErrOverflowInt32 = errors.New("int32 overflow")
- var ErrOverflowUint8 = errors.New("uint8 overflow")
- var ErrOverflowInt8 = errors.New("int8 overflow")
-
- // SafeAddInt32 adds two int32 integers.
- func SafeAddInt32(a, b int32) (int32, error) {
- if b > 0 && (a > math.MaxInt32-b) {
- return 0, ErrOverflowInt32
- } else if b < 0 && (a < math.MinInt32-b) {
- return 0, ErrOverflowInt32
- }
- return a + b, nil
- }
-
- // SafeSubInt32 subtracts two int32 integers.
- func SafeSubInt32(a, b int32) (int32, error) {
- if b > 0 && (a < math.MinInt32+b) {
- return 0, ErrOverflowInt32
- } else if b < 0 && (a > math.MaxInt32+b) {
- return 0, ErrOverflowInt32
- }
- return a - b, nil
- }
-
- // SafeConvertInt32 takes a int and checks if it overflows.
- func SafeConvertInt32(a int64) (int32, error) {
- if a > math.MaxInt32 {
- return 0, ErrOverflowInt32
- } else if a < math.MinInt32 {
- return 0, ErrOverflowInt32
- }
- return int32(a), nil
- }
-
- // SafeConvertUint8 takes an int64 and checks if it overflows.
- func SafeConvertUint8(a int64) (uint8, error) {
- if a > math.MaxUint8 {
- return 0, ErrOverflowUint8
- } else if a < 0 {
- return 0, ErrOverflowUint8
- }
- return uint8(a), nil
- }
-
- // SafeConvertInt8 takes an int64 and checks if it overflows.
- func SafeConvertInt8(a int64) (int8, error) {
- if a > math.MaxInt8 {
- return 0, ErrOverflowInt8
- } else if a < math.MinInt8 {
- return 0, ErrOverflowInt8
- }
- return int8(a), nil
- }
|