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: dk4maal.ctr 12 */ 13 14 #ifndef DK4MAAL_H_INCLUDED 15 /** Avoid multiple inclusions. */ 16 #define DK4MAAL_H_INCLUDED 1 17 18 19 /** @file 20 Arithmetic operations on long. 21 22 CRT on Windows: Optional. 23 */ 24 25 #ifndef DK4CONF_H_INCLUDED 26 #if DK4_BUILDING_DKTOOLS4 27 #include "dk4conf.h" 28 #else 29 #include <dktools-4/dk4conf.h> 30 #endif 31 #endif 32 33 #ifndef DK4TYPES_H_INCLUDED 34 #if DK4_BUILDING_DKTOOLS4 35 #include <libdk4base/dk4types.h> 36 #else 37 #include <dktools-4/dk4types.h> 38 #endif 39 #endif 40 41 #ifndef DK4ERROR_H_INCLUDED 42 #if DK4_BUILDING_DKTOOLS4 43 #include <libdk4base/dk4error.h> 44 #else 45 #include <dktools-4/dk4error.h> 46 #endif 47 #endif 48 49 50 51 #ifdef __cplusplus 52 extern "C" { 53 #endif 54 55 /** Absolute value. 56 @param a Operand. 57 @param erp Error report, may be NULL. 58 @return Result on success, LONG_MAX if a is LONG_MIN 59 (overflow is reported in erp). 60 61 Error codes: DK4_E_OVERFLOW. 62 */ 63 long 64 dk4ma_long_abs(long a, dk4_er_t *erp); 65 66 /** Addition. 67 @param a Left operand. 68 @param b Right operand. 69 @param erp Error report, may be NULL. 70 @return Result on success, least significant result bits 71 on overflow (see ec component of erp). 72 73 Error codes: DK4_E_OVERFLOW. 74 */ 75 long 76 dk4ma_long_add(long a, long b, dk4_er_t *erp); 77 78 /** Subtraction. 79 @param a Left operand. 80 @param b Right operand. 81 @param erp Error report, may be NULL. 82 @return Result on success, least significant result bits 83 on overflow (see ec component of erp). 84 85 Error codes: DK4_E_OVERFLOW. 86 */ 87 long 88 dk4ma_long_sub(long a, long b, dk4_er_t *erp); 89 90 /** Multiplication. 91 @param a Left factor. 92 @param b right factor. 93 @param erp Error report, may be NULL. 94 @return Result on success, least significant 95 bits on overflow (see ec component of erp). 96 97 Error codes: DK4_E_OVERFLOW. 98 */ 99 long 100 dk4ma_long_mul(long a, long b, dk4_er_t *erp); 101 102 /** Division. 103 @param a Counter (left operand). 104 @param b Denominator (right operand). 105 @param erp Error report, may be NULL. 106 @return Division result on success, 107 LONG_MIN, LONG_MAX, or 0 on division by zero or overflow 108 (see the ec component of erp). 109 110 Error codes: DK4_E_OVERFLOW, DK4_E_DIVZERO. 111 */ 112 long 113 dk4ma_long_div(long a, long b, dk4_er_t *erp); 114 115 /** Convert dk4_im_t value to long. 116 @param i Value to convert. 117 @param erp Error report, may be NULL. 118 @return Conversion result. 119 120 Error codes: DK4_E_OVERFLOW. 121 */ 122 long 123 dk4ma_long_from(dk4_im_t i, dk4_er_t *erp); 124 125 /** Convert double to long. 126 @param d Value to convert. 127 @param erp Error report, may be NULL. 128 @return Conversion result. 129 130 Error codes: DK4_E_OVERFLOW. 131 */ 132 long 133 dk4ma_long_from_double(double d, dk4_er_t *erp); 134 135 #ifdef __cplusplus 136 } 137 #endif 138 139 140 141 #endif 142