1#[macro_export]
3macro_rules! generate_getset_functions {
4 ($ty:ty, $type_name:ident, $fmi_type:ty) => {
5 $crate::paste::paste! {
6 #[unsafe(export_name = stringify!([<fmi3Get $type_name>]))]
7 #[cfg_attr(coverage_nightly, coverage(off))]
8 pub unsafe extern "C" fn [<fmi3_get_ $type_name:snake>](
9 instance: ::fmi::fmi3::binding::fmi3Instance,
10 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
11 n_value_references: usize,
12 values: *mut $fmi_type,
13 n_values: usize,
14 ) -> ::fmi::fmi3::binding::fmi3Status {
15 <$ty as $crate::fmi3::Fmi3Common>::[<fmi3_get_ $type_name:snake>](
16 instance,
17 value_references,
18 n_value_references,
19 values,
20 n_values
21 )
22 }
23
24 #[unsafe(export_name = stringify!([<fmi3Set $type_name>]))]
25 #[cfg_attr(coverage_nightly, coverage(off))]
26 pub unsafe extern "C" fn [<fmi3_set_ $type_name:snake>](
27 instance: ::fmi::fmi3::binding::fmi3Instance,
28 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
29 n_value_references: usize,
30 values: *const $fmi_type,
31 n_values: usize,
32 ) -> ::fmi::fmi3::binding::fmi3Status {
33 <$ty as $crate::fmi3::Fmi3Common>::[<fmi3_set_ $type_name:snake>](
34 instance,
35 value_references,
36 n_value_references,
37 values,
38 n_values
39 )
40 }
41 }
42 };
43}
44
45#[macro_export]
76macro_rules! export_fmu {
77 ($ty:ty) => {
78 #[unsafe(export_name = "model_metadata")]
80 pub fn model_metadata() -> (
81 ::fmi::fmi3::schema::ModelVariables,
82 ::fmi::fmi3::schema::ModelStructure,
83 ) {
84 <$ty as ::fmi_export::fmi3::Model>::build_toplevel_metadata()
85 }
86
87 #[unsafe(export_name = "FMI3_INSTANTIATION_TOKEN")]
88 pub static FMI3_INSTANTIATION_TOKEN: &'static str =
89 <$ty as ::fmi_export::fmi3::Model>::INSTANTIATION_TOKEN;
90
91 #[unsafe(export_name = "fmi3SupportsModelExchange")]
92 #[cfg_attr(coverage_nightly, coverage(off))]
93 pub unsafe extern "C" fn fmi3_supports_model_exchange() -> ::fmi::fmi3::binding::fmi3Boolean
94 {
95 <$ty as ::fmi_export::fmi3::Model>::SUPPORTS_MODEL_EXCHANGE as _
96 }
97
98 #[unsafe(export_name = "fmi3SupportsCoSimulation")]
99 #[cfg_attr(coverage_nightly, coverage(off))]
100 pub unsafe extern "C" fn fmi3_supports_co_simulation() -> ::fmi::fmi3::binding::fmi3Boolean
101 {
102 <$ty as ::fmi_export::fmi3::Model>::SUPPORTS_CO_SIMULATION as _
103 }
104
105 #[unsafe(export_name = "fmi3SupportsScheduledExecution")]
106 #[cfg_attr(coverage_nightly, coverage(off))]
107 pub unsafe extern "C" fn fmi3_supports_scheduled_execution()
108 -> ::fmi::fmi3::binding::fmi3Boolean {
109 <$ty as ::fmi_export::fmi3::Model>::SUPPORTS_SCHEDULED_EXECUTION as _
110 }
111
112 #[unsafe(export_name = "fmi3GetVersion")]
115 #[cfg_attr(coverage_nightly, coverage(off))]
116 pub unsafe extern "C" fn fmi3_get_version() -> *const ::std::os::raw::c_char {
117 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_version()
118 }
119
120 #[unsafe(export_name = "fmi3SetDebugLogging")]
121 #[cfg_attr(coverage_nightly, coverage(off))]
122 pub unsafe extern "C" fn fmi3_set_debug_logging(
123 instance: ::fmi::fmi3::binding::fmi3Instance,
124 logging_on: ::fmi::fmi3::binding::fmi3Boolean,
125 n_categories: usize,
126 categories: *const ::fmi::fmi3::binding::fmi3String,
127 ) -> ::fmi::fmi3::binding::fmi3Status {
128 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_debug_logging(
129 instance,
130 logging_on,
131 n_categories,
132 categories,
133 )
134 }
135
136 #[unsafe(export_name = "fmi3InstantiateModelExchange")]
139 #[cfg_attr(coverage_nightly, coverage(off))]
140 unsafe extern "C" fn fmi3_instantiate_model_exchange(
141 instance_name: ::fmi::fmi3::binding::fmi3String,
142 instantiation_token: ::fmi::fmi3::binding::fmi3String,
143 resource_path: ::fmi::fmi3::binding::fmi3String,
144 visible: ::fmi::fmi3::binding::fmi3Boolean,
145 logging_on: ::fmi::fmi3::binding::fmi3Boolean,
146 instance_environment: ::fmi::fmi3::binding::fmi3InstanceEnvironment,
147 log_message: ::fmi::fmi3::binding::fmi3LogMessageCallback,
148 ) -> ::fmi::fmi3::binding::fmi3Instance {
149 <$ty as $crate::fmi3::Fmi3Common>::fmi3_instantiate_model_exchange(
150 instance_name,
151 instantiation_token,
152 resource_path,
153 visible,
154 logging_on,
155 instance_environment,
156 log_message,
157 )
158 }
159
160 #[unsafe(export_name = "fmi3InstantiateCoSimulation")]
161 #[cfg_attr(coverage_nightly, coverage(off))]
162 unsafe extern "C" fn fmi3_instantiate_co_simulation(
163 instance_name: ::fmi::fmi3::binding::fmi3String,
164 instantiation_token: ::fmi::fmi3::binding::fmi3String,
165 resource_path: ::fmi::fmi3::binding::fmi3String,
166 visible: ::fmi::fmi3::binding::fmi3Boolean,
167 logging_on: ::fmi::fmi3::binding::fmi3Boolean,
168 event_mode_used: ::fmi::fmi3::binding::fmi3Boolean,
169 early_return_allowed: ::fmi::fmi3::binding::fmi3Boolean,
170 required_intermediate_variables: *const ::fmi::fmi3::binding::fmi3ValueReference,
171 n_required_intermediate_variables: usize,
172 instance_environment: ::fmi::fmi3::binding::fmi3InstanceEnvironment,
173 log_message: ::fmi::fmi3::binding::fmi3LogMessageCallback,
174 intermediate_update: ::fmi::fmi3::binding::fmi3IntermediateUpdateCallback,
175 ) -> ::fmi::fmi3::binding::fmi3Instance {
176 <$ty as $crate::fmi3::Fmi3Common>::fmi3_instantiate_co_simulation(
177 instance_name,
178 instantiation_token,
179 resource_path,
180 visible,
181 logging_on,
182 event_mode_used,
183 early_return_allowed,
184 required_intermediate_variables,
185 n_required_intermediate_variables,
186 instance_environment,
187 log_message,
188 intermediate_update,
189 )
190 }
191
192 #[unsafe(export_name = "fmi3InstantiateScheduledExecution")]
193 #[cfg_attr(coverage_nightly, coverage(off))]
194 unsafe extern "C" fn fmi3_instantiate_scheduled_execution(
195 instance_name: ::fmi::fmi3::binding::fmi3String,
196 instantiation_token: ::fmi::fmi3::binding::fmi3String,
197 resource_path: ::fmi::fmi3::binding::fmi3String,
198 visible: ::fmi::fmi3::binding::fmi3Boolean,
199 logging_on: ::fmi::fmi3::binding::fmi3Boolean,
200 instance_environment: ::fmi::fmi3::binding::fmi3InstanceEnvironment,
201 log_message: ::fmi::fmi3::binding::fmi3LogMessageCallback,
202 clock_update: ::fmi::fmi3::binding::fmi3ClockUpdateCallback,
203 lock_preemption: ::fmi::fmi3::binding::fmi3LockPreemptionCallback,
204 unlock_preemption: ::fmi::fmi3::binding::fmi3UnlockPreemptionCallback,
205 ) -> ::fmi::fmi3::binding::fmi3Instance {
206 <$ty as $crate::fmi3::Fmi3Common>::fmi3_instantiate_scheduled_execution(
207 instance_name,
208 instantiation_token,
209 resource_path,
210 visible,
211 logging_on,
212 instance_environment,
213 log_message,
214 clock_update,
215 lock_preemption,
216 unlock_preemption,
217 )
218 }
219
220 #[unsafe(export_name = "fmi3FreeInstance")]
221 #[cfg_attr(coverage_nightly, coverage(off))]
222 unsafe extern "C" fn fmi3_free_instance(instance: ::fmi::fmi3::binding::fmi3Instance) {
223 <$ty as $crate::fmi3::Fmi3Common>::fmi3_free_instance(instance)
224 }
225
226 #[unsafe(export_name = "fmi3EnterInitializationMode")]
229 #[cfg_attr(coverage_nightly, coverage(off))]
230 unsafe extern "C" fn fmi3_enter_initialization_mode(
231 instance: ::fmi::fmi3::binding::fmi3Instance,
232 tolerance_defined: ::fmi::fmi3::binding::fmi3Boolean,
233 tolerance: ::fmi::fmi3::binding::fmi3Float64,
234 start_time: ::fmi::fmi3::binding::fmi3Float64,
235 stop_time_defined: ::fmi::fmi3::binding::fmi3Boolean,
236 stop_time: ::fmi::fmi3::binding::fmi3Float64,
237 ) -> ::fmi::fmi3::binding::fmi3Status {
238 <$ty as $crate::fmi3::Fmi3Common>::fmi3_enter_initialization_mode(
239 instance,
240 tolerance_defined,
241 tolerance,
242 start_time,
243 stop_time_defined,
244 stop_time,
245 )
246 }
247
248 #[unsafe(export_name = "fmi3ExitInitializationMode")]
249 #[cfg_attr(coverage_nightly, coverage(off))]
250 unsafe extern "C" fn fmi3_exit_initialization_mode(
251 instance: ::fmi::fmi3::binding::fmi3Instance,
252 ) -> ::fmi::fmi3::binding::fmi3Status {
253 <$ty as $crate::fmi3::Fmi3Common>::fmi3_exit_initialization_mode(instance)
254 }
255
256 #[unsafe(export_name = "fmi3EnterEventMode")]
257 #[cfg_attr(coverage_nightly, coverage(off))]
258 unsafe extern "C" fn fmi3_enter_event_mode(
259 instance: ::fmi::fmi3::binding::fmi3Instance,
260 ) -> ::fmi::fmi3::binding::fmi3Status {
261 <$ty as $crate::fmi3::Fmi3Common>::fmi3_enter_event_mode(instance)
262 }
263
264 #[unsafe(export_name = "fmi3Terminate")]
265 #[cfg_attr(coverage_nightly, coverage(off))]
266 unsafe extern "C" fn fmi3_terminate(
267 instance: ::fmi::fmi3::binding::fmi3Instance,
268 ) -> ::fmi::fmi3::binding::fmi3Status {
269 <$ty as $crate::fmi3::Fmi3Common>::fmi3_terminate(instance)
270 }
271
272 #[unsafe(export_name = "fmi3Reset")]
273 #[cfg_attr(coverage_nightly, coverage(off))]
274 unsafe extern "C" fn fmi3_reset(
275 instance: ::fmi::fmi3::binding::fmi3Instance,
276 ) -> ::fmi::fmi3::binding::fmi3Status {
277 <$ty as $crate::fmi3::Fmi3Common>::fmi3_reset(instance)
278 }
279
280 $crate::generate_getset_functions!($ty, Float64, ::fmi::fmi3::binding::fmi3Float64);
283 $crate::generate_getset_functions!($ty, Float32, ::fmi::fmi3::binding::fmi3Float32);
284 $crate::generate_getset_functions!($ty, Int64, ::fmi::fmi3::binding::fmi3Int64);
285 $crate::generate_getset_functions!($ty, Int32, ::fmi::fmi3::binding::fmi3Int32);
286 $crate::generate_getset_functions!($ty, Int16, ::fmi::fmi3::binding::fmi3Int16);
287 $crate::generate_getset_functions!($ty, Int8, ::fmi::fmi3::binding::fmi3Int8);
288 $crate::generate_getset_functions!($ty, UInt64, ::fmi::fmi3::binding::fmi3UInt64);
289 $crate::generate_getset_functions!($ty, UInt32, ::fmi::fmi3::binding::fmi3UInt32);
290 $crate::generate_getset_functions!($ty, UInt16, ::fmi::fmi3::binding::fmi3UInt16);
291 $crate::generate_getset_functions!($ty, UInt8, ::fmi::fmi3::binding::fmi3UInt8);
292 $crate::generate_getset_functions!($ty, Boolean, ::fmi::fmi3::binding::fmi3Boolean);
293
294 #[unsafe(export_name = "fmi3GetString")]
296 pub unsafe extern "C" fn fmi3_get_string(
297 instance: ::fmi::fmi3::binding::fmi3Instance,
298 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
299 n_value_references: usize,
300 values: *mut ::fmi::fmi3::binding::fmi3String,
301 n_values: usize,
302 ) -> ::fmi::fmi3::binding::fmi3Status {
303 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_string(
304 instance,
305 value_references,
306 n_value_references,
307 values,
308 n_values,
309 )
310 }
311
312 #[unsafe(export_name = "fmi3SetString")]
313 pub unsafe extern "C" fn fmi3_set_string(
314 instance: ::fmi::fmi3::binding::fmi3Instance,
315 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
316 n_value_references: usize,
317 values: *const ::fmi::fmi3::binding::fmi3String,
318 n_values: usize,
319 ) -> ::fmi::fmi3::binding::fmi3Status {
320 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_string(
321 instance,
322 value_references,
323 n_value_references,
324 values,
325 n_values,
326 )
327 }
328
329 #[unsafe(export_name = "fmi3GetBinary")]
330 pub unsafe extern "C" fn fmi3_get_binary(
331 instance: ::fmi::fmi3::binding::fmi3Instance,
332 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
333 n_value_references: usize,
334 value_sizes: *mut usize,
335 values: *mut *mut ::fmi::fmi3::binding::fmi3Byte,
336 n_values: usize,
337 ) -> ::fmi::fmi3::binding::fmi3Status {
338 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_binary(
339 instance,
340 value_references,
341 n_value_references,
342 value_sizes,
343 values,
344 n_values,
345 )
346 }
347
348 #[unsafe(export_name = "fmi3SetBinary")]
349 pub unsafe extern "C" fn fmi3_set_binary(
350 instance: ::fmi::fmi3::binding::fmi3Instance,
351 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
352 n_value_references: usize,
353 value_sizes: *const usize,
354 values: *const *const ::fmi::fmi3::binding::fmi3Byte,
355 n_values: usize,
356 ) -> ::fmi::fmi3::binding::fmi3Status {
357 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_binary(
358 instance,
359 value_references,
360 n_value_references,
361 value_sizes,
362 values,
363 n_values,
364 )
365 }
366
367 #[unsafe(export_name = "fmi3GetClock")]
368 pub unsafe extern "C" fn fmi3_get_clock(
369 instance: ::fmi::fmi3::binding::fmi3Instance,
370 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
371 n_value_references: usize,
372 values: *mut ::fmi::fmi3::binding::fmi3Clock,
373 ) -> ::fmi::fmi3::binding::fmi3Status {
374 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_clock(
375 instance,
376 value_references,
377 n_value_references,
378 values,
379 )
380 }
381
382 #[unsafe(export_name = "fmi3SetClock")]
383 pub unsafe extern "C" fn fmi3_set_clock(
384 instance: ::fmi::fmi3::binding::fmi3Instance,
385 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
386 n_value_references: usize,
387 values: *const ::fmi::fmi3::binding::fmi3Clock,
388 ) -> ::fmi::fmi3::binding::fmi3Status {
389 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_clock(
390 instance,
391 value_references,
392 n_value_references,
393 values,
394 )
395 }
396
397 #[unsafe(export_name = "fmi3GetNumberOfVariableDependencies")]
400 unsafe extern "C" fn fmi3_get_number_of_variable_dependencies(
401 instance: ::fmi::fmi3::binding::fmi3Instance,
402 value_reference: ::fmi::fmi3::binding::fmi3ValueReference,
403 n_dependencies: *mut usize,
404 ) -> ::fmi::fmi3::binding::fmi3Status {
405 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_number_of_variable_dependencies(
406 instance,
407 value_reference,
408 n_dependencies,
409 )
410 }
411
412 #[unsafe(export_name = "fmi3GetVariableDependencies")]
413 unsafe extern "C" fn fmi3_get_variable_dependencies(
414 instance: ::fmi::fmi3::binding::fmi3Instance,
415 dependent: ::fmi::fmi3::binding::fmi3ValueReference,
416 element_indices_of_dependent: *mut usize,
417 independents: *mut ::fmi::fmi3::binding::fmi3ValueReference,
418 element_indices_of_independents: *mut usize,
419 dependency_kinds: *mut ::fmi::fmi3::binding::fmi3DependencyKind,
420 n_dependencies: usize,
421 ) -> ::fmi::fmi3::binding::fmi3Status {
422 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_variable_dependencies(
423 instance,
424 dependent,
425 element_indices_of_dependent,
426 independents,
427 element_indices_of_independents,
428 dependency_kinds,
429 n_dependencies,
430 )
431 }
432
433 #[unsafe(export_name = "fmi3GetFMUState")]
436 unsafe extern "C" fn fmi3_get_fmu_state(
437 instance: ::fmi::fmi3::binding::fmi3Instance,
438 fmu_state: *mut ::fmi::fmi3::binding::fmi3FMUState,
439 ) -> ::fmi::fmi3::binding::fmi3Status {
440 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_fmu_state(instance, fmu_state)
441 }
442
443 #[unsafe(export_name = "fmi3SetFMUState")]
444 unsafe extern "C" fn fmi3_set_fmu_state(
445 instance: ::fmi::fmi3::binding::fmi3Instance,
446 fmu_state: ::fmi::fmi3::binding::fmi3FMUState,
447 ) -> ::fmi::fmi3::binding::fmi3Status {
448 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_fmu_state(instance, fmu_state)
449 }
450
451 #[unsafe(export_name = "fmi3FreeFMUState")]
452 unsafe extern "C" fn fmi3_free_fmu_state(
453 instance: ::fmi::fmi3::binding::fmi3Instance,
454 fmu_state: *mut ::fmi::fmi3::binding::fmi3FMUState,
455 ) -> ::fmi::fmi3::binding::fmi3Status {
456 <$ty as $crate::fmi3::Fmi3Common>::fmi3_free_fmu_state(instance, fmu_state)
457 }
458
459 #[unsafe(export_name = "fmi3SerializedFMUStateSize")]
460 unsafe fn fmi3_serialized_fmu_state_size(
461 instance: ::fmi::fmi3::binding::fmi3Instance,
462 fmu_state: ::fmi::fmi3::binding::fmi3FMUState,
463 size: *mut usize,
464 ) -> ::fmi::fmi3::binding::fmi3Status {
465 <$ty as $crate::fmi3::Fmi3Common>::fmi3_serialized_fmu_state_size(
466 instance, fmu_state, size,
467 )
468 }
469
470 #[unsafe(export_name = "fmi3SerializeFMUState")]
471 unsafe fn fmi3_serialize_fmu_state(
472 instance: ::fmi::fmi3::binding::fmi3Instance,
473 fmu_state: ::fmi::fmi3::binding::fmi3FMUState,
474 serialized_state: *mut ::fmi::fmi3::binding::fmi3Byte,
475 size: usize,
476 ) -> ::fmi::fmi3::binding::fmi3Status {
477 <$ty as $crate::fmi3::Fmi3Common>::fmi3_serialize_fmu_state(
478 instance,
479 fmu_state,
480 serialized_state,
481 size,
482 )
483 }
484
485 #[unsafe(export_name = "fmi3DeserializeFMUState")]
486 pub unsafe fn fmi3_deserialize_fmu_state(
487 instance: ::fmi::fmi3::binding::fmi3Instance,
488 serialized_state: *const ::fmi::fmi3::binding::fmi3Byte,
489 size: usize,
490 fmu_state: *mut ::fmi::fmi3::binding::fmi3FMUState,
491 ) -> ::fmi::fmi3::binding::fmi3Status {
492 <$ty as $crate::fmi3::Fmi3Common>::fmi3_deserialize_fmu_state(
493 instance,
494 serialized_state,
495 size,
496 fmu_state,
497 )
498 }
499
500 #[unsafe(export_name = "fmi3GetDirectionalDerivative")]
503 unsafe extern "C" fn fmi3_get_directional_derivative(
504 instance: ::fmi::fmi3::binding::fmi3Instance,
505 unknowns: *const ::fmi::fmi3::binding::fmi3ValueReference,
506 n_unknowns: usize,
507 knowns: *const ::fmi::fmi3::binding::fmi3ValueReference,
508 n_knowns: usize,
509 seed: *const ::fmi::fmi3::binding::fmi3Float64,
510 n_seed: usize,
511 sensitivity: *mut ::fmi::fmi3::binding::fmi3Float64,
512 n_sensitivity: usize,
513 ) -> ::fmi::fmi3::binding::fmi3Status {
514 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_directional_derivative(
515 instance,
516 unknowns,
517 n_unknowns,
518 knowns,
519 n_knowns,
520 seed,
521 n_seed,
522 sensitivity,
523 n_sensitivity,
524 )
525 }
526
527 #[unsafe(export_name = "fmi3GetAdjointDerivative")]
528 unsafe extern "C" fn fmi3_get_adjoint_derivative(
529 instance: ::fmi::fmi3::binding::fmi3Instance,
530 unknowns: *const ::fmi::fmi3::binding::fmi3ValueReference,
531 n_unknowns: usize,
532 knowns: *const ::fmi::fmi3::binding::fmi3ValueReference,
533 n_knowns: usize,
534 seed: *const ::fmi::fmi3::binding::fmi3Float64,
535 n_seed: usize,
536 sensitivity: *mut ::fmi::fmi3::binding::fmi3Float64,
537 n_sensitivity: usize,
538 ) -> ::fmi::fmi3::binding::fmi3Status {
539 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_adjoint_derivative(
540 instance,
541 unknowns,
542 n_unknowns,
543 knowns,
544 n_knowns,
545 seed,
546 n_seed,
547 sensitivity,
548 n_sensitivity,
549 )
550 }
551
552 #[unsafe(export_name = "fmi3EnterConfigurationMode")]
555 unsafe extern "C" fn fmi3_enter_configuration_mode(
556 instance: ::fmi::fmi3::binding::fmi3Instance,
557 ) -> ::fmi::fmi3::binding::fmi3Status {
558 <$ty as $crate::fmi3::Fmi3Common>::fmi3_enter_configuration_mode(instance)
559 }
560
561 #[unsafe(export_name = "fmi3ExitConfigurationMode")]
562 unsafe extern "C" fn fmi3_exit_configuration_mode(
563 instance: ::fmi::fmi3::binding::fmi3Instance,
564 ) -> ::fmi::fmi3::binding::fmi3Status {
565 <$ty as $crate::fmi3::Fmi3Common>::fmi3_exit_configuration_mode(instance)
566 }
567
568 #[unsafe(export_name = "fmi3GetIntervalDecimal")]
571 unsafe fn fmi3_get_interval_decimal(
572 instance: ::fmi::fmi3::binding::fmi3Instance,
573 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
574 n_value_references: usize,
575 intervals: *mut ::fmi::fmi3::binding::fmi3Float64,
576 qualifiers: *mut ::fmi::fmi3::binding::fmi3IntervalQualifier,
577 ) -> ::fmi::fmi3::binding::fmi3Status {
578 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_interval_decimal(
579 instance,
580 value_references,
581 n_value_references,
582 intervals,
583 qualifiers,
584 )
585 }
586
587 #[unsafe(export_name = "fmi3GetIntervalFraction")]
588 unsafe extern "C" fn fmi3_get_interval_fraction(
589 instance: ::fmi::fmi3::binding::fmi3Instance,
590 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
591 n_value_references: usize,
592 counters: *mut ::fmi::fmi3::binding::fmi3UInt64,
593 resolutions: *mut ::fmi::fmi3::binding::fmi3UInt64,
594 qualifiers: *mut ::fmi::fmi3::binding::fmi3IntervalQualifier,
595 ) -> ::fmi::fmi3::binding::fmi3Status {
596 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_interval_fraction(
597 instance,
598 value_references,
599 n_value_references,
600 counters,
601 resolutions,
602 qualifiers,
603 )
604 }
605
606 #[unsafe(export_name = "fmi3GetShiftDecimal")]
607 unsafe extern "C" fn fmi3_get_shift_decimal(
608 instance: ::fmi::fmi3::binding::fmi3Instance,
609 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
610 n_value_references: usize,
611 shifts: *mut ::fmi::fmi3::binding::fmi3Float64,
612 ) -> ::fmi::fmi3::binding::fmi3Status {
613 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_shift_decimal(
614 instance,
615 value_references,
616 n_value_references,
617 shifts,
618 )
619 }
620
621 #[unsafe(export_name = "fmi3GetShiftFraction")]
622 unsafe extern "C" fn fmi3_get_shift_fraction(
623 instance: ::fmi::fmi3::binding::fmi3Instance,
624 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
625 n_value_references: usize,
626 counters: *mut ::fmi::fmi3::binding::fmi3UInt64,
627 resolutions: *mut ::fmi::fmi3::binding::fmi3UInt64,
628 ) -> ::fmi::fmi3::binding::fmi3Status {
629 <$ty as $crate::fmi3::Fmi3Common>::fmi3_get_shift_fraction(
630 instance,
631 value_references,
632 n_value_references,
633 counters,
634 resolutions,
635 )
636 }
637
638 #[unsafe(export_name = "fmi3SetIntervalDecimal")]
639 unsafe extern "C" fn fmi3_set_interval_decimal(
640 instance: ::fmi::fmi3::binding::fmi3Instance,
641 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
642 n_value_references: usize,
643 intervals: *const ::fmi::fmi3::binding::fmi3Float64,
644 ) -> ::fmi::fmi3::binding::fmi3Status {
645 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_interval_decimal(
646 instance,
647 value_references,
648 n_value_references,
649 intervals,
650 )
651 }
652
653 #[unsafe(export_name = "fmi3SetIntervalFraction")]
654 unsafe extern "C" fn fmi3_set_interval_fraction(
655 instance: ::fmi::fmi3::binding::fmi3Instance,
656 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
657 n_value_references: usize,
658 counters: *const ::fmi::fmi3::binding::fmi3UInt64,
659 resolutions: *const ::fmi::fmi3::binding::fmi3UInt64,
660 ) -> ::fmi::fmi3::binding::fmi3Status {
661 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_interval_fraction(
662 instance,
663 value_references,
664 n_value_references,
665 counters,
666 resolutions,
667 )
668 }
669
670 #[unsafe(export_name = "fmi3SetShiftDecimal")]
671 unsafe extern "C" fn fmi3_set_shift_decimal(
672 instance: ::fmi::fmi3::binding::fmi3Instance,
673 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
674 n_value_references: usize,
675 shifts: *const ::fmi::fmi3::binding::fmi3Float64,
676 ) -> ::fmi::fmi3::binding::fmi3Status {
677 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_shift_decimal(
678 instance,
679 value_references,
680 n_value_references,
681 shifts,
682 )
683 }
684
685 #[unsafe(export_name = "fmi3SetShiftFraction")]
686 unsafe extern "C" fn fmi3_set_shift_fraction(
687 instance: ::fmi::fmi3::binding::fmi3Instance,
688 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
689 n_value_references: usize,
690 counters: *const ::fmi::fmi3::binding::fmi3UInt64,
691 resolutions: *const ::fmi::fmi3::binding::fmi3UInt64,
692 ) -> ::fmi::fmi3::binding::fmi3Status {
693 <$ty as $crate::fmi3::Fmi3Common>::fmi3_set_shift_fraction(
694 instance,
695 value_references,
696 n_value_references,
697 counters,
698 resolutions,
699 )
700 }
701
702 #[unsafe(export_name = "fmi3EvaluateDiscreteStates")]
703 unsafe extern "C" fn fmi3_evaluate_discrete_states(
704 instance: ::fmi::fmi3::binding::fmi3Instance,
705 ) -> ::fmi::fmi3::binding::fmi3Status {
706 <$ty as $crate::fmi3::Fmi3Common>::fmi3_evaluate_discrete_states(instance)
707 }
708
709 #[unsafe(export_name = "fmi3UpdateDiscreteStates")]
710 unsafe extern "C" fn fmi3_update_discrete_states(
711 instance: ::fmi::fmi3::binding::fmi3Instance,
712 discrete_states_need_update: *mut ::fmi::fmi3::binding::fmi3Boolean,
713 terminate_simulation: *mut ::fmi::fmi3::binding::fmi3Boolean,
714 nominals_of_continuous_states_changed: *mut ::fmi::fmi3::binding::fmi3Boolean,
715 values_of_continuous_states_changed: *mut ::fmi::fmi3::binding::fmi3Boolean,
716 next_event_time_defined: *mut ::fmi::fmi3::binding::fmi3Boolean,
717 next_event_time: *mut ::fmi::fmi3::binding::fmi3Float64,
718 ) -> ::fmi::fmi3::binding::fmi3Status {
719 <$ty as $crate::fmi3::Fmi3Common>::fmi3_update_discrete_states(
720 instance,
721 discrete_states_need_update,
722 terminate_simulation,
723 nominals_of_continuous_states_changed,
724 values_of_continuous_states_changed,
725 next_event_time_defined,
726 next_event_time,
727 )
728 }
729
730 #[unsafe(export_name = "fmi3EnterContinuousTimeMode")]
733 unsafe extern "C" fn fmi3_enter_continuous_time_mode(
734 instance: ::fmi::fmi3::binding::fmi3Instance,
735 ) -> ::fmi::fmi3::binding::fmi3Status {
736 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_enter_continuous_time_mode(instance)
737 }
738
739 #[unsafe(export_name = "fmi3CompletedIntegratorStep")]
740 unsafe extern "C" fn fmi3_completed_integrator_step(
741 instance: ::fmi::fmi3::binding::fmi3Instance,
742 no_set_fmu_state_prior: ::fmi::fmi3::binding::fmi3Boolean,
743 enter_event_mode: *mut ::fmi::fmi3::binding::fmi3Boolean,
744 terminate_simulation: *mut ::fmi::fmi3::binding::fmi3Boolean,
745 ) -> ::fmi::fmi3::binding::fmi3Status {
746 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_completed_integrator_step(
747 instance,
748 no_set_fmu_state_prior,
749 enter_event_mode,
750 terminate_simulation,
751 )
752 }
753
754 #[unsafe(export_name = "fmi3SetTime")]
757 unsafe extern "C" fn fmi3_set_time(
758 instance: ::fmi::fmi3::binding::fmi3Instance,
759 time: ::fmi::fmi3::binding::fmi3Float64,
760 ) -> ::fmi::fmi3::binding::fmi3Status {
761 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_set_time(instance, time)
762 }
763
764 #[unsafe(export_name = "fmi3SetContinuousStates")]
765 unsafe extern "C" fn fmi3_set_continuous_states(
766 instance: ::fmi::fmi3::binding::fmi3Instance,
767 continuous_states: *const ::fmi::fmi3::binding::fmi3Float64,
768 n_continuous_states: usize,
769 ) -> ::fmi::fmi3::binding::fmi3Status {
770 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_set_continuous_states(
771 instance,
772 continuous_states,
773 n_continuous_states,
774 )
775 }
776
777 #[unsafe(export_name = "fmi3GetContinuousStateDerivatives")]
780 unsafe extern "C" fn fmi3_get_continuous_state_derivatives(
781 instance: ::fmi::fmi3::binding::fmi3Instance,
782 derivatives: *mut ::fmi::fmi3::binding::fmi3Float64,
783 n_continuous_states: usize,
784 ) -> ::fmi::fmi3::binding::fmi3Status {
785 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_get_continuous_state_derivatives(
786 instance,
787 derivatives,
788 n_continuous_states,
789 )
790 }
791
792 #[unsafe(export_name = "fmi3GetEventIndicators")]
793 unsafe extern "C" fn fmi3_get_event_indicators(
794 instance: ::fmi::fmi3::binding::fmi3Instance,
795 event_indicators: *mut ::fmi::fmi3::binding::fmi3Float64,
796 n_event_indicators: usize,
797 ) -> ::fmi::fmi3::binding::fmi3Status {
798 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_get_event_indicators(
799 instance,
800 event_indicators,
801 n_event_indicators,
802 )
803 }
804
805 #[unsafe(export_name = "fmi3GetContinuousStates")]
806 unsafe extern "C" fn fmi3_get_continuous_states(
807 instance: ::fmi::fmi3::binding::fmi3Instance,
808 continuous_states: *mut ::fmi::fmi3::binding::fmi3Float64,
809 n_continuous_states: usize,
810 ) -> ::fmi::fmi3::binding::fmi3Status {
811 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_get_continuous_states(
812 instance,
813 continuous_states,
814 n_continuous_states,
815 )
816 }
817
818 #[unsafe(export_name = "fmi3GetNominalsOfContinuousStates")]
819 unsafe extern "C" fn fmi3_get_nominals_of_continuous_states(
820 instance: ::fmi::fmi3::binding::fmi3Instance,
821 nominals: *mut ::fmi::fmi3::binding::fmi3Float64,
822 n_continuous_states: usize,
823 ) -> ::fmi::fmi3::binding::fmi3Status {
824 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_get_nominals_of_continuous_states(
825 instance,
826 nominals,
827 n_continuous_states,
828 )
829 }
830
831 #[unsafe(export_name = "fmi3GetNumberOfEventIndicators")]
832 unsafe extern "C" fn fmi3_get_number_of_event_indicators(
833 instance: ::fmi::fmi3::binding::fmi3Instance,
834 n_event_indicators: *mut usize,
835 ) -> ::fmi::fmi3::binding::fmi3Status {
836 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_get_number_of_event_indicators(
837 instance,
838 n_event_indicators,
839 )
840 }
841
842 #[unsafe(export_name = "fmi3GetNumberOfContinuousStates")]
843 unsafe extern "C" fn fmi3_get_number_of_continuous_states(
844 instance: ::fmi::fmi3::binding::fmi3Instance,
845 n_continuous_states: *mut usize,
846 ) -> ::fmi::fmi3::binding::fmi3Status {
847 <$ty as $crate::fmi3::Fmi3ModelExchange>::fmi3_get_number_of_continuous_states(
848 instance,
849 n_continuous_states,
850 )
851 }
852
853 #[unsafe(export_name = "fmi3EnterStepMode")]
856 unsafe extern "C" fn fmi3_enter_step_mode(
857 instance: ::fmi::fmi3::binding::fmi3Instance,
858 ) -> ::fmi::fmi3::binding::fmi3Status {
859 <$ty as $crate::fmi3::Fmi3CoSimulation>::fmi3_enter_step_mode(instance)
860 }
861
862 #[unsafe(export_name = "fmi3GetOutputDerivatives")]
863 unsafe extern "C" fn fmi3_get_output_derivatives(
864 instance: ::fmi::fmi3::binding::fmi3Instance,
865 value_references: *const ::fmi::fmi3::binding::fmi3ValueReference,
866 n_value_references: usize,
867 orders: *const ::fmi::fmi3::binding::fmi3Int32,
868 values: *mut ::fmi::fmi3::binding::fmi3Float64,
869 n_values: usize,
870 ) -> ::fmi::fmi3::binding::fmi3Status {
871 <$ty as $crate::fmi3::Fmi3CoSimulation>::fmi3_get_output_derivatives(
872 instance,
873 value_references,
874 n_value_references,
875 orders,
876 values,
877 n_values,
878 )
879 }
880
881 #[unsafe(export_name = "fmi3DoStep")]
882 unsafe extern "C" fn fmi3_do_step(
883 instance: ::fmi::fmi3::binding::fmi3Instance,
884 current_communication_point: ::fmi::fmi3::binding::fmi3Float64,
885 communication_step_size: ::fmi::fmi3::binding::fmi3Float64,
886 no_set_fmu_state_prior_to_current_point: ::fmi::fmi3::binding::fmi3Boolean,
887 event_handling_needed: *mut ::fmi::fmi3::binding::fmi3Boolean,
888 terminate_simulation: *mut ::fmi::fmi3::binding::fmi3Boolean,
889 early_return: *mut ::fmi::fmi3::binding::fmi3Boolean,
890 last_successful_time: *mut ::fmi::fmi3::binding::fmi3Float64,
891 ) -> ::fmi::fmi3::binding::fmi3Status {
892 <$ty as $crate::fmi3::Fmi3CoSimulation>::fmi3_do_step(
893 instance,
894 current_communication_point,
895 communication_step_size,
896 no_set_fmu_state_prior_to_current_point,
897 event_handling_needed,
898 terminate_simulation,
899 early_return,
900 last_successful_time,
901 )
902 }
903
904 #[unsafe(export_name = "fmi3ActivateModelPartition")]
905 unsafe extern "C" fn fmi3_activate_model_partition(
906 instance: ::fmi::fmi3::binding::fmi3Instance,
907 clock_reference: ::fmi::fmi3::binding::fmi3ValueReference,
908 activation_time: ::fmi::fmi3::binding::fmi3Float64,
909 ) -> ::fmi::fmi3::binding::fmi3Status {
910 <$ty as $crate::fmi3::Fmi3ScheduledExecution>::fmi3_activate_model_partition(
911 instance,
912 clock_reference,
913 activation_time,
914 )
915 }
916 };
917}