@@ -800,27 +800,28 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
800800                    // words, and this happens often enough that it's a 
801801                    // performance win. Also, we only need to operate on the 
802802                    // in-use words, hence the slicing. 
803-                     let  op = |a,  b| a | b; 
804803                    let  num_words = num_words ( chunk_domain_size as  usize ) ; 
805-                     if  bitwise_changes ( 
804+                     let  op = |a,  b| a | b; 
805+                     if  !bitwise_changes ( 
806806                        & self_chunk_words[ 0 ..num_words] , 
807807                        & other_chunk_words[ 0 ..num_words] , 
808808                        op, 
809809                    )  { 
810-                         let  self_chunk_words =  Rc :: make_mut ( self_chunk_words ) ; 
811-                          let  has_changed =  bitwise ( 
812-                              & mut  self_chunk_words [ 0 ..num_words ] , 
813-                              & other_chunk_words [ 0 ..num_words ] , 
814-                             op , 
815-                         ) ; 
816-                         debug_assert ! ( has_changed ) ; 
817-                         * self_chunk_count = 
818-                              count_ones ( & self_chunk_words [ 0 ..num_words ] )   as   ChunkSize ; 
819-                          if   * self_chunk_count == chunk_domain_size  { 
820-                              * self_chunk  = Ones ; 
821-                          } 
822-                         changed  = true ; 
810+                         continue ; 
811+                     } 
812+ 
813+                     let  self_chunk_words =  Rc :: make_mut ( self_chunk_words ) ; 
814+                     let  has_changed =  bitwise ( 
815+                         & mut  self_chunk_words [ 0 ..num_words ] , 
816+                         & other_chunk_words [ 0 ..num_words ] , 
817+                         op , 
818+                     ) ; 
819+                     debug_assert ! ( has_changed ) ; 
820+                     * self_chunk_count  = count_ones ( & self_chunk_words [ 0 ..num_words ] )   as   ChunkSize ; 
821+                     if   * self_chunk_count == chunk_domain_size  { 
822+                         * self_chunk  = Ones ; 
823823                    } 
824+                     changed = true ; 
824825                } 
825826            } 
826827        } 
@@ -874,28 +875,29 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
874875                    Mixed ( self_chunk_count,  self_chunk_words) , 
875876                    Mixed ( _other_chunk_count,  other_chunk_words) , 
876877                )  => { 
877-                     // See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation 
878-                     let  op = |a :  u64 ,  b :  u64 | a &  !b; 
878+                     // See `ChunkedBitSet::union` for details on what is happening here. 
879879                    let  num_words = num_words ( chunk_domain_size as  usize ) ; 
880-                     if  bitwise_changes ( 
880+                     let  op = |a :  u64 ,  b :  u64 | a &  !b; 
881+                     if  !bitwise_changes ( 
881882                        & self_chunk_words[ 0 ..num_words] , 
882883                        & other_chunk_words[ 0 ..num_words] , 
883884                        op, 
884885                    )  { 
885-                         let  self_chunk_words =  Rc :: make_mut ( self_chunk_words ) ; 
886-                          let  has_changed =  bitwise ( 
887-                              & mut  self_chunk_words [ 0 ..num_words ] , 
888-                              & other_chunk_words [ 0 ..num_words ] , 
889-                             op , 
890-                         ) ; 
891-                         debug_assert ! ( has_changed ) ; 
892-                         * self_chunk_count = 
893-                              count_ones ( & self_chunk_words [ 0 ..num_words ] )   as   ChunkSize ; 
894-                          if   * self_chunk_count ==  0   { 
895-                              * self_chunk  = Zeros ; 
896-                          } 
897-                         changed  = true ; 
886+                         continue ; 
887+                     } 
888+ 
889+                     let  self_chunk_words =  Rc :: make_mut ( self_chunk_words ) ; 
890+                     let  has_changed =  bitwise ( 
891+                         & mut  self_chunk_words [ 0 ..num_words ] , 
892+                         & other_chunk_words [ 0 ..num_words ] , 
893+                         op , 
894+                     ) ; 
895+                     debug_assert ! ( has_changed ) ; 
896+                     * self_chunk_count  = count_ones ( & self_chunk_words [ 0 ..num_words ] )   as   ChunkSize ; 
897+                     if   * self_chunk_count ==  0   { 
898+                         * self_chunk  = Zeros ; 
898899                    } 
900+                     changed = true ; 
899901                } 
900902            } 
901903        } 
@@ -931,28 +933,29 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
931933                    Mixed ( self_chunk_count,  self_chunk_words) , 
932934                    Mixed ( _other_chunk_count,  other_chunk_words) , 
933935                )  => { 
934-                     // See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation 
935-                     let  op = |a,  b| a &  b; 
936+                     // See `ChunkedBitSet::union` for details on what is happening here. 
936937                    let  num_words = num_words ( chunk_domain_size as  usize ) ; 
937-                     if  bitwise_changes ( 
938+                     let  op = |a,  b| a &  b; 
939+                     if  !bitwise_changes ( 
938940                        & self_chunk_words[ 0 ..num_words] , 
939941                        & other_chunk_words[ 0 ..num_words] , 
940942                        op, 
941943                    )  { 
942-                         let  self_chunk_words = Rc :: make_mut ( self_chunk_words) ; 
943-                         let  has_changed = bitwise ( 
944-                             & mut  self_chunk_words[ 0 ..num_words] , 
945-                             & other_chunk_words[ 0 ..num_words] , 
946-                             op, 
947-                         ) ; 
948-                         debug_assert ! ( has_changed) ; 
949-                         * self_chunk_count =
950-                             count_ones ( & self_chunk_words[ 0 ..num_words] )  as  ChunkSize ; 
951-                         if  * self_chunk_count == 0  { 
952-                             * self_chunk = Zeros ; 
953-                         } 
954-                         changed = true ; 
944+                         continue ; 
955945                    } 
946+ 
947+                     let  self_chunk_words = Rc :: make_mut ( self_chunk_words) ; 
948+                     let  has_changed = bitwise ( 
949+                         & mut  self_chunk_words[ 0 ..num_words] , 
950+                         & other_chunk_words[ 0 ..num_words] , 
951+                         op, 
952+                     ) ; 
953+                     debug_assert ! ( has_changed) ; 
954+                     * self_chunk_count = count_ones ( & self_chunk_words[ 0 ..num_words] )  as  ChunkSize ; 
955+                     if  * self_chunk_count == 0  { 
956+                         * self_chunk = Zeros ; 
957+                     } 
958+                     changed = true ; 
956959                } 
957960            } 
958961        } 
0 commit comments