1 /*
2 Copyright (C) 2015-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: dk4maasz.ctr
12 */
13 
14 /**	@file dk4maasz.c The dk4maasz module.
15 */
16 
17 
18 #include "dk4conf.h"
19 #include <libdk4base/dk4types.h>
20 
21 #if DK4_HAVE_LIMITS_H
22 #ifndef LIMITS_H_INCLUDED
23 #include <limits.h>
24 #define LIMITS_H_INCLUDED 1
25 #endif
26 #endif
27 #if DK4_HAVE_STDINT_H
28 #ifndef STDINT_H_INCLUDED
29 #if defined(__cplusplus) && (!defined(__STDC_LIMIT_MACROS))
30 #define __STDC_LIMIT_MACROS 1
31 #endif
32 #if defined(__cplusplus) && (!defined(__STDC_CONSTANT_MACROS))
33 #define __STDC_CONSTANT_MACROS 1
34 #endif
35 #include <stdint.h>
36 #define STDINT_H_INCLUDED 1
37 #endif
38 #endif
39 
40 #include <libdk4base/dk4error.h>
41 #include <libdk4ma/dk4maasz.h>
42 #include <libdk4base/dk4error.h>
43 #include <libdk4base/dk4numco.h>
44 
45 
46 
47 size_t
dk4ma_size_t_add(size_t a,size_t b,dk4_er_t * erp)48 dk4ma_size_t_add(size_t a, size_t b, dk4_er_t *erp)
49 {
50   if ((SIZE_MAX - b) < a) {
51     dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
52   }
53   return (a + b);
54 }
55 
56 
57 
58 size_t
dk4ma_size_t_sub(size_t a,size_t b,dk4_er_t * erp)59 dk4ma_size_t_sub(size_t a, size_t b, dk4_er_t *erp)
60 {
61   if (b > a) {
62     dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
63   }
64   return (a - b);
65 }
66 
67 
68 
69 size_t
dk4ma_size_t_mul(size_t a,size_t b,dk4_er_t * erp)70 dk4ma_size_t_mul(size_t a, size_t b, dk4_er_t *erp)
71 {
72   if ((0 < a) && (0 < b)) {
73     if ((SIZE_MAX / a) < b) {
74       dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
75     }
76   }
77   return (a * b);
78 }
79 
80 
81 
82 size_t
dk4ma_size_t_from(dk4_um_t u,dk4_er_t * erp)83 dk4ma_size_t_from(dk4_um_t u, dk4_er_t *erp)
84 {
85 	if ((dk4_um_t)(SIZE_MAX) < u) {
86 		dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
87 	}
88 	return ((size_t)u);
89 }
90 
91 
92 
93 size_t
dk4ma_size_t_from_double(double d,dk4_er_t * erp)94 dk4ma_size_t_from_double(double d, dk4_er_t *erp)
95 {
96 	size_t	 back	= 0;
97 
98 	if ((double)(SIZE_MAX) < d) {
99 		dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
100 		back = SIZE_MAX;
101 	}
102 	else {
103 		if (0.0 > d) {
104 			dk4error_set_simple_error_code(erp,DK4_E_MATH_OVERFLOW);
105 		}
106 		else {
107 			back = (size_t)d;
108 		}
109 	}
110 	return back;
111 }
112 
113 
114