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