blob: 3ce57d7351d1f81ea85f1e7215a7190c850abba2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 Ericsson
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.internal.ctf.core.utils;
import java.util.List;
import java.util.ListIterator;
import java.util.NoSuchElementException;
/**
* Generic Read only List Iterator
*
* @author Matthew Khouzam
*
* @param <E>
* the element type
*/
final class GenericReadOnlyListIterator<E> implements ListIterator<E> {
private int fCursor;
private final List<E> fList;
/**
* Constructor
*
* @param list
* the list
* @param start
* the first element to iterate on
*/
public GenericReadOnlyListIterator(List<E> list, int start) {
fList = list;
fCursor = start - 1;
}
@Override
public boolean hasNext() {
return nextIndex() < fList.size();
}
@Override
public E next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
E next = fList.get(nextIndex());
fCursor++;
return next;
}
@Override
public boolean hasPrevious() {
return previousIndex() >= 0;
}
@Override
public E previous() {
if (!hasPrevious()) {
throw new NoSuchElementException();
}
E prev = fList.get(previousIndex());
fCursor--;
return prev;
}
@Override
public int nextIndex() {
return fCursor + 1;
}
@Override
public int previousIndex() {
return fCursor;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
@Override
public void set(E e) {
throw new UnsupportedOperationException();
}
@Override
public void add(E e) {
throw new UnsupportedOperationException();
}
}