/** {@inheritDoc} */
 public boolean forEachEntry(TIntIntProcedure procedure) {
   byte[] states = _states;
   int[] keys = _set;
   int[] values = _values;
   for (int i = keys.length; i-- > 0; ) {
     if (states[i] == FULL && !procedure.execute(keys[i], values[i])) {
       return false;
     }
   }
   return true;
 }
  /** {@inheritDoc} */
  public boolean retainEntries(TIntIntProcedure procedure) {
    boolean modified = false;
    byte[] states = _states;
    int[] keys = _set;
    int[] values = _values;

    // Temporarily disable compaction. This is a fix for bug #1738760
    tempDisableAutoCompaction();
    try {
      for (int i = keys.length; i-- > 0; ) {
        if (states[i] == FULL && !procedure.execute(keys[i], values[i])) {
          removeAt(i);
          modified = true;
        }
      }
    } finally {
      reenableAutoCompaction(true);
    }

    return modified;
  }