Toychain!
A toy blockchain in C
overflow.h File Reference

A helper file for checking overflows. More...

#include <limits.h>
Include dependency graph for overflow.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define LONG_LONG_MAX   LLONG_MAX
 
#define LONG_LONG_MIN   LLONG_MIN
 
#define ADDITION_OVERFLOW_CHECK(a, x, tmax, tmin)
 checks for overflows while adding two numbers More...
 
#define SUBTRACTION_OVERFLOW_CHECK(a, x, tmax, tmin)
 checks for overflows while subtracting two numbers More...
 
#define MULTIPLICATION_OVERFLOW_CHECK(a, x, tmax, tmin)
 checks for overflows while multiplying two numbers More...
 
#define ADDITION_OVERFLOW_CHECK_i32(a, x)   ADDITION_OVERFLOW_CHECK(a, x, INT_MAX, INT_MIN)
 checks for overflows while adding two 32 bit signed numbers More...
 
#define SUBTRACTION_OVERFLOW_CHECK_i32(a, x)   SUBTRACTION_OVERFLOW_CHECK(a, x, INT_MAX, INT_MIN)
 checks for overflows while subtracting two 32 bit signed numbers More...
 
#define MULTIPLICATION_OVERFLOW_CHECK_i32(a, x)   MULTIPLICATION_OVERFLOW_CHECK(a, x, INT_MAX, INT_MIN)
 checks for overflows while multiplying two 32 bit signed numbers More...
 
#define ADDITION_OVERFLOW_CHECK_i64(a, x)   ADDITION_OVERFLOW_CHECK(a, x, LONG_LONG_MAX, LONG_LONG_MIN)
 checks for overflows while adding two 64 bit signed numbers More...
 
#define SUBTRACTION_OVERFLOW_CHECK_i64(a, x)   SUBTRACTION_OVERFLOW_CHECK(a, x, LONG_LONG_MAX, LONG_LONG_MIN)
 checks for overflows while subtracting two 64 bit signed numbers More...
 
#define MULTIPLICATION_OVERFLOW_CHECK_i64(a, x)   MULTIPLICATION_OVERFLOW_CHECK(a, x, LONG_LONG_MAX, LONG_LONG_MIN)
 checks for overflows while multiplying two 64 bit signed numbers More...
 

Detailed Description

A helper file for checking overflows.

Macro Definition Documentation

◆ ADDITION_OVERFLOW_CHECK

#define ADDITION_OVERFLOW_CHECK (   a,
  x,
  tmax,
  tmin 
)
Value:
( \
((x) > 0) || ((a) > (tmax) - (x))) /* `a + x` would overflow */ \
|| ((x) < 0) || ((a) < (tmin) - (x))) /* `a + x` would underflow */ \
)

checks for overflows while adding two numbers

Parameters
a
x
tmax: the max value of the type in question
tmin: the min value of the type in question
Returns
1 : overflow will happen
0 : no overflow

◆ ADDITION_OVERFLOW_CHECK_i32

#define ADDITION_OVERFLOW_CHECK_i32 (   a,
 
)    ADDITION_OVERFLOW_CHECK(a, x, INT_MAX, INT_MIN)

checks for overflows while adding two 32 bit signed numbers

Parameters
a
x
Returns
1 : overflow will happen
0 : no overflow

◆ ADDITION_OVERFLOW_CHECK_i64

#define ADDITION_OVERFLOW_CHECK_i64 (   a,
 
)    ADDITION_OVERFLOW_CHECK(a, x, LONG_LONG_MAX, LONG_LONG_MIN)

checks for overflows while adding two 64 bit signed numbers

Parameters
a
x
Returns
1 : overflow will happen
0 : no overflow

◆ MULTIPLICATION_OVERFLOW_CHECK

#define MULTIPLICATION_OVERFLOW_CHECK (   a,
  x,
  tmax,
  tmin 
)
Value:
( \
(x) != 0 && ((x) * (a) < 0 \
|| ((a) > (tmax) / (x)) /* `a * x` would overflow */ \
|| (((a) < (tmin) / (x)))) /* `a * x` would underflow */ \
)

checks for overflows while multiplying two numbers

Parameters
a
x
tmax: the max value of the type in question
tmin: the min value of the type in question
Returns
1 : overflow will happen
0 : no overflow

◆ MULTIPLICATION_OVERFLOW_CHECK_i32

#define MULTIPLICATION_OVERFLOW_CHECK_i32 (   a,
 
)    MULTIPLICATION_OVERFLOW_CHECK(a, x, INT_MAX, INT_MIN)

checks for overflows while multiplying two 32 bit signed numbers

Parameters
a
x
Returns
1 : overflow will happen
0 : no overflow

◆ MULTIPLICATION_OVERFLOW_CHECK_i64

#define MULTIPLICATION_OVERFLOW_CHECK_i64 (   a,
 
)    MULTIPLICATION_OVERFLOW_CHECK(a, x, LONG_LONG_MAX, LONG_LONG_MIN)

checks for overflows while multiplying two 64 bit signed numbers

Parameters
a
x
Returns
1 : overflow will happen
0 : no overflow

◆ SUBTRACTION_OVERFLOW_CHECK

#define SUBTRACTION_OVERFLOW_CHECK (   a,
  x,
  tmax,
  tmin 
)
Value:
( \
(((x) < 0) || ((a) > (tmax) + (x))) /* `a - x` would overflow */ \
|| (((x) > 0) || ((a) < (tmin) + (x))) /* `a - x` would underflow */ \
)

checks for overflows while subtracting two numbers

Parameters
a
x
tmax: the max value of the type in question
tmin: the min value of the type in question
Returns
1 : overflow will happen
0 : no overflow

◆ SUBTRACTION_OVERFLOW_CHECK_i32

#define SUBTRACTION_OVERFLOW_CHECK_i32 (   a,
 
)    SUBTRACTION_OVERFLOW_CHECK(a, x, INT_MAX, INT_MIN)

checks for overflows while subtracting two 32 bit signed numbers

Parameters
a
x
Returns
1 : overflow will happen
0 : no overflow

◆ SUBTRACTION_OVERFLOW_CHECK_i64

#define SUBTRACTION_OVERFLOW_CHECK_i64 (   a,
 
)    SUBTRACTION_OVERFLOW_CHECK(a, x, LONG_LONG_MAX, LONG_LONG_MIN)

checks for overflows while subtracting two 64 bit signed numbers

Parameters
a
x
Returns
1 : overflow will happen
0 : no overflow