File tree Expand file tree Collapse file tree 1 file changed +11
-0
lines changed Expand file tree Collapse file tree 1 file changed +11
-0
lines changed Original file line number Diff line number Diff line change @@ -801,6 +801,16 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
801801 // performance win. Also, we only need to operate on the
802802 // in-use words, hence the slicing.
803803 let num_words = num_words ( chunk_domain_size as usize ) ;
804+
805+ // If both sides are the same, nothing will change. This
806+ // case is very common and it's a pretty fast check, so
807+ // it's a performance win to do it.
808+ if self_chunk_words[ 0 ..num_words] == other_chunk_words[ 0 ..num_words] {
809+ continue ;
810+ }
811+
812+ // Do a more precise "will anything change?" test. Also a
813+ // performance win.
804814 let op = |a, b| a | b;
805815 if !bitwise_changes (
806816 & self_chunk_words[ 0 ..num_words] ,
@@ -810,6 +820,7 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
810820 continue ;
811821 }
812822
823+ // If we reach here, `self_chunk_words` is definitely changing.
813824 let self_chunk_words = Rc :: make_mut ( self_chunk_words) ;
814825 let has_changed = bitwise (
815826 & mut self_chunk_words[ 0 ..num_words] ,
You can’t perform that action at this time.
0 commit comments