package jetbrains.mps.internal.collections.runtime;
/*Generated by MPS */
import java.io.Serializable;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.Queue;
import jetbrains.mps.baseLanguage.closures.runtime.AdapterClass;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.util.Deque;
import jetbrains.mps.internal.collections.runtime.impl.NullLinkedListSequence;
import java.util.Collection;
import java.util.List;
import java.util.Arrays;
public class LinkedListSequence<T> extends AbstractListSequence<T> implements ILinkedListSequence<T>, ILinkedList<T>, Serializable {
private static final long serialVersionUID = 3534032475696821184L;
protected LinkedListSequence(LinkedListSequence<T> other) {
super(other);
}
private LinkedListSequence(LinkedList<T> list) {
super(list);
}
@Override
public void addFirst(T t) {
getList().addFirst(t);
}
@Override
public void addLast(T t) {
getList().addLast(t);
}
@Override
public boolean offerFirst(T t) {
return getList().offerFirst(t);
}
@Override
public boolean offerLast(T t) {
return getList().offerLast(t);
}
@Override
public T removeFirst() {
return getList().removeFirst();
}
@Override
public T removeLast() {
return getList().removeLast();
}
@Override
public T pollLast() {
return getList().pollLast();
}
@Override
public T getFirst() {
return getList().getFirst();
}
@Override
public T getLast() {
return getList().getLast();
}
@Override
public T peekFirst() {
return getList().peekFirst();
}
@Override
public T peekLast() {
return getList().peekLast();
}
@Override
public boolean removeFirstOccurrence(Object o) {
return getList().removeFirstOccurrence(o);
}
@Override
public boolean offer(T t) {
return getList().offer(t);
}
@Override
public T remove() {
return getList().remove();
}
@Override
public T poll() {
return getList().poll();
}
@Override
public T element() {
return getList().element();
}
@Override
public T peek() {
return getList().peek();
}
@Override
public void push(T t) {
getList().push(t);
}
@Override
public T pop() {
return getList().pop();
}
@Override
public Iterator<T> descendingIterator() {
return null;
}
@Override
public T pollFirst() {
return getList().pollFirst();
}
@Override
public boolean removeLastOccurrence(Object o) {
return getList().removeLastOccurrence(o);
}
@Override
public T addLastElement(T t) {
getList().addLast(t);
return t;
}
@Override
public T removeFirstElement() {
if (Sequence.NULL_WHEN_EMPTY) {
if (getList().isEmpty()) {
return null;
}
}
return getList().removeFirst();
}
@Override
public Queue<T> toQueue() {
return getList();
}
@Override
public T addFirstElement(T t) {
if (Sequence.IGNORE_NULL_VALUES) {
if (t == null) {
return null;
}
}
getList().addFirst(t);
return t;
}
@Override
public T peekElement() {
if (Sequence.NULL_WHEN_EMPTY) {
if (getList().isEmpty()) {
return null;
}
}
return getList().peek();
}
@Override
public T popElement() {
if (Sequence.NULL_WHEN_EMPTY) {
if (getList().isEmpty()) {
return null;
}
}
return getList().pop();
}
@Override
public T pushElement(T t) {
getList().push(t);
return t;
}
@Override
public LinkedListSequence<T> asUnmodifiable() {
throw new UnsupportedOperationException();
}
@Override
public LinkedListSequence<T> asSynchronized() {
throw new UnsupportedOperationException();
}
@Override
public ILinkedListSequence<T> addSequence(ISequence<? extends T> seq) {
throw new UnsupportedOperationException();
}
@Override
public ILinkedListSequence<T> removeSequence(ISequence<? extends T> seq) {
return (ILinkedListSequence<T>) super.removeSequence(seq);
}
@Override
public ILinkedListSequence<T> removeWhere(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter) {
return (ILinkedListSequence<T>) super.removeWhere(filter);
}
@Override
public IListSequence<T> reversedList() {
LinkedListSequence<T> reversed = new LinkedListSequence<T>(this);
reversed._reverse();
return reversed;
}
@Override
public IListSequence<T> subListSequence(int fromIdx, int upToIdx) {
return new ListSequence<T>(getList().subList(fromIdx, upToIdx));
}
@Override
public IListSequence<T> headListSequence(int upToIdx) {
return new ListSequence<T>(getList().subList(0, upToIdx));
}
@Override
public IListSequence<T> tailListSequence(int fromIdx) {
return new ListSequence<T>(getList().subList(fromIdx, getList().size()));
}
@Override
protected LinkedList<T> getList() {
return (LinkedList<T>) super.getList();
}
public static <U> ILinkedListSequence<U> fromLinkedList(Deque<U> list) {
// shall update templates to generate fromLinkedList() again, and then can remove fromLinkedListNew
return fromLinkedListNew(list);
}
public static <U> ILinkedListSequence<U> fromLinkedListNew(Deque<U> list) {
if (list instanceof ILinkedListSequence<?>) {
return (ILinkedListSequence<U>) list;
}
if (list == null && Sequence.USE_NULL_SEQUENCE) {
return NullLinkedListSequence.instance();
}
if (list instanceof LinkedList) {
return new LinkedListSequence<U>((LinkedList<U>) list);
}
return LinkedListSequence.fromIterable(list);
}
public static <U> ILinkedListSequence<U> fromIterable(Iterable<U> it) {
if (Sequence.USE_NULL_SEQUENCE) {
if (it == null) {
return NullLinkedListSequence.instance();
}
}
if (it instanceof ILinkedListSequence<?>) {
return (ILinkedListSequence<U>) it;
}
LinkedList<U> list = new LinkedList<U>();
if (Sequence.IGNORE_NULL_VALUES) {
for (U u : it) {
if (u != null) {
list.add(u);
}
}
} else
if (it instanceof Collection<?>) {
list.addAll((Collection<? extends U>) it);
} else {
for (U u : it) {
list.add(u);
}
}
return new LinkedListSequence<U>(list);
}
public static <U> ILinkedListSequence<U> fromListAndArray(LinkedList<U> list, U... array) {
// change templates to invoke this method and drop fromListAndArrayNew
return fromListAndArrayNew(list, array);
}
public static <U> ILinkedListSequence<U> fromListAndArrayNew(LinkedList<U> list, U... array) {
if (Sequence.NULL_ARRAY_IS_SINGLETON) {
if (array == null) {
array = (U[]) Sequence.nullSingletonArray();
}
}
if (Sequence.USE_NULL_SEQUENCE) {
if (list == null && array == null) {
return NullLinkedListSequence.instance();
} else
if (list == null) {
list = new LinkedList<U>();
} else
if (array == null) {
if (list instanceof IListSequence<?>) {
return (ILinkedListSequence<U>) list;
}
return new LinkedListSequence<U>(list);
}
}
List<U> input = Arrays.asList(array);
if (Sequence.IGNORE_NULL_VALUES) {
for (U u : input) {
if (u != null) {
list.add(u);
}
}
} else {
list.addAll(input);
}
if (list instanceof ILinkedListSequence<?>) {
return (ILinkedListSequence<U>) list;
}
return new LinkedListSequence<U>(list);
}
public static <U> ILinkedListSequence<U> fromListWithValues(LinkedList<U> list, Iterable<? extends U> it) {
// shall update templates to generate fromLinkedList() again, and then can remove fromListWithValuesNew
return fromListWithValuesNew(list, it);
}
public static <U> ILinkedListSequence<U> fromListWithValuesNew(LinkedList<U> list, Iterable<? extends U> it) {
LinkedList<U> tmp = list;
if (Sequence.USE_NULL_SEQUENCE) {
if (list == null && it == null) {
return NullLinkedListSequence.instance();
} else
if (list == null) {
tmp = new LinkedList<U>();
} else
if (it == null) {
return LinkedListSequence.fromLinkedListNew(list);
}
}
if (Sequence.IGNORE_NULL_VALUES) {
for (U u : it) {
if (u != null) {
tmp.add(u);
}
}
} else
if (it instanceof Collection<?>) {
tmp.addAll((Collection<? extends U>) it);
} else {
for (U u : it) {
tmp.add(u);
}
}
if (tmp instanceof ILinkedListSequence<?>) {
return (ILinkedListSequence<U>) tmp;
}
return new LinkedListSequence<U>(tmp);
}
}