public int lookup(@NotNull HashTableData table,
                      int key,
                      ValueAcceptor valuesAcceptor) throws IOException {
      checkNotNoValue("key", key);
      int capacity = capacity(table);
      int startIndex = Math.abs(hash(key) % capacity);
      for (int probe = 0; probe < capacity; probe++) {
        int slotIndex = (startIndex + probe) % capacity;
        int slotKey = table.entryKey(slotIndex);
        int slotValue = table.entryValue(slotIndex);
        if (slotKey == key) {
          assert slotValue != NO_VALUE : "value(table[" + (slotIndex * 2 + 1) + "]) = " + NO_VALUE + " (NO_VALUE), " +
                                         "while key(table[" + slotIndex * 2 + "]) = " + key;
          if (valuesAcceptor.accept(slotValue)) {
            return slotValue;
          }
        }
        else if (slotKey == NO_VALUE && slotValue == NO_VALUE) {
          //free slot -> end of probing sequence, no (key, value) found:
          break;
        }
      }
      return NO_VALUE;
    }
public int lookup(@NotNull HashTableData table,
                      int key,
                      ValueAcceptor valuesAcceptor)