⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tokenqueue.java

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 JAVA
字号:
package antlr;/* ANTLR Translator Generator * Project led by Terence Parr at http://www.cs.usfca.edu * Software rights: http://www.antlr.org/license.html * * $Id: TokenQueue.java,v 1.2 2005/12/24 21:50:49 robilad Exp $ *//** A private circular buffer object used by the token buffer */class TokenQueue {    /** Physical circular buffer of tokens */    private Token[] buffer;    /** buffer.length-1 for quick modulos */    private int sizeLessOne;    /** physical index of front token */    private int offset;    /** number of tokens in the queue */    protected int nbrEntries;    public TokenQueue(int minSize) {        // Find first power of 2 >= to requested size        int size;        if ( minSize<0 ) {            init(16); // pick some value for them            return;        }        // check for overflow        if ( minSize>=(Integer.MAX_VALUE/2) ) {            init(Integer.MAX_VALUE); // wow that's big.            return;        }        for (size = 2; size < minSize; size *= 2) {            ;        }        init(size);    }    /** Add token to end of the queue     * @param tok The token to add     */    public final void append(Token tok) {        if (nbrEntries == buffer.length) {            expand();        }        buffer[(offset + nbrEntries) & sizeLessOne] = tok;        nbrEntries++;    }    /** Fetch a token from the queue by index     * @param idx The index of the token to fetch, where zero is the token at the front of the queue     */    public final Token elementAt(int idx) {        return buffer[(offset + idx) & sizeLessOne];    }    /** Expand the token buffer by doubling its capacity */    private final void expand() {        Token[] newBuffer = new Token[buffer.length * 2];        // Copy the contents to the new buffer        // Note that this will store the first logical item in the        // first physical array element.        for (int i = 0; i < buffer.length; i++) {            newBuffer[i] = elementAt(i);        }        // Re-initialize with new contents, keep old nbrEntries        buffer = newBuffer;        sizeLessOne = buffer.length - 1;        offset = 0;    }    /** Initialize the queue.     * @param size The initial size of the queue     */    private final void init(int size) {        // Allocate buffer        buffer = new Token[size];        // Other initialization        sizeLessOne = size - 1;        offset = 0;        nbrEntries = 0;    }    /** Clear the queue. Leaving the previous buffer alone.     */    public final void reset() {        offset = 0;        nbrEntries = 0;    }    /** Remove token from front of queue */    public final void removeFirst() {        offset = (offset + 1) & sizeLessOne;        nbrEntries--;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -