code: @Override
    public int removeAll(KTypeVTypePredicate<? super KType, ? super VType> predicate) {
      final int before = size();
  
      final int mask = this.mask;
  
      if (hasEmptyKey) {
        if (predicate.apply(Intrinsics.<KType> empty(), Intrinsics.<VType> cast(values[mask + 1]))) {
          hasEmptyKey = false;
          values[mask + 1] = Intrinsics.<VType> empty();
        }
      }
  
      final KType[] keys = Intrinsics.<KType[]> cast(this.keys);
      final VType[] values = Intrinsics.<VType[]> cast(this.values);
      for (int slot = 0; slot <= mask;) {
        KType existing;
        if (!Intrinsics.<KType> isEmpty(existing = keys[slot]) && 
            predicate.apply(existing, values[slot])) {
          // Shift, do not increment slot.
          shiftConflictingKeys(slot);
        } else {
          slot++;
        }
      }
  
      return before - size();    
    }
docs: {@inheritDoc}