All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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