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