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