pbwest      2004/01/14 08:11:23

  Modified:    src/java/org/apache/fop/xml Tag: FOP_0-20-0_Alt-Design
                        XMLNamespaces.java
  Log:
  Variable name changes and other changes to support UriLocalName pool
  Use org.apache.fop.pool package classes
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.5   +87 -39    xml-fop/src/java/org/apache/fop/xml/Attic/XMLNamespaces.java
  
  Index: XMLNamespaces.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/xml/Attic/XMLNamespaces.java,v
  retrieving revision 1.1.2.4
  retrieving revision 1.1.2.5
  diff -u -r1.1.2.4 -r1.1.2.5
  --- XMLNamespaces.java        10 Jan 2004 06:29:50 -0000      1.1.2.4
  +++ XMLNamespaces.java        14 Jan 2004 16:11:22 -0000      1.1.2.5
  @@ -50,10 +50,11 @@
   
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.datastructs.SyncedCircularBuffer;
  +import org.apache.fop.pool.*;
   
   /**
  - * Maintains the namespaces encountered by an invocation of 
<tt>XMLSerialHandler</tt>.
  - * <p>
  + * Maintains the namespaces encountered by an invocation of
  + *  <tt>XMLSerialHandler</tt>.
    * One instance of <i>XMLNamespaces</i> is maintained across all documents
    * that may be processed in a single invocation of <tt>XMLSerialhandler</tt>.
    * A reference to that instance is kept with every instance of <tt>XMLEvent</tt>.
  @@ -84,6 +85,12 @@
       public static final String SVGNamespace = "http://www.w3.org/2000/svg";;
   
       public static final int NO_NAMESPACE = -1;
  +    
  +    /**
  +     * Generic undefined type for namespace-specific event types.
  +     */
  +    public static final int NO_NS_TYPE = -1;
  +    
       /** Index for associated namespace */
       public static final int  DefAttrNSIndex = 0
                                  ,XSLNSpaceIndex = 1
  @@ -119,20 +126,31 @@
        * namespace active in the current document.
        */
       private XMLEventPool[] pools = new XMLEventPool[LAST_NS_INDEX + 1];
  +    
  +    /**
  +     * The pool for <code>UriLocalName</code> objects.
  +     */
  +    private UriLocalNamePool uriLocalNamePool;
   
       /**
  -     * Sequence objects for use by <tt>XMLEvent</tt>s. Because an
  +     * Sequenced objects for use by <tt>XMLEvent</tt>s. Because an
        * <tt>XMLEvent</tt> object must always be associated with an
        * <i>XMLNamespace</i> object, this namespace object will act as a
        * singleton for <tt>XMLEvent</tt>s. This field provides a counter for
        * those objects. The range of values which may be assigned to
  -     * <i>sequence</i> is restricted by <i>seqMask</i>.
  +     * <i>nsSequences</i> is restricted by <i>nsSeqMasks</i>.
  +     */
  +    private int nsSequences[] = new int[LAST_NS_INDEX + 1];
  +    
  +    /**
  +     * This field is used to provide sequence numbers for
  +     * <code>Poolable UriLocalName</code> objects.
        */
  -    private int sequence[] = new int[LAST_NS_INDEX + 1];
  +    private int uriLocalSeq = 0;
   
       /**
  -     * Number of bits in the sequence mask for the associated namespace.
  -     * This value will determine the number of sequence values the pool
  +     * Number of bits in the nsSequences mask for the associated namespace.
  +     * This value will determine the number of nsSequences values the pool
        * for the associated namespace will track.
        */
       private static final int DEF_ATTR_SEQ_BITS = 14
  @@ -142,39 +160,46 @@
                                  ;
   
       /**
  -     * Masks to restrict the range of values within which the sequence value
  +     * Masks to restrict the range of values within which the nsSequences value
        * for each namespace may cycle.
        */
  -    private final int[] seqMask =
  +    private final int[] nsSeqMasks =
           {
               (1 << DEF_ATTR_SEQ_BITS) - 1
               ,(1 << FO_SEQ_BITS) - 1
               ,(1 << FOX_SEQ_BITS) - 1
               ,(1 << SVG_SEQ_BITS) - 1 };
  +    
  +    /**
  +     * Mask to restrict the range of values within which uriLocalSeq will
  +     * cycle.
  +     */
  +    private final int uriLocalSeqMask = (1 << FO_SEQ_BITS) - 1;
   
       public XMLNamespaces() {
           for (int i = 0; i <= LAST_NS_INDEX; i++) {
               pools[i] = null;
  -            sequence[i] = 0;
  +            nsSequences[i] = 0;
           }
           pools[DefAttrNSIndex] =
  -            new XMLEventPool(this, INITIAL_DEF_ATTR_NS_POOL_SIZE);
  +            new XMLEventPool(INITIAL_DEF_ATTR_NS_POOL_SIZE);
           pools[XSLNSpaceIndex] =
  -            new XMLEventPool(this, INITIAL_XSL_NS_POOL_SIZE);
  +            new XMLEventPool(INITIAL_XSL_NS_POOL_SIZE);
           pools[FOXNSpaceIndex] =
  -            new XMLEventPool(this, INITIAL_FOX_NS_POOL_SIZE);
  +            new XMLEventPool(INITIAL_FOX_NS_POOL_SIZE);
           pools[SVGNSpaceIndex] =
  -            new XMLEventPool(this, INITIAL_SVG_NS_POOL_SIZE);
  +            new XMLEventPool(INITIAL_SVG_NS_POOL_SIZE);
  +        uriLocalNamePool = new UriLocalNamePool(BUFFER_SIZE);
       }
       
       /**
  -     * The increment access function for the sequence associated with the given
  +     * The increment access function for the nsSequences associated with the given
        * URI index.
        * 
        * @param nsIndex
        *            the namespace index
  -     * @return the next positive sequence number. This number may wrap but is
  -     *         guaranteed to be within the range seqMask >= sequence >= 0.
  +     * @return the next positive nsSequences number. This number may wrap but is
  +     *         guaranteed to be within the range nsSeqMasks >= nsSequences >= 0.
        * @throws FOPException
        *             if the namespace index is out of range
        */
  @@ -183,19 +208,19 @@
               throw new FOPException(
                   "Namespace index " + nsIndex + " out of range.");
           }
  -        synchronized (sequence) {
  -            sequence[nsIndex] = ++sequence[nsIndex] & seqMask[nsIndex];
  -            return sequence[nsIndex];
  +        synchronized (nsSequences) {
  +            nsSequences[nsIndex] = ++nsSequences[nsIndex] & nsSeqMasks[nsIndex];
  +            return nsSequences[nsIndex];
           }
       }
   
       /**
  -     * The access function for the sequence associated with the given URI
  +     * The access function for the nsSequences associated with the given URI
        * index.
        * 
        * @param nsIndex
        *            the namespace index
  -     * @return the current sequence number
  +     * @return the current nsSequences number
        * @throws FOPException
        *             if the index is out of range
        */
  @@ -204,7 +229,7 @@
               throw new FOPException(
                   "Namespace index " + nsIndex + " out of range.");
           }
  -        return sequence[nsIndex];
  +        return nsSequences[nsIndex];
       }
   
       /**
  @@ -270,16 +295,19 @@
           // The only currently known subclass of XMLEvent is FoXMLEvent
           switch (nsIndex) {
           case DefAttrNSIndex :
  -            // Produce an FoXMLEvent, e.g. for START_DOCUMENT
  -            // Note that FoXMLSerialHandler set the URI index for
  -            // CHARACTERS events.
  -            // This is problematical, but non-FO events can carry the
  -            // NO_FO type.  I think.
  +            // Produce an XMLEvent, e.g. for START_DOCUMENT and, more
  +            // importantly, CHARACTERS.
  +            synchronized (nsSequences) {
  +                nsSequences[nsIndex] =
  +                    ++nsSequences[nsIndex] & nsSeqMasks[nsIndex];
  +                return new XMLEvent(this, nsSequences[nsIndex], nsIndex);
  +            }
           case XSLNSpaceIndex :
               // Make an FoXMLEvent
  -            synchronized (sequence) {
  -                sequence[nsIndex] = ++sequence[nsIndex] & seqMask[nsIndex];
  -                return new FoXMLEvent(this, sequence[nsIndex]);
  +            synchronized (nsSequences) {
  +                nsSequences[nsIndex] =
  +                    ++nsSequences[nsIndex] & nsSeqMasks[nsIndex];
  +                return new FoXMLEvent(this, nsSequences[nsIndex], nsIndex);
               }
           case FOXNSpaceIndex :
               // No FoxXMLEvent defined - don't break, but fall through
  @@ -287,9 +315,10 @@
               // No SvgXMLEvent defined - don't break, but fall through
           default :
               // Just produce a raw XMLEvent
  -            synchronized (sequence) {
  -                sequence[nsIndex] = ++sequence[nsIndex] & seqMask[nsIndex];
  -                return new XMLEvent(this, sequence[nsIndex]);
  +            synchronized (nsSequences) {
  +                nsSequences[nsIndex] =
  +                    ++nsSequences[nsIndex] & nsSeqMasks[nsIndex];
  +                return new XMLEvent(this, nsSequences[nsIndex], nsIndex);
               }
           }
       }
  @@ -318,17 +347,36 @@
        * @param event to surrender
        */
       public void surrenderEvent(XMLEvent event) {
  -        pools[event.uriIndex].surrenderEvent(event);
  +        pools[event.uriIndex].surrenderPoolable(event);
       }
   
       /**
  +     * Acquire a <code>UriLocalName</code> from the pool, or null if no
  +     * pooled names exist.
  +     * 
  +     * @return a <tt>UriLocalName</tt> or null.
  +     */
  +    public UriLocalName acquireUriLocalName() {
  +        return uriLocalNamePool.acquireUriLocalName();
  +    }
  +    
  +    /**
  +     * Surrender a <code>UriLocalName</code>.
  +     * The name is returned to the pool.
  +     * @param uriName to surrender
  +     */
  +    public void surrenderUriLocalName(UriLocalName uriName) {
  +        uriLocalNamePool.surrenderPoolable(uriName);
  +    }
  +    
  +    /**
        * Get the size of the event pool for a given namespace.
        * 
        * @param nsIndex
        *            the index of the namespace
        * @return pool size.
        */
  -    public int getPoolSize(int nsIndex) {
  +    public int getNSPoolSize(int nsIndex) {
           return pools[nsIndex].getPoolSize();
       }
   
  
  
  

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

Reply via email to