File tree Expand file tree Collapse file tree 1 file changed +10
-8
lines changed Expand file tree Collapse file tree 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> {
903903 /// Converts `Features<T>` to `Features<C>`. Only known `T` features relevant to context `C` are
904904 /// included in the result.
905905 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
914911 }
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;
915917 }
916918 Features :: < C > { flags, mark : PhantomData }
917919 }
You can’t perform that action at this time.
0 commit comments