package com.github.ompc.greys.core.util.collection;
import java.util.NoSuchElementException;
/**
* 线程不安全固定栈深的堆栈实现<br/>
* 固定堆栈深度的实现能比JDK自带的堆栈实现提高10倍的性能.
* Created by oldmanpushcart@gmail.com on 15/6/21.
* @param <E>
*/
public class ThreadUnsafeFixGaStack<E> implements GaStack<E> {
private final static int EMPTY_INDEX = -1;
private final Object[] elementArray;
private final int max;
private int current = EMPTY_INDEX;
public ThreadUnsafeFixGaStack(int max) {
this.max = max;
this.elementArray = new Object[max];
}
private void checkForPush() {
// stack is full
if (current == max) {
throw new ArrayIndexOutOfBoundsException();
}
}
private void checkForPopOrPeek() {
// stack is empty
if (isEmpty()) {
throw new NoSuchElementException();
}
}
@Override
public E pop() {
checkForPopOrPeek();
//noinspection unchecked
return (E) elementArray[current--];
}
@Override
public void push(E e) {
checkForPush();
elementArray[++current] = e;
}
@Override
public E peek() {
checkForPopOrPeek();
//noinspection unchecked
return (E) elementArray[current];
}
@Override
public boolean isEmpty() {
return current == EMPTY_INDEX;
}
}