Package net.sf.saxon.tinytree
Class TinyTree
- java.lang.Object
-
- net.sf.saxon.tinytree.TinyTree
-
public final class TinyTree extends java.lang.ObjectA data structure to hold the contents of a tree. As the name implies, this implementation of the data model is optimized for size, and for speed of creation: it minimizes the number of Java objects used.It can be used to represent a tree that is rooted at a document node, or one that is rooted at an element node.
-
-
Field Summary
Fields Modifier and Type Field Description protected int[]alphaprotected int[]attCodeprotected int[]attParentprotected int[]attTypeCodeprotected java.lang.CharSequence[]attValueprotected int[]betaprotected LargeStringBuffercharBufferprotected FastStringBuffercommentBufferprotected short[]depthprotected intdocumentNumberprotected int[]nameCodeprotected int[]namespaceCodeprotected int[]namespaceParentprotected int[]nextbyte[]nodeKindprotected intnumberOfAttributesprotected intnumberOfNamespacesprotected intnumberOfNodesprotected int[]priorprotected introotIndexUsedprotected int[]typeCodeArrayprotected booleanusesNamespaces
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) voidaddAttribute(NodeInfo root, int parent, int nameCode, int typeCode, java.lang.CharSequence attValue, int properties)(package private) voidaddDocumentNode(TinyDocumentImpl doc)Add a document node to the tree.(package private) voidaddNamespace(int parent, int nscode)Add a namespace node to the current element(package private) intaddNode(short kind, int depth, int alpha, int beta, int nameCode)Add a node to the tree(package private) voidappendChars(java.lang.CharSequence chars)(package private) voidcondense()Condense the tree: release unused memory.voiddiagnosticDump()Produce diagnostic print of main tree arraysstatic voiddiagnosticDump(NodeInfo node)Create diagnostic dump of the tree containing a particular node.(package private) voidensurePriorIndex()On demand, make an index for quick access to preceding-sibling nodesint[]getAlphaArray()(package private) AtomicValuegetAtomizedValueOfUntypedNode(int nodeNr)Get the typed value of a node whose type is known to be untypedAtomic.(package private) intgetAttributeAnnotation(int nr)Get the type annotation of an attribute node.int[]getAttributeNameCodeArray()(package private) TinyAttributeImplgetAttributeNode(int nr)Make a (transient) attribute node from the array of attributesint[]getAttributeParentArray()int[]getAttributeTypeCodeArray()java.lang.CharSequence[]getAttributeValueArray()int[]getBetaArray()java.lang.CharSequencegetCharacterBuffer()java.lang.CharSequencegetCommentBuffer()ConfigurationgetConfiguration()Get the configuration previously set using setConfigurationintgetDocumentNumber()Get the document number (actually, the tree number)(package private) intgetLineNumber(int sequence)Get the line number for an element.intgetNameCode(int nodeNr)Get the nameCode for a given node, which must be a document, element, text, comment, or processing instruction nodeint[]getNameCodeArray()NamePoolgetNamePool()Get the name pool used for the names in this documentint[]getNamespaceCodeArray()int[]getNamespaceParentArray()int[]getNextPointerArray()TinyNodeImplgetNode(int nr)short[]getNodeDepthArray()intgetNodeKind(int nodeNr)Get the node kind of a given node, which must be a document, element, text, comment, or processing instruction nodebyte[]getNodeKindArray()intgetNumberOfAttributes()intgetNumberOfNamespaces()intgetNumberOfNodes()Get the number of nodes in the tree, excluding attributes and namespace nodes(package private) intgetRootNode(int nodeNr)Get the root node for a given node(package private) java.lang.StringgetSystemId(int seq)Get the system id of an element in the documentintgetTypeAnnotation(int nodeNr)Get the type annotation of a node.int[]getTypeCodeArray()voidindexIDElement(NodeInfo root, int nodeNr, NameChecker checker)Index an element of type xs:IDbooleanisIdrefAttribute(int nr)Determine whether an attribute is an IDREF/IDREFS attribute.booleanisIdrefElement(int nr)Determine whether an element is an IDREF/IDREFS element.booleanisNilled(int nodeNr)Determine whether a given node is nilledvoidsetConfiguration(Configuration config)Set the Configuration that contains this document(package private) voidsetElementAnnotation(int nodeNr, int typeCode)Set the type annotation of an element node(package private) voidsetLineNumber(int sequence, int line)Set the line number for an element.voidsetLineNumbering()Set line numbering on(package private) voidsetSystemId(int seq, java.lang.String uri)Set the system id of an element in the document.voidshowSize()
-
-
-
Field Detail
-
documentNumber
protected int documentNumber
-
charBuffer
protected LargeStringBuffer charBuffer
-
commentBuffer
protected FastStringBuffer commentBuffer
-
numberOfNodes
protected int numberOfNodes
-
nodeKind
public byte[] nodeKind
-
depth
protected short[] depth
-
next
protected int[] next
-
alpha
protected int[] alpha
-
beta
protected int[] beta
-
nameCode
protected int[] nameCode
-
prior
protected int[] prior
-
typeCodeArray
protected int[] typeCodeArray
-
numberOfAttributes
protected int numberOfAttributes
-
attParent
protected int[] attParent
-
attCode
protected int[] attCode
-
attValue
protected java.lang.CharSequence[] attValue
-
attTypeCode
protected int[] attTypeCode
-
numberOfNamespaces
protected int numberOfNamespaces
-
namespaceParent
protected int[] namespaceParent
-
namespaceCode
protected int[] namespaceCode
-
rootIndexUsed
protected int rootIndexUsed
-
usesNamespaces
protected boolean usesNamespaces
-
-
Method Detail
-
setConfiguration
public void setConfiguration(Configuration config)
Set the Configuration that contains this document
-
getConfiguration
public Configuration getConfiguration()
Get the configuration previously set using setConfiguration
-
getNamePool
public NamePool getNamePool()
Get the name pool used for the names in this document
-
addDocumentNode
void addDocumentNode(TinyDocumentImpl doc)
Add a document node to the tree. The data structure can contain any number of document (or element) nodes as top-level nodes. The document node is retained in the documentList list, and its offset in that list is held in the alpha array for the relevant node number.
-
addNode
int addNode(short kind, int depth, int alpha, int beta, int nameCode)Add a node to the tree- Parameters:
kind- The kind of the node. This must be a document, element, text, comment, or processing-instruction node (not an attribute or namespace)depth- The depth in the treealpha- Pointer to attributes or textbeta- Pointer to namespaces or textnameCode- The name of the node- Returns:
- the node number of the node that was added
-
appendChars
void appendChars(java.lang.CharSequence chars)
-
condense
void condense()
Condense the tree: release unused memory. This is done after the full tree has been built. The method makes a pragmatic judgement as to whether it is worth reclaiming space; this is only done when the constructed tree is very small compared with the space allocated.
-
setElementAnnotation
void setElementAnnotation(int nodeNr, int typeCode)Set the type annotation of an element node
-
getTypeAnnotation
public int getTypeAnnotation(int nodeNr)
Get the type annotation of a node. Applies only to document, element, text, processing instruction, and comment nodes.- Returns:
- the fingerprint of the type annotation for elements and attributes, otherwise undefined.
-
getNodeKind
public int getNodeKind(int nodeNr)
Get the node kind of a given node, which must be a document, element, text, comment, or processing instruction node- Parameters:
nodeNr- the node number- Returns:
- the node kind
-
getNameCode
public int getNameCode(int nodeNr)
Get the nameCode for a given node, which must be a document, element, text, comment, or processing instruction node- Parameters:
nodeNr- the node number- Returns:
- the name code
-
ensurePriorIndex
void ensurePriorIndex()
On demand, make an index for quick access to preceding-sibling nodes
-
addAttribute
void addAttribute(NodeInfo root, int parent, int nameCode, int typeCode, java.lang.CharSequence attValue, int properties)
-
indexIDElement
public void indexIDElement(NodeInfo root, int nodeNr, NameChecker checker)
Index an element of type xs:ID
-
addNamespace
void addNamespace(int parent, int nscode)Add a namespace node to the current element- Parameters:
parent- the node number of the elementnscode- namespace code identifying the prefix and uri
-
getNode
public final TinyNodeImpl getNode(int nr)
-
getAtomizedValueOfUntypedNode
AtomicValue getAtomizedValueOfUntypedNode(int nodeNr)
Get the typed value of a node whose type is known to be untypedAtomic. The node must be a document, element, text, comment, or processing-instruction node, and it must have no type annotation. This method gets the typed value of a numbered node without actually instantiating the NodeInfo object, as a performance optimization.
-
getAttributeNode
TinyAttributeImpl getAttributeNode(int nr)
Make a (transient) attribute node from the array of attributes
-
getAttributeAnnotation
int getAttributeAnnotation(int nr)
Get the type annotation of an attribute node. The bitNodeInfo.IS_DTD_TYPE(1<<30) will be set in the case of an attribute node if the type annotation is one of ID, IDREF, or IDREFS and this is derived from DTD rather than schema validation.- Returns:
- Type.UNTYPED_ATOMIC if there is no annotation
-
isIdrefAttribute
public boolean isIdrefAttribute(int nr)
Determine whether an attribute is an IDREF/IDREFS attribute. (The represents the is-idref property in the data model)
-
isIdrefElement
public boolean isIdrefElement(int nr)
Determine whether an element is an IDREF/IDREFS element. (The represents the is-idref property in the data model)
-
setSystemId
void setSystemId(int seq, java.lang.String uri)Set the system id of an element in the document. This identifies the external entity containing the node - this is not necessarily the same as the base URI.- Parameters:
seq- the node numberuri- the system ID
-
getSystemId
java.lang.String getSystemId(int seq)
Get the system id of an element in the document
-
getRootNode
int getRootNode(int nodeNr)
Get the root node for a given node
-
setLineNumbering
public void setLineNumbering()
Set line numbering on
-
setLineNumber
void setLineNumber(int sequence, int line)Set the line number for an element. Ignored if line numbering is off.
-
getLineNumber
int getLineNumber(int sequence)
Get the line number for an element. Return -1 if line numbering is off.
-
getDocumentNumber
public int getDocumentNumber()
Get the document number (actually, the tree number)
-
isNilled
public boolean isNilled(int nodeNr)
Determine whether a given node is nilled
-
diagnosticDump
public void diagnosticDump()
Produce diagnostic print of main tree arrays
-
diagnosticDump
public static void diagnosticDump(NodeInfo node)
Create diagnostic dump of the tree containing a particular node. Designed to be called as an extension function for diagnostics.
-
showSize
public void showSize()
-
getNumberOfNodes
public int getNumberOfNodes()
Get the number of nodes in the tree, excluding attributes and namespace nodes- Returns:
- the number of nodes.
-
getNumberOfAttributes
public int getNumberOfAttributes()
-
getNumberOfNamespaces
public int getNumberOfNamespaces()
-
getNodeKindArray
public byte[] getNodeKindArray()
-
getNodeDepthArray
public short[] getNodeDepthArray()
-
getNameCodeArray
public int[] getNameCodeArray()
-
getTypeCodeArray
public int[] getTypeCodeArray()
-
getNextPointerArray
public int[] getNextPointerArray()
-
getAlphaArray
public int[] getAlphaArray()
-
getBetaArray
public int[] getBetaArray()
-
getCharacterBuffer
public java.lang.CharSequence getCharacterBuffer()
-
getCommentBuffer
public java.lang.CharSequence getCommentBuffer()
-
getAttributeNameCodeArray
public int[] getAttributeNameCodeArray()
-
getAttributeTypeCodeArray
public int[] getAttributeTypeCodeArray()
-
getAttributeParentArray
public int[] getAttributeParentArray()
-
getAttributeValueArray
public java.lang.CharSequence[] getAttributeValueArray()
-
getNamespaceCodeArray
public int[] getNamespaceCodeArray()
-
getNamespaceParentArray
public int[] getNamespaceParentArray()
-
-