com.ctc.wstx.util
Class ElementIdMap

java.lang.Object
  extended by com.ctc.wstx.util.ElementIdMap

public final class ElementIdMap
extends Object

This class is a specialized type-safe linked hash map used for storing ElementId instances. ElementId instances represent both id definitions (values of element attributes that have type ID in DTD), and references (values of element attributes of type IDREF and IDREFS). These definitions and references are stored for the purpose of verifying that all referenced id values are defined, and that none are defined more than once.

Note: there are 2 somewhat distinct usage modes, by DTDValidator and by MSV-based validators. DTDs pass raw character arrays, whereas MSV-based validators operate on Strings. This is the main reason for 2 distinct sets of methods.


Field Summary
protected static int DEFAULT_SIZE
          Default initial table size; set so that usually it need not be expanded.
protected static int FILL_PCT
          Let's use 80% fill factor...
protected  ElementId mHead
           
protected static int MIN_SIZE
           
protected  int mIndexMask
          Mask used to get index from hash values; equal to mBuckets.length - 1, when mBuckets.length is a power of two.
protected  int mSize
          Current size (number of entries); needed to know if and when rehash.
protected  int mSizeThreshold
          Limit that indicates maximum size this instance can hold before it needs to be expanded and rehashed.
protected  ElementId[] mTable
          Actual hash table area
protected  ElementId mTail
           
 
Constructor Summary
ElementIdMap()
           
ElementIdMap(int initialSize)
          This constructor is mainly used for testing, as it can be sized appropriately to test rehashing etc.
 
Method Summary
 ElementId addDefined(char[] buffer, int start, int len, int hash, Location loc, PrefixedName elemName, PrefixedName attrName)
          Method called when an id definition is encountered.
 ElementId addDefined(String idStr, Location loc, PrefixedName elemName, PrefixedName attrName)
           
 ElementId addReferenced(char[] buffer, int start, int len, int hash, Location loc, PrefixedName elemName, PrefixedName attrName)
          Method called when a reference to id is encountered.
 ElementId addReferenced(String idStr, Location loc, PrefixedName elemName, PrefixedName attrName)
           
static int calcHash(char[] buffer, int start, int len)
          Implementation of a hashing method for variable length Strings.
static int calcHash(String key)
           
 ElementId getFirstUndefined()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_SIZE

protected static final int DEFAULT_SIZE
Default initial table size; set so that usually it need not be expanded.

See Also:
Constant Field Values

MIN_SIZE

protected static final int MIN_SIZE
See Also:
Constant Field Values

FILL_PCT

protected static final int FILL_PCT
Let's use 80% fill factor...

See Also:
Constant Field Values

mTable

protected ElementId[] mTable
Actual hash table area


mSize

protected int mSize
Current size (number of entries); needed to know if and when rehash.


mSizeThreshold

protected int mSizeThreshold
Limit that indicates maximum size this instance can hold before it needs to be expanded and rehashed. Calculated using fill factor passed in to constructor.


mIndexMask

protected int mIndexMask
Mask used to get index from hash values; equal to mBuckets.length - 1, when mBuckets.length is a power of two.


mHead

protected ElementId mHead

mTail

protected ElementId mTail
Constructor Detail

ElementIdMap

public ElementIdMap()

ElementIdMap

public ElementIdMap(int initialSize)
This constructor is mainly used for testing, as it can be sized appropriately to test rehashing etc.

Method Detail

getFirstUndefined

public ElementId getFirstUndefined()

addReferenced

public ElementId addReferenced(char[] buffer,
                               int start,
                               int len,
                               int hash,
                               Location loc,
                               PrefixedName elemName,
                               PrefixedName attrName)
Method called when a reference to id is encountered. If so, need to check if specified id entry (ref or definiton) exists; and if not, to add a reference marker.


addReferenced

public ElementId addReferenced(String idStr,
                               Location loc,
                               PrefixedName elemName,
                               PrefixedName attrName)

addDefined

public ElementId addDefined(char[] buffer,
                            int start,
                            int len,
                            int hash,
                            Location loc,
                            PrefixedName elemName,
                            PrefixedName attrName)
Method called when an id definition is encountered. If so, need to check if specified id entry (ref or definiton) exists. If not, need to add the definition marker. If it does exist, need to 'upgrade it', if it was a reference marker; otherwise need to just return the old entry, and expect caller to check for dups and report the error.


addDefined

public ElementId addDefined(String idStr,
                            Location loc,
                            PrefixedName elemName,
                            PrefixedName attrName)

calcHash

public static int calcHash(char[] buffer,
                           int start,
                           int len)
Implementation of a hashing method for variable length Strings. Most of the time intention is that this calculation is done by caller during parsing, not here; however, sometimes it needs to be done for parsed "String" too.

Note: identical to SymbolTable.calcHash(char[], int, int), although not required to be.

Parameters:
len - Length of String; has to be at least 1 (caller guarantees this pre-condition)

calcHash

public static int calcHash(String key)