Linux GNU 11.4.0 Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 61.5% 32 / 0 / 52
Functions: 57.1% 12 / 0 / 21
Branches: 7.1% 1 / 0 / 14

OMCompiler/SimulationRuntime/cpp/Core/System/DiscreteEvents.cpp
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 /** @addtogroup coreSystem
29 *
30 * @{
31 */
32 #include <Core/ModelicaDefine.h>
33 #include <Core/Modelica.h>
34 #include <Core/System/FactoryExport.h>
35 #include <Core/System/DiscreteEvents.h>
36 #include <Core/Math/Functions.h>
37
38
39 43 DiscreteEvents::DiscreteEvents(shared_ptr<ISimVars> sim_vars)
40 43 : _sim_vars(sim_vars)
41 {
42 43 }
43
44
1/2
✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
86 DiscreteEvents::~DiscreteEvents(void)
45 {
46
47
48 86 }
49
50 /**
51 Inits the event variables
52 */
53 43 void DiscreteEvents::initialize()
54 {
55
56 43 _sim_vars->initPreVariables();
57 //_preVars->_pre_vars.resize((boost::extents[_preVars->_pre_real_vars_idx.size()+_preVars->_pre_int_vars_idx.size()+_preVars->_pre_bool_vars_idx.size()]));
58 43 }
59
60 /*
61 void DiscreteEvents::savePreVars(double vars[], unsigned int n)
62 {
63 _preVars->_pre_vars.assign(vars,vars+n);
64 }
65 */
66
67 /**
68 Saves a variable in _sim_vars->_pre_real_vars vector
69 */
70 291 void DiscreteEvents::save(double& var,double value)
71 {
72 291 _sim_vars->getPreVar(var) = value;
73 291 }
74
75 /**
76 Saves a variable in _sim_vars->_pre_int_vars vector
77 */
78 50 void DiscreteEvents::save(int& var,double value)
79 {
80 50 _sim_vars->getPreVar(var) = value;
81 50 }
82
83 /**
84 Saves a variable in _sim_vars->_pre_bool_vars vector
85 */
86 15 void DiscreteEvents::save(bool& var,double value)
87 {
88 15 _sim_vars->getPreVar(var) = value;
89 15 }
90
91 /**
92 Saves a variable in _sim_vars->_pre_string_vars vector
93 */
94 ✗ void DiscreteEvents::save(std::string& var,const std::string& value)
95 {
96 ✗ _sim_vars->getPreVar(var) = value;
97 ✗ }
98
99
100 /**
101 Implementation of the Modelica pre operator
102 */
103 3468569 double& DiscreteEvents::pre(const double& var)
104 {
105 3468569 return _sim_vars->getPreVar(var);
106 }
107
108 /**
109 Implementation of the Modelica pre operator
110 */
111 120787 int& DiscreteEvents::pre(const int& var)
112 {
113 120787 return _sim_vars->getPreVar(var);
114 }
115
116 /**
117 Implementation of the Modelica pre operator
118 */
119 80402 bool& DiscreteEvents::pre(const bool& var)
120 {
121 80402 return _sim_vars->getPreVar(var);
122 }
123
124 /**
125 Implementation of the Modelica pre operator
126 */
127 ✗ std::string& DiscreteEvents::pre(const std::string& var)
128 {
129 ✗ return _sim_vars->getPreVar(var);
130 }
131
132 /**
133 Implementation of the Modelica edge operator
134 Returns true for a variable when it changes from false to true
135 */
136 ✗ bool DiscreteEvents::edge(double& var)
137 {
138 ✗ return var && !pre(var);
139 }
140
141 /**
142 Implementation of the Modelica edge operator
143 Returns true for a variable when it changes from false to true
144 */
145 ✗ bool DiscreteEvents::edge(int& var)
146 {
147 ✗ return var && !pre(var);
148 }
149
150 /**
151 Implementation of the Modelica edge operator
152 Returns true for a variable when it changes from false to true
153 */
154 ✗ bool DiscreteEvents::edge(bool& var)
155 {
156 ✗ return var && !pre(var);
157 }
158
159 /**
160 Implementation of the Modelica change operator
161 Returns true for a variable when it change value
162 */
163 ✗ bool DiscreteEvents::change(double& var)
164 {
165 ✗ return var != pre(var);
166 }
167
168 /**
169 Implementation of the Modelica change operator
170 Returns true for a variable when it change value
171 */
172 ✗ bool DiscreteEvents::change(int& var)
173 {
174 ✗ return var != pre(var);
175 }
176
177 /**
178 Implementation of the Modelica change operator
179 Returns true for a variable when it change value
180 */
181 ✗ bool DiscreteEvents::change(bool& var)
182 {
183 ✗ return var != pre(var);
184 }
185
186 89075 bool DiscreteEvents::changeDiscreteVar(double& var)
187 {
188 89075 double& pre_var = _sim_vars->getPreVar(var);
189 89075 return var != pre_var;
190 }
191
192 61270 bool DiscreteEvents::changeDiscreteVar(int& var)
193 {
194 61270 int& pre_var = _sim_vars->getPreVar(var);
195 61270 return var != pre_var;
196 }
197
198 103876 bool DiscreteEvents::changeDiscreteVar(bool& var)
199 {
200 103876 bool& pre_var = _sim_vars->getPreVar(var);
201 103876 return var != pre_var;
202 }
203
204 ✗ bool DiscreteEvents::changeDiscreteVar(std::string& var)
205 {
206 ✗ std::string& pre_var = _sim_vars->getPreVar(var);
207 ✗ return var != pre_var;
208 }
209
210 /** @} */ // end of coreSystem
211
212