zongaro     2002/12/17 11:06:42

  Modified:    java/src/org/apache/xml/dtm/ref Tag: XSLTC_DTM
                        DTMDefaultBase.java DTMDefaultBaseIterators.java
  Log:
  Added getFirstAttributeIdentity and getNextAttributeIdentity methods to
  DTMDefaultBase that take a node identity as input and return a node identity.
  That avoids some overhead of decoding a handle when iterating through
  attributes.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.28.2.7  +39 -25    xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java
  
  Index: DTMDefaultBase.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java,v
  retrieving revision 1.28.2.6
  retrieving revision 1.28.2.7
  diff -u -r1.28.2.6 -r1.28.2.7
  --- DTMDefaultBase.java       10 Dec 2002 18:48:44 -0000      1.28.2.6
  +++ DTMDefaultBase.java       17 Dec 2002 19:06:41 -0000      1.28.2.7
  @@ -552,7 +552,6 @@
      */
     protected int _nextsib(int identity)
     {
  -
       // Boiler-plate code for each of the _xxx functions, except for the array.
       int info = (identity >= m_size) ? NOTPROCESSED : m_nextsib.elementAt(identity);
   
  @@ -1040,15 +1039,23 @@
      */
     public int getFirstAttribute(int nodeHandle)
     {
  +    int nodeID = makeNodeIdentity(nodeHandle);
   
  -    int type = getNodeType(nodeHandle);
  +    return makeNodeHandle(getFirstAttributeIdentity(nodeID));
  +  }
  +
  +  /**
  +   * Given a node identity, get the index of the node's first attribute.
  +   *
  +   * @param identity int identity of the node.
  +   * @return Identity of first attribute, or DTM.NULL to indicate none exists.
  +   */
  +  protected int getFirstAttributeIdentity(int identity) {
  +    int type = _type(identity);
   
       if (DTM.ELEMENT_NODE == type)
       {
  -
         // Assume that attributes and namespaces immediately follow the element.
  -      int identity = makeNodeIdentity(nodeHandle);
  -
         while (DTM.NULL != (identity = getNextNodeIdentity(identity)))
         {
   
  @@ -1057,7 +1064,7 @@
   
           if (type == DTM.ATTRIBUTE_NODE)
           {
  -          return makeNodeHandle(identity);
  +          return identity;
           }
           else if (DTM.NAMESPACE_NODE != type)
           {
  @@ -1163,28 +1170,35 @@
      * @return int DTM node-number of the resolved attr,
      * or DTM.NULL to indicate none exists.
      */
  -  public int getNextAttribute(int nodeHandle)
  -  {
  -
  -    int type = getNodeType(nodeHandle);
  +  public int getNextAttribute(int nodeHandle) {
  +    int nodeID = makeNodeIdentity(nodeHandle);
   
  -    if (DTM.ATTRIBUTE_NODE == type)
  -    {
  -      // Assume that attributes and namespace nodes immediately follow the element.
  -      int identity = makeNodeIdentity(nodeHandle);
  +    if (_type(nodeID) == DTM.ATTRIBUTE_NODE) {
  +      return makeNodeHandle(getNextAttributeIdentity(nodeID));
  +    }
   
  -      while (DTM.NULL != (identity = getNextNodeIdentity(identity)))
  -      {
  -        type = _type(identity);
  +    return DTM.NULL;
  +  }
   
  -        if (type == DTM.ATTRIBUTE_NODE)
  -        {
  -          return makeNodeHandle(identity);
  -        }
  -        else if (type != DTM.NAMESPACE_NODE)
  -        {
  -          break;
  -        }
  +  /**
  +   * Given a node identity for an attribute, advance to the next attribute.
  +   *
  +   * @param identity int identity of the attribute node.  This
  +   * <strong>must</strong> be an attribute node.
  +   *
  +   * @return int DTM node-identity of the resolved attr,
  +   * or DTM.NULL to indicate none exists.
  +   *
  +   */
  +  protected int getNextAttributeIdentity(int identity) {
  +    // Assume that attributes and namespace nodes immediately follow the element
  +    while (DTM.NULL != (identity = getNextNodeIdentity(identity))) {
  +      int type = _type(identity);
  +
  +      if (type == DTM.ATTRIBUTE_NODE) {
  +        return identity;
  +      } else if (type != DTM.NAMESPACE_NODE) {
  +        break;
         }
       }
   
  
  
  
  1.12.2.9  +6 -3      
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java
  
  Index: DTMDefaultBaseIterators.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java,v
  retrieving revision 1.12.2.8
  retrieving revision 1.12.2.9
  diff -u -r1.12.2.8 -r1.12.2.9
  --- DTMDefaultBaseIterators.java      8 Dec 2002 12:08:14 -0000       1.12.2.8
  +++ DTMDefaultBaseIterators.java      17 Dec 2002 19:06:41 -0000      1.12.2.9
  @@ -943,7 +943,7 @@
         if (_isRestartable)
         {
           _startNode = node;
  -        _currentNode = getFirstAttribute(node);
  +        _currentNode = getFirstAttributeIdentity(makeNodeIdentity(node));
   
           return resetPosition();
         }
  @@ -961,9 +961,12 @@
   
         final int node = _currentNode;
   
  -      _currentNode = getNextAttribute(node);
  +      if (node != NULL) {
  +        _currentNode = getNextAttributeIdentity(node);
  +        return returnNode(makeNodeHandle(node));
  +      }
   
  -      return returnNode(node);
  +      return NULL;
       }
     }  // end of AttributeIterator
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to