1 /*
2 Copyright (C) 2016-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: dk4maau32.ctr
12 */
13
14 /** @file dk4maau32.c The dk4maau32 module.
15 */
16
17
18 #include "dk4conf.h"
19 #include <libdk4ma/dk4maau32.h>
20
21
22
23
24
25
26
27 uint32_t
dk4ma_uint32_t_add(uint32_t a,uint32_t b,dk4_er_t * erp)28 dk4ma_uint32_t_add(uint32_t a, uint32_t b, dk4_er_t *erp)
29 {
30 if (DK4_U32_MAX < a) {
31 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
32 goto finished;
33 }
34 if (DK4_U32_MAX < b) {
35 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
36 goto finished;
37 }
38 if ((DK4_U32_MAX - a) < b) {
39 dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
40 }
41 finished:
42 return (a + b);
43 }
44
45
46
47 uint32_t
dk4ma_uint32_t_sub(uint32_t a,uint32_t b,dk4_er_t * erp)48 dk4ma_uint32_t_sub(uint32_t a, uint32_t b, dk4_er_t *erp)
49 {
50 if (DK4_U32_MAX < a) {
51 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
52 goto finished;
53 }
54 if (DK4_U32_MAX < b) {
55 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
56 goto finished;
57 }
58 if (b > a) {
59 dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
60 }
61 finished:
62 return (a - b);
63 }
64
65
66
67 uint32_t
dk4ma_uint32_t_mul(uint32_t a,uint32_t b,dk4_er_t * erp)68 dk4ma_uint32_t_mul(uint32_t a, uint32_t b, dk4_er_t *erp)
69 {
70 if (DK4_U32_MAX < a) {
71 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
72 goto finished;
73 }
74 if (DK4_U32_MAX < b) {
75 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
76 goto finished;
77 }
78 if ((0L < a) && (0L < b)) {
79 if ((DK4_U32_MAX / a) < b) {
80 dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
81 }
82 }
83 finished:
84 return (a * b);
85 }
86
87
88
89 uint32_t
dk4ma_uint32_t_div(uint32_t a,uint32_t b,dk4_er_t * erp)90 dk4ma_uint32_t_div(uint32_t a, uint32_t b, dk4_er_t *erp)
91 {
92 uint32_t back = 0;
93 if (DK4_U32_MAX < a) {
94 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
95 goto finished;
96 }
97 if (DK4_U32_MAX < b) {
98 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
99 goto finished;
100 }
101 finished:
102 if (0L != b) {
103 back = a / b;
104 } else {
105 dk4error_set_simple_error_code(erp, DK4_E_MATH_DIVZERO);
106 }
107 return back;
108 }
109
110
111
112 uint32_t
dk4ma_uint32_from(dk4_um_t u,dk4_er_t * erp)113 dk4ma_uint32_from(dk4_um_t u, dk4_er_t *erp)
114 {
115 if ((dk4_um_t)(DK4_U32_MAX) < u) {
116 dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
117 }
118 return ((uint32_t)u);
119 }
120
121
122
123
124 uint32_t
dk4ma_uint32_from_double(double d,dk4_er_t * erp)125 dk4ma_uint32_from_double(double d, dk4_er_t *erp)
126 {
127 uint32_t back = 0UL;
128 if ((double)(DK4_U32_MAX) < d) {
129 dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
130 back = DK4_U32_MAX;
131 }
132 else {
133 if (0.0 > d) {
134 dk4error_set_simple_error_code(erp,DK4_E_MATH_OVERFLOW);
135 }
136 else {
137 back = (uint32_t)d;
138 }
139 }
140 return back;
141 }
142
143