code: private long put(K key, long value, boolean ifNew)
    {
      if (key == null) {
        long old = _nullValue;
        _nullValue = value;
        return old;
      }
  
      int hash = key.hashCode() & _mask;
  
      while (true) {
        K testKey = _keys[hash];
  
        if (testKey == null || (_flags[hash] & DELETED) != 0) {
          _keys[hash] = key;
          _values[hash] = value;
          _flags[hash] = 0;
  
          _size++;
  
          if (_keys.length <= 2 * _size)
            resize(2 * _keys.length);
  
          return NULL;
        }
        else if (key != testKey && ! testKey.equals(key)) {
          hash = (hash + 1) & _mask;
          continue;
        }
        else if (ifNew) {
          return _values[hash];
        }
        else {
          long old = _values[hash];
  
          _values[hash] = value;
  
          return old;
        }
      }
    }
docs: Puts a new value in the property table with the appropriate flags