org.apache.xml.dtm.ref
Class ExpandedNameTable

java.lang.Object
  extended by org.apache.xml.dtm.ref.ExpandedNameTable

public class ExpandedNameTable
extends java.lang.Object

This is a default implementation of a table that manages mappings from expanded names to expandedNameIDs. %OPT% The performance of the getExpandedTypeID() method is very important to DTM building. To get the best performance out of this class, we implement a simple hash algorithm directly into this class, instead of using the inefficient java.util.Hashtable. The code for the get and put operations are combined in getExpandedTypeID() method to share the same hash calculation code. We only need to implement the rehash() interface which is used to expand the hash table.


Nested Class Summary
private static class ExpandedNameTable.HashEntry
          Inner class which represents a hash table entry.
 
Field Summary
static int ATTRIBUTE
           
static int CDATA_SECTION
           
static int COMMENT
           
static int DOCUMENT
           
static int DOCUMENT_FRAGMENT
           
static int DOCUMENT_TYPE
           
static int ELEMENT
           
static int ENTITY
           
static int ENTITY_REFERENCE
           
(package private)  ExtendedType hashET
          Workspace for lookup.
private  int m_capacity
          The capacity of the hash table, i.e.
private static ExtendedType[] m_defaultExtendedTypes
          The array to store the default extended types.
private  ExtendedType[] m_extendedTypes
          Array of extended types for this document
private static int m_initialCapacity
          The initial capacity of the hash table.
private static int m_initialSize
          The initial size of the m_extendedTypes array
private static float m_loadFactor
          The default load factor of the Hashtable.
private  int m_nextType
          Next available extended type
private  ExpandedNameTable.HashEntry[] m_table
          The internal array to store the hash entries.
private  int m_threshold
          The threshold of the hash table, which is equal to capacity * loadFactor.
static int NAMESPACE
           
static int NOTATION
           
static int PROCESSING_INSTRUCTION
           
static int TEXT
           
 
Constructor Summary
ExpandedNameTable()
          Create an expanded name table.
 
Method Summary
 int getExpandedTypeID(int type)
          Given a type, return an expanded name ID.Any additional nodes that are created that have this expanded name will use this ID.
 int getExpandedTypeID(java.lang.String namespace, java.lang.String localName, int type)
          Given an expanded name represented by namespace, local name and node type, return an ID.
 int getExpandedTypeID(java.lang.String namespace, java.lang.String localName, int type, boolean searchOnly)
          Given an expanded name represented by namespace, local name and node type, return an ID.
 ExtendedType[] getExtendedTypes()
          Return the array of extended types
 java.lang.String getLocalName(int ExpandedNameID)
          Given an expanded-name ID, return the local name part.
 int getLocalNameID(int ExpandedNameID)
          Given an expanded-name ID, return the local name ID.
 java.lang.String getNamespace(int ExpandedNameID)
          Given an expanded-name ID, return the namespace URI part.
 int getNamespaceID(int ExpandedNameID)
          Given an expanded-name ID, return the namespace URI ID.
 int getSize()
          Return the size of the ExpandedNameTable
 short getType(int ExpandedNameID)
          Given an expanded-name ID, return the local name ID.
private  void initExtendedTypes()
          Initialize the vector of extended types with the basic DOM node types.
private  void rehash()
          Increases the capacity of and internally reorganizes the hashtable, in order to accommodate and access its entries more efficiently.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_extendedTypes

private ExtendedType[] m_extendedTypes
Array of extended types for this document


m_initialSize

private static int m_initialSize
The initial size of the m_extendedTypes array


m_nextType

private int m_nextType
Next available extended type


ELEMENT

public static final int ELEMENT
See Also:
Constant Field Values

ATTRIBUTE

public static final int ATTRIBUTE
See Also:
Constant Field Values

TEXT

public static final int TEXT
See Also:
Constant Field Values

CDATA_SECTION

public static final int CDATA_SECTION
See Also:
Constant Field Values

ENTITY_REFERENCE

public static final int ENTITY_REFERENCE
See Also:
Constant Field Values

ENTITY

public static final int ENTITY
See Also:
Constant Field Values

PROCESSING_INSTRUCTION

public static final int PROCESSING_INSTRUCTION
See Also:
Constant Field Values

COMMENT

public static final int COMMENT
See Also:
Constant Field Values

DOCUMENT

public static final int DOCUMENT
See Also:
Constant Field Values

DOCUMENT_TYPE

public static final int DOCUMENT_TYPE
See Also:
Constant Field Values

DOCUMENT_FRAGMENT

public static final int DOCUMENT_FRAGMENT
See Also:
Constant Field Values

NOTATION

public static final int NOTATION
See Also:
Constant Field Values

NAMESPACE

public static final int NAMESPACE
See Also:
Constant Field Values

hashET

ExtendedType hashET
Workspace for lookup. NOT THREAD SAFE!


m_defaultExtendedTypes

private static ExtendedType[] m_defaultExtendedTypes
The array to store the default extended types.


m_loadFactor

private static float m_loadFactor
The default load factor of the Hashtable. This is used to calcualte the threshold.


m_initialCapacity

private static int m_initialCapacity
The initial capacity of the hash table. Use a bigger number to avoid the cost of expanding the table.


m_capacity

private int m_capacity
The capacity of the hash table, i.e. the size of the internal HashEntry array.


m_threshold

private int m_threshold
The threshold of the hash table, which is equal to capacity * loadFactor. If the number of entries in the hash table is bigger than the threshold, the hash table needs to be expanded.


m_table

private ExpandedNameTable.HashEntry[] m_table
The internal array to store the hash entries. Each array member is a slot for a hash bucket.

Constructor Detail

ExpandedNameTable

public ExpandedNameTable()
Create an expanded name table.

Method Detail

initExtendedTypes

private void initExtendedTypes()
Initialize the vector of extended types with the basic DOM node types.


getExpandedTypeID

public int getExpandedTypeID(java.lang.String namespace,
                             java.lang.String localName,
                             int type)
Given an expanded name represented by namespace, local name and node type, return an ID. If the expanded-name does not exist in the internal tables, the entry will be created, and the ID will be returned. Any additional nodes that are created that have this expanded name will use this ID.

Parameters:
namespace - The namespace
localName - The local name
type - The node type
Returns:
the expanded-name id of the node.

getExpandedTypeID

public int getExpandedTypeID(java.lang.String namespace,
                             java.lang.String localName,
                             int type,
                             boolean searchOnly)
Given an expanded name represented by namespace, local name and node type, return an ID. If the expanded-name does not exist in the internal tables, the entry will be created, and the ID will be returned. Any additional nodes that are created that have this expanded name will use this ID.

If searchOnly is true, we will return -1 if the name is not found in the table, otherwise the name is added to the table and the expanded name id of the new entry is returned.

Parameters:
namespace - The namespace
localName - The local name
type - The node type
searchOnly - If it is true, we will only search for the expanded name. -1 is return is the name is not found.
Returns:
the expanded-name id of the node.

rehash

private void rehash()
Increases the capacity of and internally reorganizes the hashtable, in order to accommodate and access its entries more efficiently. This method is called when the number of keys in the hashtable exceeds this hashtable's capacity and load factor.


getExpandedTypeID

public int getExpandedTypeID(int type)
Given a type, return an expanded name ID.Any additional nodes that are created that have this expanded name will use this ID.

Returns:
the expanded-name id of the node.

getLocalName

public java.lang.String getLocalName(int ExpandedNameID)
Given an expanded-name ID, return the local name part.

Parameters:
ExpandedNameID - an ID that represents an expanded-name.
Returns:
String Local name of this node, or null if the node has no name.

getLocalNameID

public final int getLocalNameID(int ExpandedNameID)
Given an expanded-name ID, return the local name ID.

Parameters:
ExpandedNameID - an ID that represents an expanded-name.
Returns:
The id of this local name.

getNamespace

public java.lang.String getNamespace(int ExpandedNameID)
Given an expanded-name ID, return the namespace URI part.

Parameters:
ExpandedNameID - an ID that represents an expanded-name.
Returns:
String URI value of this node's namespace, or null if no namespace was resolved.

getNamespaceID

public final int getNamespaceID(int ExpandedNameID)
Given an expanded-name ID, return the namespace URI ID.

Parameters:
ExpandedNameID - an ID that represents an expanded-name.
Returns:
The id of this namespace.

getType

public final short getType(int ExpandedNameID)
Given an expanded-name ID, return the local name ID.

Parameters:
ExpandedNameID - an ID that represents an expanded-name.
Returns:
The id of this local name.

getSize

public int getSize()
Return the size of the ExpandedNameTable

Returns:
The size of the ExpandedNameTable

getExtendedTypes

public ExtendedType[] getExtendedTypes()
Return the array of extended types

Returns:
The array of extended types