package org.opensha2.data; import static com.google.common.base.Preconditions.checkElementIndex; import com.google.common.base.Function; import java.util.Arrays; import java.util.Iterator; /** * Mutable variant of {@code XySequence}. * * @author Peter Powers */ final class MutableXySequence extends ImmutableXySequence { MutableXySequence(double[] xs, double[] ys) { super(xs, ys); } MutableXySequence(XySequence sequence, boolean clear) { super(sequence, clear); } @Override public Iterator<XyPoint> iterator() { return new XyIterator(true); } @Override public XyPoint min() { return new Point(0, true); } @Override public XyPoint max() { return new Point(size() - 1, true); } @Override public void set(int index, double value) { checkElementIndex(index, xs.length); ys[index] = value; } @Override public XySequence add(double term) { Data.add(term, ys); return this; } @Override public XySequence add(double[] ys) { Data.add(this.ys, ys); return this; } @Override public XySequence add(XySequence sequence) { // safe covariant cast Data.uncheckedAdd(ys, validateSequence((ImmutableXySequence) sequence).ys); return this; } @Override public XySequence multiply(double scale) { Data.multiply(scale, ys); return this; } @Override public XySequence multiply(XySequence sequence) { // safe covariant cast Data.uncheckedMultiply(ys, validateSequence((ImmutableXySequence) sequence).ys); return this; } @Override public XySequence complement() { Data.add(1, Data.flip(ys)); return this; } @Override public XySequence clear() { Arrays.fill(ys, 0.0); return this; } @Override public XySequence transform(Function<Double, Double> function) { Data.transform(function, ys); return this; } }