
com.alibaba.qlexpress4.runtime.FixedSizeStack Maven / Gradle / Ivy
package com.alibaba.qlexpress4.runtime;
/**
* Author: DQinYuan
*/
public class FixedSizeStack {
private final Value[] elements;
/**
* next element to push
*/
private int cursor = 0;
public FixedSizeStack(int size){
this.elements = new Value[size];
}
public void push(Value ele) {
elements[cursor++] = ele;
}
public Value pop() {
return elements[--cursor];
}
public Value peak() {
return elements[cursor - 1];
}
public Parameters pop(int n) {
cursor -= n;
return new StackSwapParameters(elements, cursor, n);
}
private static class StackSwapParameters implements Parameters {
private final Value[] elements;
private final int start;
private final int length;
private StackSwapParameters(Value[] elements, int start, int length) {
this.elements = elements;
this.start = start;
this.length = length;
}
@Override
public Value get(int i) {
return i >= length? null: elements[start + i];
}
@Override
public int size() {
return length;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy