/** {@inheritDoc} */ @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof PhantomReferenceElement)) return false; E thisRef = get(); Object thatRef = ((Reference)o).get(); return thisRef != null ? thisRef.equals(thatRef) : thatRef == null; }
/** {@inheritDoc} */ @SuppressWarnings({"SuspiciousToArrayCall"}) @Override public <T> T[] toArray(T[] a) { removeStale(); Collection<E> elems = new LinkedList<>(); for (PhantomReferenceElement<E> ref : store) { E e = ref.get(); if (e != null) elems.add(e); } return elems.toArray(a); }
/** {@inheritDoc} */ @Override public boolean remove(@Nullable Object o) { removeStale(); if (o != null) { for (Iterator<PhantomReferenceElement<E>> iter = store.iterator(); iter.hasNext();) { Object reft = iter.next().get(); if (reft != null && reft.equals(o)) { iter.remove(); return true; } } } return false; }
/** {@inheritDoc} */ @Override public boolean hasNext() { if (elem == null) { while (iter.hasNext()) { PhantomReferenceElement<E> ref = iter.next(); E e; if (ref != null && (e = ref.get()) != null) { elem = e; break; } else removeStale(); } } return elem != null; }
/** {@inheritDoc} */ @Override public boolean retainAll(@Nullable Collection<?> c) { removeStale(); boolean res = false; if (!F.isEmpty(c)) { assert c != null; Iterator<PhantomReferenceElement<E>> iter = store.iterator(); while (iter.hasNext()) { if (!c.contains(iter.next().get())) { iter.remove(); res = true; } } } return res; }
/** {@inheritDoc} */ @Override public boolean remove(@Nullable Object o) { removeStale(); if (o != null) { for (Iterator<PhantomReferenceElement<E>> iter = store.iterator(); iter.hasNext();) { Object reft = iter.next().get(); if (reft != null && reft.equals(o)) { iter.remove(); return true; } } } return false; }
/** {@inheritDoc} */ @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof PhantomReferenceElement)) return false; E thisRef = get(); Object thatRef = ((Reference)o).get(); return thisRef != null ? thisRef.equals(thatRef) : thatRef == null; }
/** {@inheritDoc} */ @SuppressWarnings({"SuspiciousToArrayCall"}) @Override public <T> T[] toArray(T[] a) { removeStale(); Collection<E> elems = new LinkedList<>(); for (PhantomReferenceElement<E> ref : store) { E e = ref.get(); if (e != null) elems.add(e); } return elems.toArray(a); }
/** {@inheritDoc} */ @Override public boolean contains(@Nullable Object o) { removeStale(); if (!store.isEmpty() && o != null) { for (PhantomReferenceElement ref : store) { Object reft = ref.get(); if (reft != null && reft.equals(o)) return true; } } return false; }
/** * Removes stale references. */ private void removeStale() { PhantomReferenceElement<E> ref; while ((ref = (PhantomReferenceElement<E>) refQ.poll()) != null) { store.remove(ref); onGc(ref.get()); } }
/** {@inheritDoc} */ @Override public boolean hasNext() { if (elem == null) { while (iter.hasNext()) { PhantomReferenceElement<E> ref = iter.next(); E e; if (ref != null && (e = ref.get()) != null) { elem = e; break; } else removeStale(); } } return elem != null; }
/** {@inheritDoc} */ @Override public boolean retainAll(@Nullable Collection<?> c) { removeStale(); boolean res = false; if (!F.isEmpty(c)) { assert c != null; Iterator<PhantomReferenceElement<E>> iter = store.iterator(); while (iter.hasNext()) { if (!c.contains(iter.next().get())) { iter.remove(); res = true; } } } return res; }
/** {@inheritDoc} */ @Override public boolean contains(@Nullable Object o) { removeStale(); if (!store.isEmpty() && o != null) { for (PhantomReferenceElement ref : store) { Object reft = ref.get(); if (reft != null && reft.equals(o)) return true; } } return false; }
/** * Removes stale references. */ private void removeStale() { PhantomReferenceElement<E> ref; while ((ref = (PhantomReferenceElement<E>) refQ.poll()) != null) { store.remove(ref); onGc(ref.get()); } }