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]