void conservativeIncrement ( long e ) { int hash = spread ( Long . hashCode ( e ) ) ; int start = ( hash & 3 ) << 2 ; int [ ] index = new int [ 4 ] ; int [ ] count = new int [ 4 ] ; int min = Integer . MAX_VALUE ; for ( int i = 0 ; i < 4 ; i ++ ) { index [ i ] = indexOf ( hash , i ) ; count [ i ] = ( int ) ( ( table [ index [ i ] ] >>> ( ( start + i ) << 2 ) ) & 0xf L ) ; min = Math . min ( min , count [ i ] ) ; } if ( min == 15 ) { tryReset ( false ) ; return ; } for ( int i = 0 ; i < 4 ; i ++ ) { if ( count [ i ] == min ) { incrementAt ( index [ i ] , start + i , step ) ; } } tryReset ( true ) ; }
Increments the associated counters that are at the observed minimum .