
com.simplaex.bedrock.SeqGenerated Maven / Gradle / Ivy
package com.simplaex.bedrock;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import java.util.Comparator;
import java.util.NoSuchElementException;
import java.util.function.IntFunction;
class SeqGenerated extends Seq {
private final IntFunction backingFunction;
private final int length;
private SeqSimple materializedSeq = null;
SeqGenerated(@Nonnull final IntFunction function, @Nonnegative final int length) {
this.backingFunction = function;
this.length = length;
}
private void materialize() {
if (materializedSeq == null) {
final Object[] array = new Object[length];
for (int i = 0; i < length; i += 1) {
array[i] = backingFunction.apply(i);
}
materializedSeq = Seq.ofArrayZeroCopyInternal(array);
}
}
@Override
public E get(@Nonnegative final int index) {
if (index >= length) {
throw new IndexOutOfBoundsException();
}
return backingFunction.apply(index);
}
@Nonnull
@Override
public Seq sortedBy(@Nonnull final Comparator super E> comparator) {
materialize();
return materializedSeq.sortedBy(comparator);
}
@Nonnull
@Override
public E[] toArray(@Nonnull final Class clazz) {
materialize();
return materializedSeq.toArray(clazz);
}
@Nonnull
@Override
public Object[] toArray() {
materialize();
return materializedSeq.toArray();
}
@Override
public int length() {
return length;
}
@Nonnull
@Override
public Seq reversed() {
materialize();
return materializedSeq.reversed();
}
@SuppressWarnings("unchecked")
@Nonnull
@Override
public Seq sorted() {
materialize();
return materializedSeq.sortedInternal();
}
@Nonnull
@Override
public Seq trimmedToSize() {
materialize();
return materializedSeq.trimmedToSize();
}
@Nonnull
@Override
public Seq subSequence(final int beginOffset, final int endOffset) {
materialize();
return materializedSeq.subSequence(beginOffset, endOffset);
}
@Nonnull
@Override
public Seq subSequenceView(final int beginOffset, final int endOffset) {
materialize();
return materializedSeq.subSequenceView(beginOffset, endOffset);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy