package jetbrains.mps.internal.collections.runtime; /*Generated by MPS */ import java.util.Collection; import jetbrains.mps.baseLanguage.closures.runtime.AdapterClass; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import java.util.Iterator; public abstract class AbstractCollectionSequence<T> extends AbstractSequence<T> implements ICollectionSequence<T>, Collection<T> { protected AbstractCollectionSequence() { } @Override public T addElement(T t) { if (Sequence.IGNORE_NULL_VALUES) { if (t == null) { return null; } } if (getCollection().add(t)) { return t; } return null; } @Override public T removeElement(T t) { if (remove((Object) t)) { return t; } return null; } @Override public ICollectionSequence<T> addSequence(ISequence<? extends T> seq) { if (Sequence.USE_NULL_SEQUENCE) { if (seq == null) { return this; } } if (seq.toIterable() instanceof Collection) { getCollection().addAll((Collection<? extends T>) seq.toIterable()); } else { for (T t : seq.toIterable()) { getCollection().add(t); } } return this; } @Override public ICollectionSequence<T> removeSequence(ISequence<? extends T> seq) { if (Sequence.USE_NULL_SEQUENCE) { if (seq == null) { return this; } } if (seq.toIterable() instanceof Collection) { getCollection().removeAll((Collection<? extends T>) seq.toIterable()); } else { for (T t : seq.toIterable()) { getCollection().remove(t); } } return this; } @Override public ICollectionSequence<T> removeWhere(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter) { for (Iterator<T> it = getCollection().iterator(); it.hasNext();) { if (filter.invoke(it.next())) { it.remove(); } } return this; } @Override public boolean add(T e) { if (Sequence.IGNORE_NULL_VALUES) { if (e == null) { return false; } } return getCollection().add(e); } @Override public boolean addAll(Collection<? extends T> c) { return getCollection().addAll(c); } @Override public void clear() { getCollection().clear(); } @Override public boolean contains(Object o) { return getCollection().contains(o); } @Override public boolean containsAll(Collection<?> c) { return getCollection().containsAll(c); } @Override public boolean isEmpty() { return getCollection().isEmpty(); } @Override public boolean remove(Object o) { if (Sequence.IGNORE_NULL_VALUES) { if (o == null) { return false; } } return getCollection().remove(o); } @Override public boolean removeAll(Collection<?> c) { return getCollection().removeAll(c); } @Override public boolean retainAll(Collection<?> c) { return getCollection().retainAll(c); } @Override public int size() { return getCollection().size(); } @Override public Object[] toArray() { return getCollection().toArray(); } @Override public <U> U[] toArray(U[] a) { return getCollection().toArray(a); } @Override public Iterator<T> iterator() { return getCollection().iterator(); } @Override public int count() { return getCollection().size(); } @Override public boolean containsSequence(ISequence<? extends T> that) { if (that instanceof AbstractCollectionSequence<?>) { return getCollection().containsAll(((AbstractCollectionSequence<?>) that).getCollection()); } return super.containsSequence(that); } @SuppressWarnings(value = "unchecked") @Override public boolean equals(Object o) { if (o instanceof AbstractCollectionSequence) { Collection<T> thatColl = ((AbstractCollectionSequence<T>) o).getCollection(); Collection<T> thisColl = getCollection(); if (thisColl == thatColl) { return true; } return (thisColl != null ? thisColl.equals(thatColl) : false); } return super.equals(o); } @Override public int hashCode() { return getCollection().hashCode(); } protected abstract Collection<T> getCollection(); }