org.apache.struts2.jasper.xmlparser

## Class SymbolTable

- java.lang.Object
- - org.apache.struts2.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.
  Version:
    $Id: SymbolTable.java 467222 2006-10-24 03:17:11Z markt $
  Author:
    Andy Clark

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `SymbolTable.Entry` This class is a symbol table entry.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `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)`
    `boolean` | `containsSymbol(String symbol)`
    `int` | `hash(char[] buffer, int offset, int length)`
    `int` | `hash(String 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.
      Parameters:
        `tableSize` - the table size

  - ### 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.
      Returns:
        reference to the unique 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.
      Returns:
        reference to the unique symbol

    - #### hash

          public int hash(String symbol)

      Parameters:
        `symbol` - The symbol to hash.
      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.

    - #### hash

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

      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.
      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.

    - #### containsSymbol

          public boolean containsSymbol(String symbol)

      Parameters:
        `symbol` - The symbol to look for.
      Returns:
        true if the symbol table already contains the specified symbol.

    - #### containsSymbol

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

      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.
      Returns:
        true if the symbol table already contains the specified symbol.

Copyright © 2000–2023 Apache Software Foundation. All rights reserved.