Class TinyTree

java.lang.Object
net.sf.saxon.tinytree.TinyTree

public final class TinyTree extends Object
A 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 Details

    • 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 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
  • Constructor Details

    • TinyTree

      public TinyTree()
    • TinyTree

      public TinyTree(int nodes, int attributes, int namespaces, int characters)
  • Method Details

    • 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 tree
      alpha - Pointer to attributes or text
      beta - Pointer to namespaces or text
      nameCode - The name of the node
      Returns:
      the node number of the node that was added
    • appendChars

      void appendChars(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, 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 element
      nscode - 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 bit NodeInfo.IS_DTD_TYPE (1invalid input: '<'invalid input: '<'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, 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 number
      uri - the system ID
    • getSystemId

      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 CharSequence getCharacterBuffer()
    • getCommentBuffer

      public CharSequence getCommentBuffer()
    • getAttributeNameCodeArray

      public int[] getAttributeNameCodeArray()
    • getAttributeTypeCodeArray

      public int[] getAttributeTypeCodeArray()
    • getAttributeParentArray

      public int[] getAttributeParentArray()
    • getAttributeValueArray

      public CharSequence[] getAttributeValueArray()
    • getNamespaceCodeArray

      public int[] getNamespaceCodeArray()
    • getNamespaceParentArray

      public int[] getNamespaceParentArray()