File tree 1 file changed +10
-8
lines changed
1 file changed +10
-8
lines changed Original file line number Diff line number Diff line change @@ -903,15 +903,17 @@ impl<T: sealed::Context> Features<T> {
903
903
/// Converts `Features<T>` to `Features<C>`. Only known `T` features relevant to context `C` are
904
904
/// included in the result.
905
905
fn to_context_internal < C : sealed:: Context > ( & self ) -> Features < C > {
906
- let from_byte_count = T :: KNOWN_FEATURE_MASK . len ( ) ;
907
- let to_byte_count = C :: KNOWN_FEATURE_MASK . len ( ) ;
908
- let mut flags = Vec :: new ( ) ;
909
- for ( i, byte) in self . flags . iter ( ) . enumerate ( ) {
910
- if i < from_byte_count && i < to_byte_count {
911
- let from_known_features = T :: KNOWN_FEATURE_MASK [ i] ;
912
- let to_known_features = C :: KNOWN_FEATURE_MASK [ i] ;
913
- flags. push ( byte & from_known_features & to_known_features) ;
906
+ let flag_iter = self . flags . iter ( ) . enumerate ( ) . filter_map ( |( i, byte) | {
907
+ if i < T :: KNOWN_FEATURE_MASK . len ( ) && i < C :: KNOWN_FEATURE_MASK . len ( ) {
908
+ Some ( ( i, * byte & T :: KNOWN_FEATURE_MASK [ i] & C :: KNOWN_FEATURE_MASK [ i] ) )
909
+ } else {
910
+ None
914
911
}
912
+ } ) ;
913
+ let mut flags = Vec :: new ( ) ;
914
+ flags. resize ( flag_iter. clone ( ) . count ( ) , 0 ) ;
915
+ for ( i, byte) in flag_iter {
916
+ flags[ i] = byte;
915
917
}
916
918
Features :: < C > { flags, mark : PhantomData }
917
919
}
You can’t perform that action at this time.
0 commit comments