mkwan       2002/12/04 12:43:30

  Modified:    java/src/org/apache/xalan/serialize Encodings.java
  Log:
  Commit Gordon Chiu's ([EMAIL PROTECTED]) patch for performance improvement
  in the Encodings class. The convertJava2MimeEncoding() and getLastPrintable()
  methods can be called many times. The old code walks through a big array and
  do String comparison to find a match. A Hashtable is now used to speed up
  this processing.
  
  Revision  Changes    Path
  1.14      +21 -20    
xml-xalan/java/src/org/apache/xalan/serialize/Encodings.java
  
  Index: Encodings.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/serialize/Encodings.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Encodings.java    22 Nov 2002 20:14:57 -0000      1.13
  +++ Encodings.java    4 Dec 2002 20:43:30 -0000       1.14
  @@ -65,6 +65,7 @@
   import java.net.URL;
   
   import java.util.Enumeration;
  +import java.util.Hashtable;
   import java.util.Properties;
   import java.util.StringTokenizer;
   
  @@ -198,14 +199,14 @@
      */
     public static int getLastPrintable(String encoding)
     {
  -
  -    for (int i = 0; i < _encodings.length; ++i)
  -    {
  -      if (_encodings[i].name.equalsIgnoreCase(encoding)
  -              || _encodings[i].javaName.equalsIgnoreCase(encoding))
  -        return _encodings[i].lastPrintable;
  -    }
  -
  +    EncodingInfo ei;
  +    
  +    String normalizedEncoding = encoding.toUpperCase();
  +    ei = (EncodingInfo)_encodingTableKeyJava.get(normalizedEncoding);    
  +    if (ei == null)
  +      ei = (EncodingInfo)_encodingTableKeyMime.get(normalizedEncoding);
  +    if (ei != null)
  +      return ei.lastPrintable;
       return m_defaultLastPrintable;
     }
   
  @@ -298,15 +299,9 @@
      */
     public static String convertJava2MimeEncoding(String encoding)
     {
  -
  -    for (int i = 0; i < _encodings.length; ++i)
  -    {
  -      if (_encodings[i].javaName.equalsIgnoreCase(encoding))
  -      {
  -        return _encodings[i].name;
  -      }
  -    }
  -
  +    EncodingInfo enc = 
(EncodingInfo)_encodingTableKeyJava.get(encoding.toUpperCase());
  +    if (null != enc)
  +      return enc.name;
       return encoding;
     }
   
  @@ -415,9 +410,13 @@
           {      
             lastPrintable = 
Integer.decode(val.substring(pos).trim()).intValue();
             StringTokenizer st = new StringTokenizer(val.substring(0, 
pos),",");
  -          while (st.hasMoreTokens()) {
  +          for (boolean first = true; st.hasMoreTokens(); first = false) {
                  mimeName = st.nextToken();
  -               ret [j++] = new EncodingInfo (mimeName, javaName, 
lastPrintable);                         
  +               ret [j] = new EncodingInfo (mimeName, javaName, 
lastPrintable);                         
  +               _encodingTableKeyMime.put(mimeName.toUpperCase(), ret[j]);    
           
  +               if (first)
  +                 _encodingTableKeyJava.put(javaName.toUpperCase(), ret[j]);
  +               j++;
             }
           }        
         }
  @@ -430,5 +429,7 @@
       }
     }
   
  +  private static final Hashtable _encodingTableKeyJava = new Hashtable();
  +  private static final Hashtable _encodingTableKeyMime = new Hashtable();  
     private static final EncodingInfo[] _encodings = loadEncodingInfo();
   }
  
  
  

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

Reply via email to