1 | /* stdckdint.h -- checked integer arithmetic
|
---|
2 |
|
---|
3 | Copyright 2022 Free Software Foundation, Inc.
|
---|
4 |
|
---|
5 | This program is free software: you can redistribute it and/or modify it
|
---|
6 | under the terms of the GNU Lesser General Public License as published
|
---|
7 | by the Free Software Foundation; either version 2.1 of the License, or
|
---|
8 | (at your option) any later version.
|
---|
9 |
|
---|
10 | This program is distributed in the hope that it will be useful,
|
---|
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
13 | GNU Lesser General Public License for more details.
|
---|
14 |
|
---|
15 | You should have received a copy of the GNU Lesser General Public License
|
---|
16 | along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
---|
17 |
|
---|
18 | #ifndef _GL_STDCKDINT_H
|
---|
19 | #define _GL_STDCKDINT_H
|
---|
20 |
|
---|
21 | #include "intprops-internal.h"
|
---|
22 |
|
---|
23 | /* Store into *R the low-order bits of A + B, A - B, A * B, respectively.
|
---|
24 | Return 1 if the result overflows, 0 otherwise.
|
---|
25 | A, B, and *R can have any integer type other than char, bool, a
|
---|
26 | bit-precise integer type, or an enumeration type.
|
---|
27 |
|
---|
28 | These are like the standard macros introduced in C23, except that
|
---|
29 | arguments should not have side effects. */
|
---|
30 |
|
---|
31 | #define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r))
|
---|
32 | #define ckd_sub(r, a, b) ((bool) _GL_INT_SUBTRACT_WRAPV (a, b, r))
|
---|
33 | #define ckd_mul(r, a, b) ((bool) _GL_INT_MULTIPLY_WRAPV (a, b, r))
|
---|
34 |
|
---|
35 | #endif /* _GL_STDCKDINT_H */
|
---|