@@ -14,15 +14,16 @@ pub struct Point {
14
14
impl Point {
15
15
pub fn new ( vals : & [ PathResCoeff ] , state : & TrainState ) -> anyhow:: Result < Self > {
16
16
Ok ( Self {
17
- idx : vals. calc_idx :: < { Dir :: Fwd } > ( state. offset - state. length * 0.5 , 0 ) ?,
17
+ idx : vals. calc_idx ( state. offset - state. length * 0.5 , 0 , & Dir :: Fwd ) ?,
18
18
} )
19
19
}
20
- pub fn calc_res < const DIR : DirT > (
20
+ pub fn calc_res (
21
21
& mut self ,
22
22
vals : & [ PathResCoeff ] ,
23
23
state : & TrainState ,
24
+ dir : & Dir ,
24
25
) -> anyhow:: Result < si:: Force > {
25
- self . idx = vals. calc_idx :: < DIR > ( state. offset - state. length * 0.5 , self . idx ) ?;
26
+ self . idx = vals. calc_idx ( state. offset - state. length * 0.5 , self . idx , dir ) ?;
26
27
Ok ( calc_res_val ( vals[ self . idx ] . res_coeff , state) )
27
28
}
28
29
pub fn res_coeff_front ( & self , vals : & [ PathResCoeff ] ) -> si:: Ratio {
@@ -61,31 +62,43 @@ impl Strap {
61
62
idx_back : 0 ,
62
63
} )
63
64
} else {
64
- let idx_back = vals. calc_idx :: < { Dir :: Fwd } > ( state. offset - state. length , 0 ) ?;
65
+ let idx_back = vals. calc_idx ( state. offset - state. length , 0 , & Dir :: Fwd ) ?;
65
66
Ok ( Self {
66
67
idx_back,
67
- idx_front : vals. calc_idx :: < { Dir :: Fwd } > ( state. offset , idx_back) ?,
68
+ idx_front : vals. calc_idx ( state. offset , idx_back, & Dir :: Fwd ) ?,
68
69
} )
69
70
}
70
71
}
71
- pub fn calc_res < const DIR : DirT > (
72
+ pub fn calc_res (
72
73
& mut self ,
73
74
vals : & [ PathResCoeff ] ,
74
75
state : & TrainState ,
76
+ dir : & Dir ,
75
77
) -> anyhow:: Result < si:: Force > {
76
- if DIR == Dir :: Fwd || DIR == Dir :: Unk {
77
- self . idx_front = vals. calc_idx :: < DIR > ( state. offset , self . idx_front ) ?;
78
- }
79
- if DIR == Dir :: Bwd || DIR == Dir :: Unk {
80
- self . idx_back = vals. calc_idx :: < DIR > ( state. offset_back , self . idx_back ) ?;
78
+ match dir {
79
+ Dir :: Fwd => {
80
+ self . idx_front = vals. calc_idx ( state. offset , self . idx_front , dir) ?;
81
+ }
82
+ Dir :: Bwd => {
83
+ self . idx_back = vals. calc_idx ( state. offset_back , self . idx_back , dir) ?;
84
+ }
85
+ Dir :: Unk => {
86
+ self . idx_front = vals. calc_idx ( state. offset , self . idx_front , dir) ?;
87
+ self . idx_back = vals. calc_idx ( state. offset_back , self . idx_back , dir) ?;
88
+ }
81
89
}
90
+
82
91
let res_coeff = if self . idx_front == self . idx_back {
83
92
vals[ self . idx_front ] . res_coeff
84
93
} else {
85
- if DIR == Dir :: Fwd {
86
- self . idx_back = vals. calc_idx :: < DIR > ( state. offset_back , self . idx_back ) ?;
87
- } else if DIR == Dir :: Bwd {
88
- self . idx_front = vals. calc_idx :: < DIR > ( state. offset , self . idx_front ) ?;
94
+ match dir {
95
+ Dir :: Fwd => {
96
+ self . idx_back = vals. calc_idx ( state. offset_back , self . idx_back , dir) ?;
97
+ }
98
+ Dir :: Bwd => {
99
+ self . idx_front = vals. calc_idx ( state. offset , self . idx_front , dir) ?;
100
+ }
101
+ _ => { }
89
102
}
90
103
vals. calc_res_strap ( self . idx_front , self . idx_back , state)
91
104
} ;
0 commit comments