@@ -11,9 +11,9 @@ use std::ops::{Deref, DerefMut};
1111
1212pub struct MultiColorTimeSeries < ' a , P : PassbandTrait , T : Float > ( BTreeMap < P , TimeSeries < ' a , T > > ) ;
1313
14- impl < ' a , P , T > MultiColorTimeSeries < ' a , P , T >
14+ impl < ' a , ' p , P , T > MultiColorTimeSeries < ' a , P , T >
1515where
16- P : PassbandTrait ,
16+ P : PassbandTrait + ' p ,
1717 T : Float ,
1818{
1919 pub fn new ( map : impl Into < BTreeMap < P , TimeSeries < ' a , T > > > ) -> Self {
3131 {
3232 match passband_set {
3333 PassbandSet :: AllAvailable => Either :: Left ( self . 0 . iter ( ) . map ( |( p, ts) | ( p, Some ( ts) ) ) ) ,
34- PassbandSet :: FixedSet ( set) => Either :: Right ( set. iter ( ) . map ( |p| ( p , self . 0 . get ( p ) ) ) ) ,
34+ PassbandSet :: FixedSet ( set) => Either :: Right ( self . iter_matched_passbands ( set. iter ( ) ) ) ,
3535 }
3636 }
3737
@@ -48,20 +48,34 @@ where
4848 PassbandSet :: AllAvailable => {
4949 Either :: Left ( self . 0 . iter_mut ( ) . map ( |( p, ts) | ( p, Some ( ts) ) ) )
5050 }
51- PassbandSet :: FixedSet ( set) => Either :: Right (
52- set. iter ( )
53- . merge_join_by ( self . 0 . iter_mut ( ) , |p1, ( p2, _ts) | p1. cmp ( p2) )
54- . filter_map ( |either_or_both| match either_or_both {
55- // mcts misses required passband
56- EitherOrBoth :: Left ( p) => Some ( ( p, None ) ) ,
57- // mcts has some passban passband_set doesn't require
58- EitherOrBoth :: Right ( _) => None ,
59- // passbands match
60- EitherOrBoth :: Both ( p, ( _, ts) ) => Some ( ( p, Some ( ts) ) ) ,
61- } ) ,
62- ) ,
51+ PassbandSet :: FixedSet ( set) => {
52+ Either :: Right ( self . iter_matched_passbands_mut ( set. iter ( ) ) )
53+ }
6354 }
6455 }
56+
57+ pub fn iter_matched_passbands (
58+ & self ,
59+ passband_it : impl Iterator < Item = & ' p P > ,
60+ ) -> impl Iterator < Item = ( & ' p P , Option < & TimeSeries < ' a , T > > ) > {
61+ passband_it. map ( |p| ( p, self . 0 . get ( p) ) )
62+ }
63+
64+ pub fn iter_matched_passbands_mut (
65+ & mut self ,
66+ passband_it : impl Iterator < Item = & ' p P > ,
67+ ) -> impl Iterator < Item = ( & ' p P , Option < & mut TimeSeries < ' a , T > > ) > {
68+ passband_it
69+ . merge_join_by ( self . 0 . iter_mut ( ) , |p1, ( p2, _ts) | p1. cmp ( p2) )
70+ . filter_map ( |either_or_both| match either_or_both {
71+ // mcts misses required passband
72+ EitherOrBoth :: Left ( p) => Some ( ( p, None ) ) ,
73+ // mcts has some passban passband_set doesn't require
74+ EitherOrBoth :: Right ( _) => None ,
75+ // passbands match
76+ EitherOrBoth :: Both ( p, ( _, ts) ) => Some ( ( p, Some ( ts) ) ) ,
77+ } )
78+ }
6579}
6680
6781impl < ' a , P : PassbandTrait , T : Float > Deref for MultiColorTimeSeries < ' a , P , T > {
0 commit comments