/** {@inheritDoc} */ @Override public boolean addAll(@Nullable Collection<? extends E> c) { boolean res = false; if (!F.isEmpty(c)) { assert c != null; for (E e : c) { res |= add(e); } } return res; }
/** * Constructs a new set containing the elements in the specified * collection, with default load factor and an initial * capacity sufficient to contain the elements in the specified collection. * * @param c Collection to add. */ public GridConcurrentPhantomHashSet(Collection<E> c) { this(c.size()); addAll(c); }
/** {@inheritDoc} */ @SuppressWarnings({"SimplifiableIfStatement"}) @Override public boolean add(E e) { A.notNull(e, "e"); removeStale(); if (!contains(e)) return store.add(fact.apply(e)); return false; }
/** {@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 removeAll(@Nullable Collection<?> c) { boolean res = false; if (!F.isEmpty(c)) { assert c != null; for (Object o : c) { res |= remove(o); } } return res; }
/** * 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 containsAll(@Nullable Collection<?> c) { if (F.isEmpty(c)) return false; assert c != null; for (Object o : c) { if (!contains(o)) return false; } return true; }
/** {@inheritDoc} */ @Override public Object[] toArray() { return toArray(EMPTY_ARR); }
/** {@inheritDoc} */ @Override public boolean isEmpty() { removeStale(); return store.isEmpty(); }
/** {@inheritDoc} */ @Override public boolean removeAll(@Nullable Collection<?> c) { boolean res = false; if (!F.isEmpty(c)) { assert c != null; for (Object o : c) { res |= remove(o); } } return res; }
/** * 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 containsAll(@Nullable Collection<?> c) { if (F.isEmpty(c)) return false; assert c != null; for (Object o : c) { if (!contains(o)) return false; } return true; }
/** {@inheritDoc} */ @SuppressWarnings({"ToArrayCallWithZeroLengthArrayArgument"}) @Override public Object[] toArray() { return toArray(EMPTY_ARR); }
/** {@inheritDoc} */ @Override public int size() { removeStale(); return store.size(); }
/** {@inheritDoc} */ @SuppressWarnings({"SimplifiableIfStatement"}) @Override public boolean add(E e) { A.notNull(e, "e"); removeStale(); if (!contains(e)) return store.add(fact.apply(e)); return false; }
/** * Constructs a new set containing the elements in the specified * collection, with default load factor and an initial * capacity sufficient to contain the elements in the specified collection. * * @param c Collection to add. */ public GridConcurrentPhantomHashSet(Collection<E> c) { this(c.size()); addAll(c); }
/** {@inheritDoc} */ @Override public boolean addAll(@Nullable Collection<? extends E> c) { boolean res = false; if (!F.isEmpty(c)) { assert c != null; for (E e : c) { res |= add(e); } } 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; }
/** {@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 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; }