/* Copyright (C) 2014-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: dk3maui.ctr */ /** @file dk3maui.c The dk3maui module. */ #line 98 "dk3maui.ctr" #include "dk3ma.h" #line 106 "dk3maui.ctr" unsigned dk3ma_ui_add_ok(unsigned a, unsigned b, int *ec) { if (NULL != ec) { if ((DK3_U_MAX - a) < b) { *ec = DK3_ERROR_MATH_OVERFLOW; } } return (a + b); } unsigned dk3ma_ui_sub_ok(unsigned a, unsigned b, int *ec) { if (NULL != ec) { if (b > a) { *ec = DK3_ERROR_MATH_OVERFLOW; } } return (a - b); } unsigned dk3ma_ui_mul_ok(unsigned a, unsigned b, int *ec) { if (NULL != ec) { if (0U != a) { if ((DK3_U_MAX / a) < b) { *ec = DK3_ERROR_MATH_OVERFLOW; } } } return (a * b); } unsigned dk3ma_ui_div_ok(unsigned a, unsigned b, int *ec) { unsigned back = (unsigned)0; if (0U != b) { back = a / b; } else { if (NULL != ec) { *ec = DK3_ERROR_MATH_DIVZERO; } back = DK3_U_MAX; } return back; } unsigned dk3ma_ui_gcd(unsigned a, unsigned b) { unsigned h; while (0U < b) { h = a % b; a = b; b = h; } if (0U == a) { a = 1U; } return a; }