/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4maamu.ctr */ /** @file dk4maamu.c The dk4maamu module. */ #line 106 "dk4maamu.ctr" #include "dk4conf.h" #include "dk4types.h" #include "dk4error.h" #include "dk4numco.h" #include "dk4maamu.h" #if DK4_HAVE_INTMAX_T uintmax_t dk4ma_uintmax_t_add(uintmax_t a, uintmax_t b, dk4_er_t *erp) { if ((UINTMAX_MAX - a) < b) { dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW); } return (uintmax_t)(a + b); } uintmax_t dk4ma_uintmax_t_sub(uintmax_t a, uintmax_t b, dk4_er_t *erp) { if (b > a) { dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW); } return (uintmax_t)(a - b); } uintmax_t dk4ma_uintmax_t_mul(uintmax_t a, uintmax_t b, dk4_er_t *erp) { if ((uintmax_t)0UL < a) { if ((UINTMAX_MAX / a) < b) { dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW); } } return (uintmax_t)(a * b); } uintmax_t dk4ma_uintmax_t_div(uintmax_t a, uintmax_t b, dk4_er_t *erp) { if ((uintmax_t)0UL < b) { return (uintmax_t)(a / b); } else { dk4error_set_simple_error_code(erp, DK4_E_MATH_DIVZERO); return (uintmax_t)(UINTMAX_MAX); } } #endif