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