OMCompiler/SimulationRuntime/c/util/utility.h
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | * This file belongs to the OpenModelica Run-Time System | ||
| 3 | * | ||
| 4 | * Copyright (c) 1998-2026, Open Source Modelica Consortium (OSMC), c/o Linköpings | ||
| 5 | * universitet, Department of Computer and Information Science, SE-58183 Linköping, Sweden. All rights | ||
| 6 | * reserved. | ||
| 7 | * | ||
| 8 | * THIS PROGRAM IS PROVIDED UNDER THE TERMS OF THE BSD NEW LICENSE OR THE | ||
| 9 | * AGPL VERSION 3 LICENSE OR THE OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.8. ANY | ||
| 10 | * USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES RECIPIENT'S | ||
| 11 | * ACCEPTANCE OF THE BSD NEW LICENSE OR THE OSMC PUBLIC LICENSE OR THE AGPL | ||
| 12 | * VERSION 3, ACCORDING TO RECIPIENTS CHOICE. | ||
| 13 | * | ||
| 14 | * The OpenModelica software and the OSMC (Open Source Modelica Consortium) Public License | ||
| 15 | * (OSMC-PL) are obtained from OSMC, either from the above address, from the URLs: | ||
| 16 | * http://www.openmodelica.org or https://github.com/OpenModelica/ or | ||
| 17 | * http://www.ida.liu.se/projects/OpenModelica, and in the OpenModelica distribution. GNU | ||
| 18 | * AGPL version 3 is obtained from: https://www.gnu.org/licenses/licenses.html#GPL. The BSD NEW | ||
| 19 | * License is obtained from: http://www.opensource.org/licenses/BSD-3-Clause. | ||
| 20 | * | ||
| 21 | * This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY | ||
| 23 | * SET FORTH IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF | ||
| 24 | * OSMC-PL. | ||
| 25 | * | ||
| 26 | */ | ||
| 27 | |||
| 28 | |||
| 29 | #ifndef UTILITY_H | ||
| 30 | #define UTILITY_H | ||
| 31 | |||
| 32 | #include "../openmodelica.h" | ||
| 33 | #include <math.h> | ||
| 34 | |||
| 35 | static inline int in_range_boolean(modelica_integer b, | ||
| 36 | modelica_integer start, | ||
| 37 | modelica_integer stop) | ||
| 38 | { | ||
| 39 | if(start <= stop) { | ||
| 40 | if((b >= start) && (b <= stop)) { | ||
| 41 | return 1; | ||
| 42 | } | ||
| 43 | } else { | ||
| 44 | if((b >= stop) && (b <= start)) { | ||
| 45 | return 1; | ||
| 46 | } | ||
| 47 | } | ||
| 48 | return 0; | ||
| 49 | } | ||
| 50 | |||
| 51 | static inline int in_range_integer(modelica_integer i, | ||
| 52 | modelica_integer start, | ||
| 53 | modelica_integer stop) | ||
| 54 | { | ||
| 55 |
14/16✓ Branch 0 taken 1118527 times.
✓ Branch 1 taken 75376889 times.
✓ Branch 2 taken 127375 times.
✓ Branch 3 taken 562498 times.
✓ Branch 4 taken 26626 times.
✓ Branch 5 taken 192484 times.
✓ Branch 6 taken 2534 times.
✓ Branch 7 taken 125235 times.
✓ Branch 8 taken 6 times.
✓ Branch 9 taken 42 times.
✓ Branch 10 taken 72 times.
✓ Branch 11 taken 317416 times.
✓ Branch 12 taken 144 times.
✓ Branch 13 taken 271235 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
78121083 | if(start <= stop) { |
| 56 |
112/128<unknown function 55>:
✓ Branch 0 taken 3913329 times.
✓ Branch 1 taken 2807877 times.
✓ Branch 2 taken 763534 times.
✓ Branch 3 taken 208010 times.
✓ Branch 4 taken 3282990 times.
✓ Branch 5 taken 639151 times.
✓ Branch 6 taken 2775380 times.
✓ Branch 7 taken 688739 times.
✓ Branch 8 taken 25535147 times.
✓ Branch 9 taken 2331369 times.
✓ Branch 10 taken 5639259 times.
✓ Branch 11 taken 1832214 times.
✓ Branch 12 taken 46278722 times.
✓ Branch 13 taken 9345675 times.
✓ Branch 14 taken 3740477 times.
✓ Branch 15 taken 708357 times.
✓ Branch 16 taken 665724 times.
✓ Branch 17 taken 151627 times.
✓ Branch 18 taken 61796019 times.
✓ Branch 19 taken 442225 times.
✓ Branch 20 taken 6155774 times.
✓ Branch 21 taken 82927 times.
✓ Branch 22 taken 22763518 times.
✓ Branch 23 taken 181681 times.
✓ Branch 24 taken 2335294 times.
✓ Branch 25 taken 293054 times.
✓ Branch 26 taken 202713 times.
✓ Branch 27 taken 10342 times.
✓ Branch 28 taken 5574606 times.
✓ Branch 29 taken 383588 times.
✓ Branch 30 taken 81726 times.
✓ Branch 31 taken 5983 times.
✓ Branch 32 taken 17602 times.
✓ Branch 33 taken 11201 times.
✓ Branch 34 taken 1115314 times.
✓ Branch 35 taken 110861 times.
✓ Branch 36 taken 378068 times.
✓ Branch 37 taken 8963 times.
✓ Branch 38 taken 419191 times.
✓ Branch 39 taken 10152 times.
✓ Branch 40 taken 7814 times.
✓ Branch 41 taken 3836 times.
✓ Branch 42 taken 14324615 times.
✓ Branch 43 taken 1979917 times.
✓ Branch 44 taken 4154 times.
✓ Branch 45 taken 623 times.
✓ Branch 46 taken 1699 times.
✓ Branch 47 taken 169 times.
✓ Branch 48 taken 422 times.
✓ Branch 49 taken 6 times.
✓ Branch 50 taken 317460 times.
✓ Branch 51 taken 2212 times.
✓ Branch 52 taken 50 times.
✓ Branch 53 taken 50 times.
✓ Branch 54 taken 66677 times.
✓ Branch 55 taken 1258 times.
✓ Branch 56 taken 3099 times.
✓ Branch 57 taken 860 times.
✓ Branch 58 taken 900287 times.
✓ Branch 59 taken 15403 times.
✓ Branch 60 taken 3626 times.
✓ Branch 61 taken 1276 times.
✓ Branch 62 taken 10396 times.
✓ Branch 63 taken 3596 times.
✓ Branch 64 taken 3596 times.
✓ Branch 65 taken 1246 times.
✓ Branch 66 taken 38702 times.
✓ Branch 67 taken 19663 times.
✓ Branch 68 taken 192167 times.
✓ Branch 69 taken 79599 times.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 318 times.
✓ Branch 77 taken 147 times.
✓ Branch 78 taken 127 times.
✓ Branch 79 taken 127 times.
✓ Branch 80 taken 340 times.
✓ Branch 81 taken 146 times.
<unknown function 56>:
✓ Branch 0 taken 22104084 times.
✓ Branch 1 taken 9469610 times.
✓ Branch 2 taken 451465622 times.
✓ Branch 3 taken 653908 times.
✓ Branch 4 taken 749046676 times.
✓ Branch 5 taken 2482993 times.
✓ Branch 6 taken 587342 times.
✓ Branch 7 taken 104421 times.
✓ Branch 8 taken 10636 times.
✓ Branch 9 taken 428 times.
✓ Branch 10 taken 9446 times.
✓ Branch 11 taken 292 times.
✓ Branch 12 taken 1057 times.
✓ Branch 13 taken 133 times.
✓ Branch 14 taken 1102198 times.
✓ Branch 15 taken 119967 times.
✓ Branch 16 taken 577 times.
✓ Branch 17 taken 64 times.
✓ Branch 18 taken 1998 times.
✓ Branch 19 taken 22 times.
✓ Branch 20 taken 1683 times.
✓ Branch 21 taken 21 times.
✓ Branch 22 taken 41 times.
✓ Branch 23 taken 21 times.
✓ Branch 24 taken 3148 times.
✓ Branch 25 taken 38 times.
✓ Branch 26 taken 535 times.
✓ Branch 27 taken 25 times.
✓ Branch 28 taken 560 times.
✓ Branch 29 taken 33 times.
✓ Branch 30 taken 5606 times.
✓ Branch 31 taken 8 times.
✓ Branch 32 taken 996 times.
✓ Branch 33 taken 14 times.
✓ Branch 34 taken 996 times.
✓ Branch 35 taken 14 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
|
1468849260 | if((i >= start) && (i <= stop)) { |
| 57 | return 1; | ||
| 58 | } | ||
| 59 | } else { | ||
| 60 |
14/16✓ Branch 0 taken 75134296 times.
✓ Branch 1 taken 242593 times.
✓ Branch 2 taken 451029 times.
✓ Branch 3 taken 111469 times.
✓ Branch 4 taken 152149 times.
✓ Branch 5 taken 40335 times.
✓ Branch 6 taken 121559 times.
✓ Branch 7 taken 3676 times.
✓ Branch 8 taken 30 times.
✓ Branch 9 taken 12 times.
✓ Branch 10 taken 316180 times.
✓ Branch 11 taken 1236 times.
✓ Branch 12 taken 269748 times.
✓ Branch 13 taken 1487 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
76845799 | if((i >= stop) && (i <= start)) { |
| 61 | return 1; | ||
| 62 | } | ||
| 63 | } | ||
| 64 | return 0; | ||
| 65 | } | ||
| 66 | |||
| 67 | static inline int in_range_real(modelica_real i, | ||
| 68 | modelica_real start, | ||
| 69 | modelica_real stop) | ||
| 70 | { | ||
| 71 | if(start <= stop) { | ||
| 72 | if((i >= start) && (i <= stop)) { | ||
| 73 | return 1; | ||
| 74 | } | ||
| 75 | } else { | ||
| 76 | if((i >= stop) && (i <= start)) { | ||
| 77 | return 1; | ||
| 78 | } | ||
| 79 | } | ||
| 80 | return 0; | ||
| 81 | } | ||
| 82 | |||
| 83 | |||
| 84 | /* div is already defined in stdlib, so it's redefined here to modelica_div */ | ||
| 85 | static inline modelica_real modelica_div(modelica_real x, modelica_real y) | ||
| 86 | { | ||
| 87 | return (modelica_real)((modelica_integer)(x/y)); | ||
| 88 | } | ||
| 89 | |||
| 90 | static inline modelica_integer modelica_integer_min(modelica_integer x,modelica_integer y) | ||
| 91 | { | ||
| 92 |
4/6<unknown function 55>:
✓ Branch 0 taken 947502 times.
✓ Branch 1 taken 1964088 times.
<unknown function 56>:
✗ Branch 0 not taken.
✓ Branch 0 taken 498 times.
✗ Branch 1 not taken.
✓ Branch 1 taken 41 times.
|
9329501 | return (x < y) ? x : y; |
| 93 | } | ||
| 94 | |||
| 95 | static inline modelica_integer modelica_integer_max(modelica_integer x,modelica_integer y) | ||
| 96 | { | ||
| 97 |
9/22<unknown function 55>:
✓ Branch 0 taken 6069 times.
✓ Branch 1 taken 31 times.
✓ Branch 2 taken 9706 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 44385 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
<unknown function 56>:
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
<unknown function 97>:
✓ Branch 2 taken 15271607 times.
✓ Branch 3 taken 108336686 times.
✓ Branch 6 taken 4 times.
✓ Branch 7 taken 15 times.
|
154796899 | return (x > y) ? x : y; |
| 98 | } | ||
| 99 | |||
| 100 | static inline modelica_real modelica_real_min(modelica_real x,modelica_real y) | ||
| 101 | { | ||
| 102 |
2/2✓ Branch 0 taken 163 times.
✓ Branch 1 taken 41 times.
|
204 | return (x < y) ? x : y; |
| 103 | } | ||
| 104 | |||
| 105 | static inline modelica_real modelica_real_max(modelica_real x,modelica_real y) | ||
| 106 | { | ||
| 107 |
2/2✓ Branch 0 taken 277 times.
✓ Branch 1 taken 208 times.
|
485 | return (x > y) ? x : y; |
| 108 | } | ||
| 109 | |||
| 110 | |||
| 111 | #define reduction_sum(X,Y) ((X)+(Y)) | ||
| 112 | #define reduction_product(X,Y) ((X)*(Y)) | ||
| 113 | |||
| 114 | /* pow(), but for integer exponents (faster implementation) */ | ||
| 115 | extern modelica_real real_int_pow(threadData_t *threadData, modelica_real base,modelica_integer n); | ||
| 116 | |||
| 117 | #if !defined(OMC_MINIMAL_RUNTIME) | ||
| 118 | /* Returns 0 on failure. The first element in nmatches contains the error-message. */ | ||
| 119 | extern int OpenModelica_regexImpl(const char* str, const char* re, const int maxn, int extended, int sensitive, void*(*)(const char*), void **result); | ||
| 120 | /* Wrapper for the builtin call */ | ||
| 121 | extern int OpenModelica_regex(const char* str, const char* re, int maxn, int extended, int sensitive, const char **result); | ||
| 122 | #endif | ||
| 123 | |||
| 124 | extern void OpenModelica_decode_uri_inplace(char *uri); | ||
| 125 | |||
| 126 | extern modelica_string OpenModelica_uriToFilename_impl(threadData_t *threadData, modelica_string uri, const char *resourcesDir); | ||
| 127 | #define OpenModelica_uriToFilename(URI) OpenModelica_uriToFilename_impl(threadData, URI, NULL) | ||
| 128 | #define OpenModelica__uriToFilename(URI) OpenModelica_uriToFilename(URI) | ||
| 129 | extern void OpenModelica_updateUriMapping(threadData_t *threadData, void *namesAndDirs); | ||
| 130 | |||
| 131 | static inline modelica_real modelica_real_mod(modelica_real x, modelica_real y) | ||
| 132 | { | ||
| 133 |
7/8<unknown function 133>:
✓ Branch 0 taken 249 times.
✓ Branch 1 taken 40 times.
<unknown function 56>:
✓ Branch 1 taken 36 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 81732 times.
✓ Branch 4 taken 14534 times.
✓ Branch 5 taken 7046 times.
✓ Branch 6 taken 3125 times.
|
119334 | return x-floor(x/y)*y; |
| 134 | } | ||
| 135 | |||
| 136 | /* Returns res such that 0 <= abs(res) < abs(y) and res has the same sign as y */ | ||
| 137 | static inline modelica_integer modelica_integer_mod(modelica_integer x, modelica_integer y) | ||
| 138 | { | ||
| 139 |
1/4<unknown function 56>:
✗ Branch 0 not taken.
✗ Branch 1 not taken.
<unknown function 92>:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
|
80080287 | modelica_integer res = x % y; |
| 140 |
67/158<unknown function 139>:
✗ Branch 0 not taken.
✓ Branch 0 taken 99 times.
✓ Branch 1 taken 21554 times.
✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 3 taken 99 times.
✓ Branch 3 taken 34341 times.
✓ Branch 4 taken 114317 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 114317 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 20416 times.
✓ Branch 9 taken 12733711 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 3336 times.
<unknown function 55>:
✓ Branch 0 taken 1750 times.
✓ Branch 0 taken 24623 times.
✓ Branch 0 taken 89319 times.
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 9394 times.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 113944 times.
✓ Branch 3 taken 8556 times.
✓ Branch 3 taken 1160 times.
✓ Branch 4 taken 1546968 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✓ Branch 6 taken 6245 times.
✓ Branch 7 taken 1546968 times.
✗ Branch 7 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 17980201 times.
✗ Branch 8 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 9 taken 6245 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 10 taken 6072 times.
✓ Branch 11 taken 17980201 times.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2784675 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 13 taken 6069 times.
✗ Branch 14 not taken.
✓ Branch 14 taken 6069 times.
✓ Branch 15 taken 2784675 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 207292 times.
✗ Branch 16 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 17 not taken.
✓ Branch 17 taken 6069 times.
✗ Branch 18 not taken.
✗ Branch 18 not taken.
✓ Branch 18 taken 6069 times.
✓ Branch 19 taken 207292 times.
✗ Branch 19 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 3449821 times.
✗ Branch 21 not taken.
✓ Branch 21 taken 6069 times.
✗ Branch 22 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2177711 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 2975 times.
✓ Branch 24 taken 20492264 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2975 times.
✓ Branch 27 taken 20492264 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 19 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 1338 times.
✓ Branch 36 taken 5841 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 5841 times.
<unknown function 56>:
✓ Branch 0 taken 4011865 times.
✗ Branch 0 not taken.
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 46114 times.
✗ Branch 1 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 time.
✓ Branch 3 taken 4020844 times.
✗ Branch 4 not taken.
✓ Branch 4 taken 172 times.
✓ Branch 5 taken 8979 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 7 taken 172 times.
✗ Branch 8 not taken.
✓ Branch 8 taken 18 times.
✗ Branch 9 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 11 taken 18 times.
✗ Branch 12 not taken.
✓ Branch 12 taken 12101335 times.
✗ Branch 13 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 15 taken 12101335 times.
✓ Branch 16 taken 1841476 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1841476 times.
<unknown function 92>:
✓ Branch 0 taken 128 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 128 times.
<unknown function 97>:
✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 44 times.
✓ Branch 4 taken 3120 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 3120 times.
|
79742199 | return ((y > 0 && res < 0) || (y < 0 && res > 0)) ? (res + y) : res; |
| 141 | } | ||
| 142 | |||
| 143 | /* Modelica.Constants.inf and .Integer_inf. */ | ||
| 144 | extern modelica_real realMaxLit(void); | ||
| 145 | extern modelica_integer intMaxLit(void); | ||
| 146 | |||
| 147 | #endif | ||
| 148 |