@SuppressWarnings("unchecked") private void processQueue() { while (true) { final IntReference<V> reference = (IntReference<V>)_queue.poll(); if (reference == null) { return; } _map.remove(reference.key(), reference); } }
@NotNull @Override public V addOrGet(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return value; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return value; } } }
@NotNull @Override public V addOrGet(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return value; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return value; } } }
@Override public V putIfAbsent(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return null; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return null; } } }
@Override public V putIfAbsent(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return null; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return null; } } }
@NotNull @Override public V addOrGet(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return value; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return value; } } }
@Override public V putIfAbsent(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return null; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return null; } } }
@Override public V put(final int key, @NotNull final V value) { processQueue(); final IntReference<V> oldReference = _map.put(key, createReference(key, value, _queue)); return oldReference != null ? oldReference.get() : null; }
@Override public V remove(final int key) { processQueue(); final IntReference<V> reference = _map.remove(key); return reference != null ? reference.get() : null; }
@SuppressWarnings("unchecked") private void processQueue() { while (true) { final IntReference<V> reference = (IntReference<V>)_queue.poll(); if (reference == null) { return; } _map.remove(reference.key(), reference); } }
@Override public V get(final int key) { final IntReference<V> reference = _map.get(key); return reference != null ? reference.get() : null; }
@Override public V get(final int key) { final IntReference<V> reference = _map.get(key); return reference != null ? reference.get() : null; }
@Override public V put(final int key, @NotNull final V value) { processQueue(); final IntReference<V> oldReference = _map.put(key, createReference(key, value, _queue)); return oldReference != null ? oldReference.get() : null; }
@Override public V remove(final int key) { processQueue(); final IntReference<V> reference = _map.remove(key); return reference != null ? reference.get() : null; }
@Override public V put(final int key, @NotNull final V value) { processQueue(); final IntReference<V> oldReference = _map.put(key, createReference(key, value, _queue)); return oldReference != null ? oldReference.get() : null; }
@SuppressWarnings("unchecked") private void processQueue() { while (true) { final IntReference<V> reference = (IntReference<V>)_queue.poll(); if (reference == null) { return; } _map.remove(reference.key(), reference); } }
@Override public V remove(final int key) { processQueue(); final IntReference<V> reference = _map.remove(key); return reference != null ? reference.get() : null; }
@Override public V get(final int key) { final IntReference<V> reference = _map.get(key); return reference != null ? reference.get() : null; }