diffsol_c/
solve_macros.rs1#[macro_export]
3macro_rules! generate_trait_ic_option_accessors {
4 ($($field:ident : $type:ty),*) => {
5 $(
6 paste! {
7 fn [<set_ic_ $field>](&mut self, value: $type);
8 fn [<ic_ $field>](&self) -> $type;
9 }
10 )*
11 };
12}
13
14#[macro_export]
16macro_rules! generate_trait_ode_option_accessors {
17 ($($field:ident : $type:ty),*) => {
18 $(
19 paste! {
20 fn [<set_ode_ $field>](&mut self, value: $type);
21 fn [<ode_ $field>](&self) -> $type;
22 }
23 )*
24 };
25}
26
27#[macro_export]
29macro_rules! option_value_to_store {
30 ($value:expr, f64) => {
31 M::T::from_f64($value).unwrap()
32 };
33 ($value:expr, $type:ty) => {
34 $value
35 };
36}
37
38#[macro_export]
39macro_rules! option_value_from_store {
40 ($value:expr, f64) => {
41 $value.to_f64().unwrap()
42 };
43 ($value:expr, $type:ty) => {
44 $value
45 };
46}
47
48#[macro_export]
50macro_rules! generate_option_accessors {
51 ($store:ident, $prefix:ident; $($field:ident : $type:ty),* $(,)?) => {
52 $(
53 paste! {
54 fn [<set_ $prefix _ $field>](&mut self, value: $type) {
55 self.problem.$store.$field = option_value_to_store!(value, $type);
56 }
57
58 fn [<$prefix _ $field>](&self) -> $type {
59 option_value_from_store!(self.problem.$store.$field, $type)
60 }
61 }
62 )*
63 };
64}
65
66#[macro_export]
68macro_rules! generate_ic_option_accessors {
69 ($($field:ident : $type:ty),* $(,)?) => {
70 generate_option_accessors! { ic_options, ic; $($field : $type),* }
71 };
72}
73
74#[macro_export]
76macro_rules! generate_ode_option_accessors {
77 ($($field:ident : $type:ty),* $(,)?) => {
78 generate_option_accessors! { ode_options, ode; $($field : $type),* }
79 };
80}