org.apache.jasper.xmlparser

## Class SymbolTable

- java.lang.Object
- - org.apache.jasper.xmlparser.SymbolTable

    public class SymbolTable
    extends Object

This class is a symbol table implementation that guarantees that strings used as identifiers are unique references. Multiple calls to `addSymbol` will always return the same string reference.

The symbol table performs the same task as `String.intern()` with the following differences:

- A new string object does not need to be created in order to retrieve a unique reference. Symbols can be added by using a series of characters in a character array.
- Users of the symbol table can provide their own symbol hashing implementation. For example, a simple string hashing algorithm may fail to produce a balanced set of hashcodes for symbols that are mostly unique. Strings with similar leading characters are especially prone to this poor hashing behavior.

Author:
  Andy Clark

### Nested Class Summary

Nested Classes
`protected static class` `SymbolTable.Entry` This class is a symbol table entry.

### Field Summary

Fields
`protected SymbolTable.Entry[]` `fBuckets` Buckets.
`protected int` `fTableSize`
`protected static int` `TABLE_SIZE` Default table size.

### Constructor Summary

Constructors
Constructor and Description
`SymbolTable()` Constructs a symbol table with a default number of buckets.
`SymbolTable(int tableSize)` Constructs a symbol table with a specified number of buckets.

### Method Summary

Methods
`String` `addSymbol(char[] buffer, int offset, int length)` Adds the specified symbol to the symbol table and returns a reference to the unique symbol.
`String` `addSymbol(String symbol)` Adds the specified symbol to the symbol table and returns a reference to the unique symbol.
`boolean` `containsSymbol(char[] buffer, int offset, int length)` Returns true if the symbol table already contains the specified symbol.
`boolean` `containsSymbol(String symbol)` Returns true if the symbol table already contains the specified symbol.
`int` `hash(char[] buffer, int offset, int length)` Returns a hashcode value for the specified symbol information.
`int` `hash(String symbol)` Returns a hashcode value for the specified symbol.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### TABLE_SIZE

    protected static final int TABLE_SIZE

Default table size.

See Also:
  Constant Field Values

#### fBuckets

    protected SymbolTable.Entry[] fBuckets

Buckets.

#### fTableSize

    protected int fTableSize

### Constructor Detail

#### SymbolTable

    public SymbolTable()

Constructs a symbol table with a default number of buckets.

#### SymbolTable

    public SymbolTable(int tableSize)

Constructs a symbol table with a specified number of buckets.

### Method Detail

#### addSymbol

    public String addSymbol(String symbol)

Adds the specified symbol to the symbol table and returns a reference to the unique symbol. If the symbol already exists, the previous symbol reference is returned instead, in order guarantee that symbol references remain unique.

Parameters:
  `symbol` - The new symbol.

#### addSymbol

    public String addSymbol(char[] buffer,
                   int offset,
                   int length)

Adds the specified symbol to the symbol table and returns a reference to the unique symbol. If the symbol already exists, the previous symbol reference is returned instead, in order guarantee that symbol references remain unique.

Parameters:
  `buffer` - The buffer containing the new symbol.
  `offset` - The offset into the buffer of the new symbol.
  `length` - The length of the new symbol in the buffer.

#### hash

    public int hash(String symbol)

Returns a hashcode value for the specified symbol. The value returned by this method must be identical to the value returned by the `hash(char[],int,int)` method when called with the character array that comprises the symbol string.

Parameters:
  `symbol` - The symbol to hash.

#### hash

    public int hash(char[] buffer,
           int offset,
           int length)

Returns a hashcode value for the specified symbol information. The value returned by this method must be identical to the value returned by the `hash(String)` method when called with the string object created from the symbol information.

Parameters:
  `buffer` - The character buffer containing the symbol.
  `offset` - The offset into the character buffer of the start of the symbol.
  `length` - The length of the symbol.

#### containsSymbol

    public boolean containsSymbol(String symbol)

Returns true if the symbol table already contains the specified symbol.

Parameters:
  `symbol` - The symbol to look for.

#### containsSymbol

    public boolean containsSymbol(char[] buffer,
                         int offset,
                         int length)

Returns true if the symbol table already contains the specified symbol.

Parameters:
  `buffer` - The buffer containing the symbol to look for.
  `offset` - The offset into the buffer.
  `length` - The length of the symbol in the buffer.