/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript.typedarrays;
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class NativeTypedArrayIterator<T>
implements ListIterator<T>
{
private final NativeTypedArrayView<T> view;
/** Position represents the position of the NEXT element */
private int position;
private int lastPosition = -1;
NativeTypedArrayIterator(NativeTypedArrayView<T> view, int start)
{
this.view = view;
this.position = start;
}
@Override
public boolean hasNext()
{
return (position < view.length);
}
@Override
public boolean hasPrevious()
{
return (position > 0);
}
@Override
public int nextIndex()
{
return position;
}
@Override
public int previousIndex()
{
return position - 1;
}
@Override
public T next()
{
if (hasNext()) {
T ret = (T)view.get(position);
lastPosition = position;
position++;
return ret;
}
throw new NoSuchElementException();
}
@Override
public T previous()
{
if (hasPrevious()) {
position--;
lastPosition = position;
return (T)view.get(position);
}
throw new NoSuchElementException();
}
@Override
public void set(T t)
{
if (lastPosition < 0) {
throw new IllegalStateException();
}
view.js_set(lastPosition, t);
}
@Override
public void remove()
{
throw new UnsupportedOperationException();
}
@Override
public void add(T t)
{
throw new UnsupportedOperationException();
}
}