jkesselm    2002/09/30 08:33:22

  Modified:    java/src/org/apache/xml/dtm/ref Tag: xslt20
                        DTMAxisIteratorBase.java
                        DTMDefaultBaseTraversers.java
                        DTMManagerDefault.java
               java/src/org/apache/xml/dtm/ref/dom2dtm Tag: xslt20
                        DOM2DTMdefaultNamespaceDeclarationNode.java
  Log:
  Commiting the changes to enable trying out DOM2DTM2, an
  experimental version of DOM2DTM. To switch to that code, edit
  DTMManagerDefault and define the constant ATTEMPT_DOM2DTM2
  as true, then recompile. (It's checked in as
  false.)
  
  DOM2DTM2 is intended to be lighter weight
  than DOM2DTM (less memory consumption), to
  be even more incremental than DOM2DTM (it
  will build node mappings out-of-sequence)
  and to better handle repeated processing
  of the same Document tree (even if it has
  been altered between stylesheet invocations).
  
  DOM2DTM2 is *NOT* currently as fast as
  DOM2DTM in the basic benchmarks/conformance
  tests. Part of this is because we aren't
  caching as much data, part of it is because
  it has not yet been performance-tuned; I
  _know_ there's suboptimal code in some spots.
  
  Note that generated IDs will differ from those
  in DOM2DTM and SAX2DTM; that is not an error,
  though the conformance test currently reports
  it as one.
  
  There are a few genuine bugs.
  
  Highly experimental code. We'll see how it
  works out.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.5.16.1  +5 -1      
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMAxisIteratorBase.java
  
  Index: DTMAxisIteratorBase.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMAxisIteratorBase.java,v
  retrieving revision 1.5
  retrieving revision 1.5.16.1
  diff -u -r1.5 -r1.5.16.1
  --- DTMAxisIteratorBase.java  7 Aug 2001 19:16:42 -0000       1.5
  +++ DTMAxisIteratorBase.java  30 Sep 2002 15:33:22 -0000      1.5.16.1
  @@ -238,7 +238,11 @@
      * <br />
      * would probably optimize just about as well and avoid questions
      * about whether what's returned could ever be different from what's
  -   * passed in.
  +   * passed in.. and
  +   * <br />
  +   * <code> _position++; return node; </code>
  +   * <br />
  +   * would avoid any risk of call-and-return overhead...
      *
      * @param node Node handle which iteration is about to yield.
      *
  
  
  
  1.11.2.1.2.1 +5 -1      
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseTraversers.java
  
  Index: DTMDefaultBaseTraversers.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseTraversers.java,v
  retrieving revision 1.11.2.1
  retrieving revision 1.11.2.1.2.1
  diff -u -r1.11.2.1 -r1.11.2.1.2.1
  --- DTMDefaultBaseTraversers.java     14 Aug 2002 19:45:34 -0000      1.11.2.1
  +++ DTMDefaultBaseTraversers.java     30 Sep 2002 15:33:22 -0000      
1.11.2.1.2.1
  @@ -1152,7 +1152,11 @@
         return getParent(context);
       }
     
  -    /**
  +    /**This is actually going to the nearest ancestor of the
  +     * specified type, not to the parent-if-it-has-this-type.
  +     * I suspect that's incorrect!
  +     * 
  +     * %REVIEW% 
        * By the nature of the stateless traversal, the context node can not be
        * returned or the iteration will go into an infinate loop.  So to 
traverse 
        * an axis, the first function must be used to get the first node.
  
  
  
  1.41.6.1.2.2 +50 -6     
xml-xalan/java/src/org/apache/xml/dtm/ref/DTMManagerDefault.java
  
  Index: DTMManagerDefault.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMManagerDefault.java,v
  retrieving revision 1.41.6.1.2.1
  retrieving revision 1.41.6.1.2.2
  diff -u -r1.41.6.1.2.1 -r1.41.6.1.2.2
  --- DTMManagerDefault.java    26 Aug 2002 17:58:05 -0000      1.41.6.1.2.1
  +++ DTMManagerDefault.java    30 Sep 2002 15:33:22 -0000      1.41.6.1.2.2
  @@ -73,12 +73,13 @@
   import org.apache.xml.utils.SystemIDResolver;
   import org.apache.xml.dtm.ref.dom2dtm.DOM2DTM;
   import org.apache.xml.dtm.ref.sax2dtm.SAX2DTM;
  -//import org.apache.xml.dtm.ref.sax2dtm.SAX2RTFDTM;
   
   /**************************************************************/
   // EXPERIMENTAL 3/22/02
   import org.apache.xml.dtm.ref.xni2dtm.XNI2DTM;
   import org.apache.xml.dtm.ref.xni2dtm.XNISource;
  +// EXPERIMENTAL 9/18/02
  +import org.apache.xml.dtm.dom2dtm2.DOM2DTM2;
   /**************************************************************/
   
   // W3C DOM
  @@ -122,6 +123,12 @@
    * */
   public class DTMManagerDefault extends DTMManager
   {
  +  // Set true to attempt loading DOMs via our experimental
  +  // DOM2DTM2 wrapper. If false, or if that fails, we fall
  +  // back on standard DOM2DTM.
  +  private static final boolean ATTEMPT_DOM2DTM2=false;       
  +     
  +     
     /** Set this to true if you want a dump of the DTM after creation. */
     private static final boolean DUMPTREE = false;
   
  @@ -287,11 +294,23 @@
       if (source instanceof DOMSource)
       {
         // Simplest case: Wrap a DTM around an existing DOM.
  -      //
  -      // %REVIEW% May get more complicated if we start trying to match
  -      // DOM2DTM implementations against specific DOM implementations,
  -      // eg taking advantage of a particular DOM's hashability or
  -      // userData hooks.
  +      if(ATTEMPT_DOM2DTM2)
  +      {
  +             DTM dtm;        
  +             try
  +             {
  +           dtm = new DOM2DTM2(this, source, documentID,
  +                                whiteSpaceFilter, xstringFactory, 
doIndexing);
  +             } catch(ClassCastException e)
  +             {
  +           dtm = new DOM2DTM(this, (DOMSource) source, documentID,
  +                                whiteSpaceFilter, xstringFactory, 
doIndexing);
  +             }
  +         addDTM(dtm, dtmPos, 0);
  +        return dtm;
  +      }
  +
  +
         DOM2DTM dtm = new DOM2DTM(this, (DOMSource) source, documentID,
                                   whiteSpaceFilter, xstringFactory, 
doIndexing);
         addDTM(dtm, dtmPos, 0);
  @@ -836,6 +855,31 @@
       {
         if(nodeHandle==DTM.NULL)
                                return null;            // Accept as a special 
case.
  +      else
  +                             throw e;                // Programming error; 
want to know about it.
  +    }    
  +  }
  +  
  +  /**
  +   * Return the offset between this DTM Handle and the internal
  +   * node identifier. May be used by makeNodeIdentity to obtain
  +   * the high-order bits of that identifier.
  +   *
  +   * @param nodeHandle DTM Handle indicating which node to retrieve
  +   *
  +   * @return a reference to the DTM object containing this node.
  +   */
  +  synchronized public int getDTMoffset(int nodeHandle)
  +  {
  +    try
  +    {
  +      // Performance critical function.
  +      return m_dtm_offsets[nodeHandle >>> IDENT_DTM_NODE_BITS];
  +    }
  +    catch(java.lang.ArrayIndexOutOfBoundsException e)
  +    {
  +      if(nodeHandle==DTM.NULL)
  +                             return DTM.NULL;                // Accept as a 
special case.
         else
                                throw e;                // Programming error; 
want to know about it.
       }    
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.2.16.1  +27 -3     
xml-xalan/java/src/org/apache/xml/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java
  
  Index: DOM2DTMdefaultNamespaceDeclarationNode.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java,v
  retrieving revision 1.2
  retrieving revision 1.2.16.1
  diff -u -r1.2 -r1.2.16.1
  --- DOM2DTMdefaultNamespaceDeclarationNode.java       18 Dec 2001 21:55:33 
-0000      1.2
  +++ DOM2DTMdefaultNamespaceDeclarationNode.java       30 Sep 2002 15:33:22 
-0000      1.2.16.1
  @@ -85,15 +85,29 @@
     
     Element pseudoparent;
     String prefix,uri,nodename;
  -  int handle;
  -  DOM2DTMdefaultNamespaceDeclarationNode(Element pseudoparent,String 
prefix,String uri,int handle)
  +  int handle, id;
  +  
  +  public DOM2DTMdefaultNamespaceDeclarationNode(Element pseudoparent,String 
prefix,String uri,int handle)
     {
       this.pseudoparent=pseudoparent;
       this.prefix=prefix;
       this.uri=uri;
       this.handle=handle;
       this.nodename="xmlns:"+prefix;
  +    this.id=DTM.NULL; // %BUG% %REVIEW%
     }
  +
  +  public DOM2DTMdefaultNamespaceDeclarationNode(Element pseudoparent,String 
prefix,String uri,int handle,int id)
  +  {
  +    this.pseudoparent=pseudoparent;
  +    this.prefix=prefix;
  +    this.uri=uri;
  +    this.handle=handle;
  +    this.nodename="xmlns:"+prefix;
  +    this.id=id; // %BUG% %REVIEW%
  +  }
  +  
  +  
     public String getNodeName() {return nodename;}
     public String getName() {return nodename;}
     public String getNamespaceURI() {return "http://www.w3.org/2000/xmlns/";}
  @@ -127,13 +141,23 @@
     public Node cloneNode(boolean deep) {throw new 
DTMException(NOT_SUPPORTED_ERR);}
        
        /** Non-DOM method, part of the temporary kluge
  -      * %REVIEW% This would be a pruning problem, but since it will always be
  +      * %REVIEW% This could be a pruning problem, but since it will always be
         * added to the root element and we prune on elements, we shouldn't 
have 
         * to worry.
         */
        public int getHandleOfNode()            
        {
                return handle;
  +     }
  +     
  +     /** Non-DOM method, part of the temporary kluge
  +      * %REVIEW% This would be a pruning problem, but since it will always be
  +      * added to the root element and we prune on elements, we shouldn't 
have 
  +      * to worry.
  +      */
  +     public int getIDOfNode()                
  +     {
  +             return id;
        }
   }
   
  
  
  

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

Reply via email to