/* * 10/28/2004 * * DefaultTokenFactory.java - Default token factory. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.Segment; /** * This class generates tokens for a {@link TokenMaker}. This class is here * because it reuses tokens when they aren't needed anymore to prevent * This class doesn't actually create new tokens every time * createToken is called. Instead, it internally keeps a stack of * available already-created tokens. When more tokens are needed to properly * display a line, more tokens are added to the available stack. This saves * from needless repetitive memory allocation. However, it makes it IMPERATIVE * that users call resetTokenList when creating a new token list so * that the token maker can keep an accurate list of available tokens.

* * NOTE: This class should only be used by {@link TokenMaker}; nobody else * needs it! * * @author Robert Futrell * @version 0.1 */ class DefaultTokenFactory implements TokenFactory { private int size; private int increment; private Token[] tokenList; private int currentFreeToken; protected static final int DEFAULT_START_SIZE = 30; protected static final int DEFAULT_INCREMENT = 10; /** * Cosnstructor. */ public DefaultTokenFactory() { this(DEFAULT_START_SIZE, DEFAULT_INCREMENT); } /** * Constructor. * * @param size The initial number of tokens in this factory. * @param increment How many tokens to increment by when the stack gets * empty. */ public DefaultTokenFactory(int size, int increment) { this.size = size; this.increment = increment; this.currentFreeToken = 0; // Give us some tokens to initially work with. tokenList = new Token[size]; for (int i=0; iTokenMaker every time a token list is generated for * a new line so the tokens can be reused. */ public void resetAllTokens() { currentFreeToken = 0; } }