sboag       00/11/06 12:57:22

  Modified:    java/src/org/apache/xpath/axes LocPathIterator.java
  Log:
  Save the variable stack search context when initContext is called,
  and restore the state every time next node is called.  Another performance
  issue.
  
  Revision  Changes    Path
  1.9       +21 -1     
xml-xalan/java/src/org/apache/xpath/axes/LocPathIterator.java
  
  Index: LocPathIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/LocPathIterator.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- LocPathIterator.java      2000/11/03 23:28:15     1.8
  +++ LocPathIterator.java      2000/11/06 20:57:20     1.9
  @@ -86,6 +86,7 @@
   import org.apache.xalan.utils.ObjectPool;
   import org.apache.xpath.objects.XNodeSet;
   import org.apache.xpath.axes.AxesWalker;
  +import org.apache.xpath.VariableStack;
   
   /**
    * <meta name="usage" content="advanced"/>
  @@ -219,7 +220,13 @@
   
       return null;
     }
  +  
  +  /** NEEDSDOC Method initContext **/
  +  private int m_varStackPos;
   
  +  /** NEEDSDOC Method initContext **/
  +  private int m_varStackContext;
  +
     /**
      * NEEDSDOC Method initContext 
      *
  @@ -234,6 +241,9 @@
       this.m_execContext = execContext;
       this.m_prefixResolver = execContext.getNamespaceContext();
       this.m_dhelper = execContext.getDOMHelper();
  +    VariableStack vars = execContext.getVarStack();
  +    this.m_varStackPos = vars.getSearchStart();
  +    this.m_varStackContext = vars.getContextPos();
     }
   
     /**
  @@ -579,6 +589,11 @@
         return next;
       }
   
  +    VariableStack vars = m_execContext.getVarStack();
  +    int savedStart = vars.getSearchStart();
  +    vars.setSearchStart(m_varStackPos);
  +    vars.pushContextPosition(m_varStackContext);
  +    
       if (null == m_firstWalker.getRoot())
       {
         this.setNextPosition(0);
  @@ -586,8 +601,13 @@
   
         m_lastUsedWalker = m_firstWalker;
       }
  +    
  +    Node n = returnNextNode(m_firstWalker.nextNode());
  +    
  +    vars.setSearchStart(savedStart);
  +    vars.popContextPosition();
   
  -    return returnNextNode(m_firstWalker.nextNode());
  +    return n;
     }
   
     /**
  
  
  

Reply via email to