@@ -443,6 +443,9 @@ mod sealed {
443
443
set_unknown_feature_required, supports_unknown_test_feature, requires_unknown_test_feature) ;
444
444
}
445
445
446
+ const ANY_REQUIRED_FEATURES_MASK : u8 = 0b01_01_01_01 ;
447
+ const ANY_OPTIONAL_FEATURES_MASK : u8 = 0b10_10_10_10 ;
448
+
446
449
/// Tracks the set of features which a node implements, templated by the context in which it
447
450
/// appears.
448
451
///
@@ -616,8 +619,8 @@ impl ChannelTypeFeatures {
616
619
// ChannelTypeFeatures must only contain required bits, so we OR the required forms of all
617
620
// optional bits and then AND out the optional ones.
618
621
for byte in ret. flags . iter_mut ( ) {
619
- * byte |= ( * byte & 0b10_10_10_10 ) >> 1 ;
620
- * byte &= 0b01_01_01_01 ;
622
+ * byte |= ( * byte & ANY_OPTIONAL_FEATURES_MASK ) >> 1 ;
623
+ * byte &= ANY_REQUIRED_FEATURES_MASK ;
621
624
}
622
625
ret
623
626
}
@@ -762,17 +765,16 @@ impl<T: sealed::Context> Features<T> {
762
765
}
763
766
764
767
pub ( crate ) fn supports_any_optional_bits ( & self ) -> bool {
765
- self . flags . iter ( ) . any ( |& byte| ( byte & 0b10_10_10_10 ) != 0 )
768
+ self . flags . iter ( ) . any ( |& byte| ( byte & ANY_OPTIONAL_FEATURES_MASK ) != 0 )
766
769
}
767
770
768
771
/// Returns true if this `Features` object contains required features unknown by `other`.
769
772
pub fn requires_unknown_bits_from ( & self , other : & Self ) -> bool {
770
773
// Bitwise AND-ing with all even bits set except for known features will select required
771
774
// unknown features.
772
775
self . flags . iter ( ) . enumerate ( ) . any ( |( i, & byte) | {
773
- const REQUIRED_FEATURES : u8 = 0b01_01_01_01 ;
774
776
let unknown_features = unset_features_mask_at_position ( other, i) ;
775
- ( byte & ( REQUIRED_FEATURES & unknown_features) ) != 0
777
+ ( byte & ( ANY_REQUIRED_FEATURES_MASK & unknown_features) ) != 0
776
778
} )
777
779
}
778
780
@@ -802,13 +804,12 @@ impl<T: sealed::Context> Features<T> {
802
804
// unknown features.
803
805
let byte_count = T :: KNOWN_FEATURE_MASK . len ( ) ;
804
806
self . flags . iter ( ) . enumerate ( ) . any ( |( i, & byte) | {
805
- let required_features = 0b01_01_01_01 ;
806
807
let unknown_features = if i < byte_count {
807
808
!T :: KNOWN_FEATURE_MASK [ i]
808
809
} else {
809
810
0b11_11_11_11
810
811
} ;
811
- ( byte & ( required_features & unknown_features) ) != 0
812
+ ( byte & ( ANY_REQUIRED_FEATURES_MASK & unknown_features) ) != 0
812
813
} )
813
814
}
814
815
@@ -1030,13 +1031,11 @@ impl<T: sealed::Context> Readable for WithoutLength<Features<T>> {
1030
1031
}
1031
1032
1032
1033
pub ( crate ) fn unset_features_mask_at_position < T : sealed:: Context > ( other : & Features < T > , index : usize ) -> u8 {
1033
- const REQUIRED_FEATURES : u8 = 0b01_01_01_01 ;
1034
- const OPTIONAL_FEATURES : u8 = 0b10_10_10_10 ;
1035
1034
if index < other. flags . len ( ) {
1036
1035
// Form a mask similar to !T::KNOWN_FEATURE_MASK only for `other`
1037
1036
!( other. flags [ index]
1038
- | ( ( other. flags [ index] >> 1 ) & REQUIRED_FEATURES )
1039
- | ( ( other. flags [ index] << 1 ) & OPTIONAL_FEATURES ) )
1037
+ | ( ( other. flags [ index] >> 1 ) & ANY_REQUIRED_FEATURES_MASK )
1038
+ | ( ( other. flags [ index] << 1 ) & ANY_OPTIONAL_FEATURES_MASK ) )
1040
1039
} else {
1041
1040
0b11_11_11_11
1042
1041
}
0 commit comments