mkwan       2003/03/07 12:38:54

  Modified:    java/src/org/apache/xalan/xsltc/runtime Tag: XSLTC_DTM
                        StringValueHandler.java
  Log:
  XSLTC_DTM performance work
  Use a more sophisticated algorithm in StringValueHandler.
  Do not create new Strings if there is only String value.
  Creating many new Strings is an expensive operation.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.3.2.5   +33 -4     
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/StringValueHandler.java
  
  Index: StringValueHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/StringValueHandler.java,v
  retrieving revision 1.3.2.4
  retrieving revision 1.3.2.5
  diff -u -r1.3.2.4 -r1.3.2.5
  --- StringValueHandler.java   30 Jan 2003 18:41:49 -0000      1.3.2.4
  +++ StringValueHandler.java   7 Mar 2003 20:38:54 -0000       1.3.2.5
  @@ -68,12 +68,16 @@
   
   public final class StringValueHandler extends TransletOutputBase {
   
  -    private char[] _buffer = new char[32];
  -    private int _free = 0;
  +    //private char[] _buffer = new char[32];
  +    private StringBuffer _buffer = new StringBuffer();
  +    private String _str = null;
  +    private static final String EMPTY_STR = "";
  +    //private int _free = 0;
        
       public void characters(char[] ch, int off, int len) 
        throws TransletException 
       {
  +     /*
        if (_free + len >= _buffer.length) {
            char[] newBuffer = new char[_free + len + 32];
            System.arraycopy(_buffer, 0, newBuffer, 0, _free);
  @@ -81,16 +85,41 @@
        }
        System.arraycopy(ch, off, _buffer, _free, len);
        _free += len;
  +     */
  +     _buffer.append(ch, off, len);
       }
   
       public String getValue() {
  +     /*
        final int length = _free;
        _free = 0;              // getValue resets
        return new String(_buffer, 0, length);
  +     */
  +     if (_buffer.length() != 0) {
  +         String result = _buffer.toString();
  +         _buffer.setLength(0);
  +         return result;
  +     }
  +     else {
  +         String result = _str;
  +         _str = null;
  +         return (result != null) ? result : EMPTY_STR;
  +     }
       }
   
       public void characters(String characters) throws TransletException {
  -     characters(characters.toCharArray(), 0, characters.length());
  +     //characters(characters.toCharArray(), 0, characters.length());
  +     if (_str == null && _buffer.length() == 0) {
  +         _str = characters;
  +     }
  +     else {
  +         if (_str != null) {
  +             _buffer.append(_str);
  +             _str = null;
  +         }
  +         
  +         _buffer.append(characters);
  +     }
       }
   
       /**
  
  
  

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

Reply via email to