blob: 5fd60115b4f7a493a6279a9cf5c59a4362a138d3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.ui.internal.views;
import java.util.LinkedList;
public class ReusableHelpPartHistory {
private static final int CAPACITY = 50;
private LinkedList<HistoryEntry> queue;
private int cursor = -1;
private boolean blocked;
public ReusableHelpPartHistory() {
queue = new LinkedList<>();
}
public void addEntry(HistoryEntry entry) {
if (cursor!= -1) {
// If we are adding a new entry while
// the cursor is not at the end, discard
// all the entries after the cursor.
int extra = queue.size()-1 -cursor;
if (extra>0) {
for (int i=extra; i>0; i--) {
queue.removeLast();
}
}
}
queue.add(entry);
if (queue.size()>CAPACITY)
queue.removeFirst();
cursor = queue.size()-1;
}
public boolean hasNext() {
return cursor != -1 && cursor < queue.size()-1;
}
public boolean hasPrev() {
return cursor != -1 && cursor > 0;
}
public HistoryEntry getNext() {
return hasNext()?(HistoryEntry)queue.get(cursor+1):null;
}
public HistoryEntry getPrev() {
return hasPrev() ? (HistoryEntry)queue.get(cursor-1):null;
}
public HistoryEntry next() {
if (hasNext()) {
return queue.get(++cursor);
}
return null;
}
public HistoryEntry prev() {
if (hasPrev()) {
return queue.get(--cursor);
}
return null;
}
/**
* @return Returns the blocked.
*/
public boolean isBlocked() {
return blocked;
}
/**
* @param blocked The blocked to set.
*/
public void setBlocked(boolean blocked) {
this.blocked = blocked;
}
}