public final class TinyTree extends GenericTreeInfo implements NodeVectorTree
It can be used to represent a tree that is rooted at a document node, or one that is rooted at an element node.
From Saxon 9.7, as a consequence of bug 2220, it is used only to hold a single tree, whose root is always node number zero.
| Modifier and Type | Field and Description |
|---|---|
protected int[] |
alpha |
protected int[] |
attCode |
protected int[] |
attParent |
protected SimpleType[] |
attType |
protected AtomicSequence[] |
attTypedValue |
protected CharSequence[] |
attValue |
protected int[] |
beta |
protected AppendableCharSequence |
charBuffer |
protected FastStringBuffer |
commentBuffer |
protected IntSet |
defaultedAttributes |
protected short[] |
depth |
protected HashMap<String,String[]> |
entityTable |
protected List<GraftedElement> |
externalNodes |
protected IntSet |
idRefAttributes |
protected IntSet |
idRefElements |
protected IntHashMap<String> |
knownBaseUris |
protected int[] |
nameCode |
protected NamespaceBinding[] |
namespaceBinding |
protected int[] |
namespaceParent |
protected int[] |
next |
protected IntSet |
nilledElements |
byte[] |
nodeKind |
protected int |
numberOfAttributes |
protected int |
numberOfNamespaces |
protected int |
numberOfNodes |
protected PrefixPool |
prefixPool |
protected int[] |
prior |
protected IntSet |
topWithinEntity |
protected SchemaType[] |
typeArray |
static int |
TYPECODE_IDREF |
protected AtomicSequence[] |
typedValueArray |
static boolean |
useBulkCopy
Temporary flag introduced in Saxon 9.8.0.5 to enable or disable fast-path code for copying
element nodes from one TinyTree to another.
|
static boolean |
useGraft |
protected boolean |
usesNamespaces |
| Constructor and Description |
|---|
TinyTree(Configuration config,
Statistics statistics)
Create a tree with a specified initial size
|
| Modifier and Type | Method and Description |
|---|---|
(package private) void |
addAttribute(NodeInfo root,
int parent,
int nameCode,
SimpleType type,
CharSequence attValue,
int properties)
Add an attribute node to the tree
|
(package private) int |
addDocumentNode(TinyDocumentImpl doc)
Add a document node to the tree.
|
(package private) void |
addNamespace(int parent,
NamespaceBinding binding)
Add a namespace node to the current element
|
(package private) int |
addNode(short kind,
int depth,
int alpha,
int beta,
int nameCode)
Add a node to the tree
|
int |
addTextNodeCopy(int depth,
int existingNodeNr)
Create a new text node that is a copy of an existing text node
|
(package private) void |
appendChars(CharSequence chars)
Append character data to the current text node
|
void |
bulkCopy(TinyTree source,
int nodeNr,
int[] prevAtDepth,
int currentDepth)
Bulk copy an element node from another TinyTree.
|
(package private) void |
condense(Statistics statistics)
Condense the tree: release unused memory.
|
boolean |
containsGraftedSubtrees()
Ask if the tree contains grafted subtrees
|
void |
diagnosticDump()
Produce diagnostic print of main tree arrays
|
static void |
diagnosticDump(NodeInfo node)
Create diagnostic dump of the tree containing a particular node.
|
(package private) void |
ensurePriorIndex()
On demand, make an index for quick access to preceding-sibling nodes
|
int[] |
getAlphaArray()
Get the array holding alpha information
|
(package private) AtomicValue |
getAtomizedValueOfUntypedNode(int nodeNr)
Get the typed value of a node whose type is known to be untypedAtomic.
|
(package private) int |
getAttributeAnnotation(int nr)
Get the type annotation of an attribute node.
|
int[] |
getAttributeNameCodeArray()
Get the array used to hold the name codes of all attributes
|
(package private) TinyAttributeImpl |
getAttributeNode(int nr)
Make a (transient) attribute node from the array of attributes
|
int[] |
getAttributeParentArray()
Get the array used to hold the parent pointers of all attributes
|
(package private) SimpleType |
getAttributeType(int nr)
Get the type annotation of an attribute node.
|
SimpleType[] |
getAttributeTypeArray()
Get the array used to hold the type codes of all attributes
|
CharSequence[] |
getAttributeValueArray()
Get the array used to hold the name codes of all attributes
|
int[] |
getBetaArray()
Get the array holding beta information
|
AppendableCharSequence |
getCharacterBuffer()
Get the character buffer used to hold all the text data of the document
|
int |
getColumnNumber(int sequence)
Get the column number for a node.
|
CharSequence |
getCommentBuffer()
Get the character buffer used to hold all the comment data of the document
|
NodeInfo |
getCopiedFrom()
Declare that this tree was produced as a copy of another tree, and identify
the root node of that tree
|
int |
getFingerprint(int nodeNr)
Get the fingerprint for a given node, which must be a document, element,
text, comment, or processing instruction node
|
int |
getLineNumber(int sequence)
Get the line number for a node.
|
int |
getNameCode(int nodeNr)
Get the nameCode for a given node, which must be a document, element,
text, comment, or processing instruction node
|
int[] |
getNameCodeArray()
Get the array holding node name information
|
NamePool |
getNamePool() |
NamespaceBinding[] |
getNamespaceBindings()
Get the array used to hold the namespace declarations
|
int[] |
getNamespaceParentArray()
Get the array used to hold the parent pointers of all namespace declarations
|
int[] |
getNextPointerArray()
Get the array holding next-sibling pointers
|
TinyNodeImpl |
getNode(int nr)
Get the node at a given position in the tree
|
short[] |
getNodeDepthArray()
Get the array holding node depth information
|
int |
getNodeKind(int nodeNr)
Get the node kind of a given node, which must be a document, element,
text, comment, or processing instruction node
|
byte[] |
getNodeKindArray()
Get the array holding node kind information
|
int |
getNumberOfAttributes()
Get the number of attributes in the tree
|
int |
getNumberOfNamespaces()
Get the number of namespace declarations in the tree
|
int |
getNumberOfNodes()
Get the number of nodes in the tree, excluding attributes and namespace nodes
|
String |
getPrefix(int nodeNr)
Get the prefix for a given element node
|
PrefixPool |
getPrefixPool()
Get the prefix pool
|
NodeInfo |
getRootNode()
Get the NodeInfo object representing the root of the tree (not necessarily a document node)
|
SchemaType |
getSchemaType(int nodeNr)
Get the type annotation of a node.
|
String |
getSystemId(int seq)
Get the system id of an element in the document
|
int |
getTypeAnnotation(int nodeNr)
Get the type annotation of a node.
|
SchemaType[] |
getTypeArray()
Get the array holding node type information
|
AtomicSequence |
getTypedValueOfAttribute(TinyAttributeImpl att,
int nodeNr)
Get the typed value of an attribute node.
|
AtomicSequence |
getTypedValueOfElement(int nodeNr)
Get the type value of an element node, given only the node number
|
AtomicSequence |
getTypedValueOfElement(TinyElementImpl element)
Get the typed value of an element node.
|
String[] |
getUnparsedEntity(String name)
Get the unparsed entity with a given nameID if there is one, or null if not.
|
Iterator<String> |
getUnparsedEntityNames()
Get the list of unparsed entities defined in this document
|
void |
graft(NodeInfo externalNode,
int nodeNr,
int depth,
boolean copyNamespaces)
Graft an element node from an external tree
|
boolean |
hasXmlSpacePreserveAttribute()
Ask whether, somewhere in the tree, there is an attribute xml:space="preserve"
|
void |
indexIDElement(NodeInfo root,
int nodeNr)
Index an element of type xs:ID
|
boolean |
isDefaultedAttribute(int attNr)
Ask whether an attribute results from expansion of attribute defaults
|
boolean |
isIdAttribute(int nr)
Determine whether an attribute is an ID attribute.
|
boolean |
isIdElement(int nr)
Ask whether an element is an ID element.
|
boolean |
isIdrefAttribute(int nr)
Determine whether an attribute is an IDREF/IDREFS attribute.
|
boolean |
isIdrefElement(int nr)
Ask whether an element is an IDREF/IDREFS element.
|
boolean |
isNilled(int nodeNr)
Ask whether a given node is nilled
|
boolean |
isTopWithinEntity(int nodeNr) |
boolean |
isTyped()
Ask whether the document contains any nodes whose type annotation is anything other than
UNTYPED
|
boolean |
isUsesNamespaces()
Ask whether the tree contains any namespace declarations
|
void |
markDefaultedAttribute(int attNr)
Mark an attribute as resulting from expansion of attribute defaults
|
void |
markTopWithinEntity(int nodeNr) |
(package private) void |
registerID(NodeInfo e,
String id)
Register a unique element ID.
|
NodeInfo |
selectID(String id,
boolean getParent)
Get the element with a given ID.
|
void |
setConfiguration(Configuration config)
Set the Configuration that contains this document
|
void |
setCopiedFrom(NodeInfo copiedFrom)
Declare that this tree was produced as a copy of another tree, and identify
the root node of that tree
|
(package private) void |
setElementAnnotation(int nodeNr,
SchemaType type)
Set the type annotation of an element node
|
(package private) void |
setLineNumber(int sequence,
int line,
int column)
Set the line number for a node.
|
void |
setLineNumbering()
Set line numbering on
|
void |
setNilled(int nodeNr)
Set an element node to be marked as nilled
|
(package private) void |
setSystemId(int seq,
String uri)
Set the system id of an element in the document.
|
(package private) void |
setUnparsedEntity(String name,
String uri,
String publicId)
Set an unparsed entity URI associated with this document.
|
void |
showSize()
Output a statistical summary to System.err
|
getConfiguration, getDocumentNumber, getPublicId, getSpaceStrippingRule, getSystemId, getUserData, isStreamed, setDocumentNumber, setRootNode, setSpaceStrippingRule, setSystemId, setUserDataprotected AppendableCharSequence charBuffer
protected FastStringBuffer commentBuffer
protected int numberOfNodes
public byte[] nodeKind
protected short[] depth
protected int[] next
protected int[] alpha
protected int[] beta
protected int[] nameCode
protected int[] prior
protected SchemaType[] typeArray
protected AtomicSequence[] typedValueArray
protected IntSet idRefElements
protected IntSet idRefAttributes
protected IntSet nilledElements
protected IntSet defaultedAttributes
protected IntSet topWithinEntity
public static final int TYPECODE_IDREF
protected int numberOfAttributes
protected int[] attParent
protected int[] attCode
protected CharSequence[] attValue
protected AtomicSequence[] attTypedValue
protected SimpleType[] attType
protected int numberOfNamespaces
protected int[] namespaceParent
protected NamespaceBinding[] namespaceBinding
protected boolean usesNamespaces
protected PrefixPool prefixPool
protected List<GraftedElement> externalNodes
protected IntHashMap<String> knownBaseUris
public static final boolean useBulkCopy
public static boolean useGraft
public TinyTree(Configuration config, Statistics statistics)
config - the Saxon configurationstatistics - the size parameters for the treepublic void setConfiguration(Configuration config)
setConfiguration in class GenericTreeInfoconfig - the Saxon configurationpublic PrefixPool getPrefixPool()
public void setCopiedFrom(NodeInfo copiedFrom)
copiedFrom - the root of the tree from which this one was copiedpublic NodeInfo getCopiedFrom()
int addDocumentNode(TinyDocumentImpl doc)
doc - the document node to be addedint addNode(short kind,
int depth,
int alpha,
int beta,
int nameCode)
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 nodevoid appendChars(CharSequence chars)
chars - the character data to be appendedpublic int addTextNodeCopy(int depth,
int existingNodeNr)
depth - the depth of the new nodeexistingNodeNr - the node to be copiedvoid condense(Statistics statistics)
statistics - represents the family of trees to which this tree belongs; statistics for the
size of the tree are recorded in this Statistics objectvoid setElementAnnotation(int nodeNr,
SchemaType type)
nodeNr - the node whose type annotation is to be settype - the type annotationpublic int getTypeAnnotation(int nodeNr)
nodeNr - the node whose type annotation is requiredpublic SchemaType getSchemaType(int nodeNr)
nodeNr - the node whose type annotation is requiredpublic AtomicSequence getTypedValueOfElement(TinyElementImpl element) throws XPathException
element - the element nodeXPathException - if a dynamic error occurs, for example if the node is
an element annotated with a type that has element-only contentpublic AtomicSequence getTypedValueOfElement(int nodeNr) throws XPathException
nodeNr - the node number of the element nodeXPathException - if the eement has no typed valuepublic AtomicSequence getTypedValueOfAttribute(TinyAttributeImpl att, int nodeNr) throws XPathException
att - the attribute node if available. If null is supplied, the attribute node
will be materialized only if it is needed.nodeNr - the node number of the attribute nodeXPathException - if an error is foundpublic int getNodeKind(int nodeNr)
getNodeKind in interface NodeVectorTreenodeNr - the node numberpublic int getNameCode(int nodeNr)
nodeNr - the node numberpublic int getFingerprint(int nodeNr)
getFingerprint in interface NodeVectorTreenodeNr - the node numberpublic String getPrefix(int nodeNr)
nodeNr - the node numbervoid ensurePriorIndex()
void addAttribute(NodeInfo root, int parent, int nameCode, SimpleType type, CharSequence attValue, int properties)
root - the root of the tree to contain the attributeparent - the parent element of the new attributenameCode - the name code of the attributetype - the type annotation of the attributeattValue - the string value of the attributeproperties - any special properties of the attribute (bit-significant)public void markDefaultedAttribute(int attNr)
attNr - the attribute numberpublic boolean isDefaultedAttribute(int attNr)
attNr - the attribute numberFeatureKeys.EXPAND_ATTRIBUTE_DEFAULTS and FeatureKeys.MARK_DEFAULTED_ATTRIBUTES
are set.public void indexIDElement(NodeInfo root, int nodeNr)
root - the root node of the documentnodeNr - the element of type xs:IDpublic boolean hasXmlSpacePreserveAttribute()
void addNamespace(int parent,
NamespaceBinding binding)
parent - the node number of the elementbinding - namespace identifying the prefix and uripublic final TinyNodeImpl getNode(int nr)
getNode in interface NodeVectorTreenr - the node numberAtomicValue getAtomizedValueOfUntypedNode(int nodeNr)
nodeNr - the node whose typed value is requiredTinyAttributeImpl getAttributeNode(int nr)
nr - the node number of the attributeint getAttributeAnnotation(int nr)
nr - the node number of the attributeSimpleType getAttributeType(int nr)
nr - the node number of the attributepublic boolean isIdAttribute(int nr)
nr - the node number of the attributepublic boolean isIdrefAttribute(int nr)
nr - the node number of the attributepublic boolean isIdElement(int nr)
nr - the element node whose is-id property is requiredpublic boolean isIdrefElement(int nr)
nr - the element node whose is-idref property is requiredvoid setSystemId(int seq,
String uri)
seq - the node numberuri - the system IDpublic String getSystemId(int seq)
seq - the node number of the element nodepublic NodeInfo getRootNode()
GenericTreeInfogetRootNode in interface TreeInfogetRootNode in class GenericTreeInfopublic void setLineNumbering()
void setLineNumber(int sequence,
int line,
int column)
sequence - the node numberline - the line number to be set for the nodecolumn - the column number for the nodepublic int getLineNumber(int sequence)
sequence - the node numberpublic int getColumnNumber(int sequence)
sequence - the node numberpublic void setNilled(int nodeNr)
nodeNr - the node number to be marked as nilledpublic boolean isNilled(int nodeNr)
nodeNr - the node in question (which must be an element node)void registerID(NodeInfo e, String id)
e - The NodeInfo (always an element) having a particular unique ID valueid - The unique ID value. The caller is responsible for checking that this
is a valid NCName.public NodeInfo selectID(String id, boolean getParent)
selectID in interface TreeInfoselectID in class GenericTreeInfoid - The unique ID of the required element, previously registered using registerID()getParent - true if the required element is the parent of the element of type IDvoid setUnparsedEntity(String name, String uri, String publicId)
name - the name of the unparsed entityuri - the system identifier of the unparsed entitypublicId - the public identifier of the unparsed entitypublic Iterator<String> getUnparsedEntityNames()
getUnparsedEntityNames in interface TreeInfogetUnparsedEntityNames in class GenericTreeInfopublic String[] getUnparsedEntity(String name)
getUnparsedEntity in interface TreeInfogetUnparsedEntity in class GenericTreeInfoname - the name of the entitypublic NamePool getNamePool()
public void markTopWithinEntity(int nodeNr)
public boolean isTopWithinEntity(int nodeNr)
public void diagnosticDump()
public static void diagnosticDump(NodeInfo node)
node - the node in questionpublic void showSize()
public boolean isTyped()
isTyped in interface TreeInfoisTyped in interface NodeVectorTreeisTyped in class GenericTreeInfopublic int getNumberOfNodes()
public int getNumberOfAttributes()
public int getNumberOfNamespaces()
public byte[] getNodeKindArray()
getNodeKindArray in interface NodeVectorTreepublic short[] getNodeDepthArray()
public int[] getNameCodeArray()
getNameCodeArray in interface NodeVectorTreepublic SchemaType[] getTypeArray()
public int[] getNextPointerArray()
public int[] getAlphaArray()
public int[] getBetaArray()
public AppendableCharSequence getCharacterBuffer()
public CharSequence getCommentBuffer()
public int[] getAttributeNameCodeArray()
public SimpleType[] getAttributeTypeArray()
public int[] getAttributeParentArray()
public CharSequence[] getAttributeValueArray()
public NamespaceBinding[] getNamespaceBindings()
public int[] getNamespaceParentArray()
public boolean isUsesNamespaces()
public void bulkCopy(TinyTree source, int nodeNr, int[] prevAtDepth, int currentDepth)
source - the source treenodeNr - the element node to be deep-copiedpublic void graft(NodeInfo externalNode, int nodeNr, int depth, boolean copyNamespaces)
public boolean containsGraftedSubtrees()