@Override public C.ReversibleSequence<T> reverse() throws UnsupportedOperationException { if (isEmpty()) { return Nil.rseq(); } return ReversedRSeq.of(this); }
@Override public C.ReversibleSequence<T> reverse() throws UnsupportedOperationException { if (isEmpty()) { return Nil.rseq(); } return ReversedRSeq.of(this); }
@Override public C.ReversibleSequence<T> drop(int n) throws IllegalArgumentException { int sz = size(); if (n < 0) { n = -n; if (n >= sz) return Nil.rseq(); return take(sz - n); } if (n == 0) { return this; } return IndexFilteredRSeq.of(this, $.F.gte(n)); }
@Override public C.ReversibleSequence<T> drop(int n) throws IllegalArgumentException { int sz = size(); if (n < 0) { n = -n; if (n >= sz) return Nil.rseq(); return take(sz - n); } if (n == 0) { return this; } return IndexFilteredRSeq.of(this, $.F.gte(n)); }
@Override public C.ReversibleSequence<T> tail(int n) throws UnsupportedOperationException, IndexOutOfBoundsException { int sz = size(); if (n < 0) { return head(-n); } else if (n == 0) { return Nil.rseq(); } else if (n >= sz) { return this; } return reverse().take(n).reverse(); }
@Override public C.ReversibleSequence<T> tail(int n) throws UnsupportedOperationException, IndexOutOfBoundsException { int sz = size(); if (n < 0) { return head(-n); } else if (n == 0) { return Nil.rseq(); } else if (n >= sz) { return this; } return reverse().take(n).reverse(); }
@Override public C.ReversibleSequence<T> head(int n) { if (n == 0) { return Nil.rseq(); } else if (n < 0) { if (isLimited()) { return drop(size() + n); } else { throw new UnsupportedOperationException(); } } else { if (isLimited() && n >= size()) { return this; } return IndexFilteredRSeq.of(this, $.F.lessThan(n)); } }
@Override public C.ReversibleSequence<T> head(int n) { if (n == 0) { return Nil.rseq(); } else if (n < 0) { if (isLimited()) { return drop(size() + n); } else { throw new UnsupportedOperationException(); } } else { if (isLimited() && n >= size()) { return this; } return IndexFilteredRSeq.of(this, $.F.lessThan(n)); } }