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