/* 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: dk3maul.ctr */ #ifndef DK3MAUL_H_INCLUDED /** Avoid multiple inclusions. */ #define DK3MAUL_H_INCLUDED 1 #line 10 "dk3maul.ctr" /** @file dk3maul.h Mathematical operations on unsigned long, unsigned long long, uintmax_t and dk3_um_t. */ #include #include #if DK3_HAVE_SYS_TYPES_H #include #endif #if DK3_HAVE_STDINT #include #endif #if DK3_HAVE_INTTYPES_H #include #endif #if DK3_HAVE_LIMITS_H #include #endif #if DK3_HAVE_MATH_H #include #endif #if DK3_HAVE_FLOAT_H #include #endif #ifdef __cplusplus extern "C" { #endif /** Addition. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Summary of a and b. */ unsigned long dk3ma_ul_add_ok(unsigned long a, unsigned long b, int *ec); /** Substraction. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Difference of a and b. */ unsigned long dk3ma_ul_sub_ok(unsigned long a, unsigned long b, int *ec); /** Multiplication. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Product of a and b. */ unsigned long dk3ma_ul_mul_ok(unsigned long a, unsigned long b, int *ec); /** Division. @param a Left operand (nominator). @param b Right operand (denominator). @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW or DK3_ERROR_MATH_DIVZERO when returning. @return Fraction of a and b. */ unsigned long dk3ma_ul_div_ok(unsigned long a, unsigned long b, int *ec); /** Greatest common divisor. @param a Left operand. @param b Right operand. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Greatest common divisor of a and b. */ unsigned long dk3ma_ul_gcd(unsigned long a, unsigned long b); #if DK3_HAVE_LONG_LONG /** Addition. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Summary of a and b. */ unsigned long long dk3ma_ull_add_ok(unsigned long long a, unsigned long long b, int *ec); /** Substraction. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Difference of a and b. */ unsigned long long dk3ma_ull_sub_ok(unsigned long long a, unsigned long long b, int *ec); /** Multiplication. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Product of a and b. */ unsigned long long dk3ma_ull_mul_ok(unsigned long long a, unsigned long long b, int *ec); /** Division. @param a Left operand (nominator). @param b Right operand (denominator). @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW or DK3_ERROR_MATH_DIVZERO when returning. @return Fraction of a and b. */ unsigned long long dk3ma_ull_div_ok(unsigned long long a, unsigned long long b, int *ec); /** Greatest common divisor. @param a Left operand. @param b Right operand. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Greatest common divisor of a and b. */ unsigned long long dk3ma_ull_gcd(unsigned long long a, unsigned long long b); #endif #if DK3_HAVE_INTMAX_T /** Addition. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Summary of a and b. */ uintmax_t dk3ma_uintmax_t_add_ok(uintmax_t a, uintmax_t b, int *ec); /** Substraction. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Difference of a and b. */ uintmax_t dk3ma_uintmax_t_sub_ok(uintmax_t a, uintmax_t b, int *ec); /** Multiplication. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Product of a and b. */ uintmax_t dk3ma_uintmax_t_mul_ok(uintmax_t a, uintmax_t b, int *ec); /** Division. @param a Left operand (nominator). @param b Right operand (denominator). @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW or DK3_ERROR_MATH_DIVZERO when returning. @return Fraction of a and b. */ uintmax_t dk3ma_uintmax_t_div_ok(uintmax_t a, uintmax_t b, int *ec); /** Greatest common divisor. @param a Left operand. @param b Right operand. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Greatest common divisor of a and b. */ uintmax_t dk3ma_uintmax_t_gcd(uintmax_t a, uintmax_t b); #endif /** Addition. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Summary of a and b. */ dk3_um_t dk3ma_um_add_ok(dk3_um_t a, dk3_um_t b, int *ec); /** Substraction. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Difference of a and b. */ dk3_um_t dk3ma_um_sub_ok(dk3_um_t a, dk3_um_t b, int *ec); /** Multiplication. @param a Left operand. @param b Right operand. @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Product of a and b. */ dk3_um_t dk3ma_um_mul_ok(dk3_um_t a, dk3_um_t b, int *ec); /** Division. @param a Left operand (nominator). @param b Right operand (denominator). @param ec Pointer to error code variable, may be NULL. The variable may be set to DK3_ERROR_MATH_OVERFLOW or DK3_ERROR_MATH_DIVZERO when returning. @return Fraction of a and b. */ dk3_um_t dk3ma_um_div_ok(dk3_um_t a, dk3_um_t b, int *ec); /** Greatest common divisor. @param a Left operand. @param b Right operand. The variable may be set to DK3_ERROR_MATH_OVERFLOW when returning. @return Greatest common divisor of a and b. */ dk3_um_t dk3ma_um_gcd(dk3_um_t a, dk3_um_t b); /** Convert dk3_um_t to size_t. @param um Positive dk3_um_t value to convert. @param ec Pointer to error code variable, may be NULL. Set to DK3_ERROR_MATH_OVERFLOW on conversion errors. @return Positive number on success, 0 on error (significant bits lost in conversion). */ size_t dk3ma_um_to_sz(dk3_um_t um, int *ec); #ifdef __cplusplus } #endif #endif