You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by jk...@apache.org on 2002/06/01 02:23:23 UTC
cvs commit: xml-xalan/java/src/org/apache/xml/utils CharacterBlockEnumeration.java FastStringBuffer.java CharacterBlockEnumeration
jkesselm 2002/05/31 17:23:23
Modified: java/src/org/apache/xml/utils Tag: Xalan3
CharacterBlockEnumeration.java
FastStringBuffer.java
Removed: java/src/org/apache/xml/utils Tag: Xalan3
CharacterBlockEnumeration
Log:
FastStringBuffer changes for CharacterBlockEnumeration.
Revision Changes Path
No revision
No revision
1.1.2.2 +3 -1 xml-xalan/java/src/org/apache/xml/utils/Attic/CharacterBlockEnumeration.java
Index: CharacterBlockEnumeration.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/utils/Attic/CharacterBlockEnumeration.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- CharacterBlockEnumeration.java 31 May 2002 20:58:05 -0000 1.1.2.1
+++ CharacterBlockEnumeration.java 1 Jun 2002 00:23:23 -0000 1.1.2.2
@@ -90,6 +90,8 @@
protected int _length;
protected String _string=null;
+ static final protected char[] EMPTY=new char[0];
+
/** Create an empty enumeration. */
public CharacterBlockEnumeration()
{
@@ -217,7 +219,7 @@
if(_string!=null)
_chars=_string.toCharArray();
else
- _chars=new char[0];
+ _chars=EMPTY;
}
return _chars;
}
1.19.2.1 +158 -0 xml-xalan/java/src/org/apache/xml/utils/FastStringBuffer.java
Index: FastStringBuffer.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/utils/FastStringBuffer.java,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -r1.19 -r1.19.2.1
--- FastStringBuffer.java 22 Apr 2002 19:26:02 -0000 1.19
+++ FastStringBuffer.java 1 Jun 2002 00:23:23 -0000 1.19.2.1
@@ -1373,4 +1373,162 @@
source.m_chunkSize = 1 << (source.m_chunkBits);
source.m_chunkMask = source.m_chunkSize - 1;
}
+
+ /** Support for DTM2XNI. Rather than push XNI awareness into this class,
+ * (as we did for SAX in sendSAX*), yield the content in a reasonably
+ * efficient manner for the caller to pass along.
+ * */
+ public CharacterBlockEnumeration enumerateCharacterBlocks(int start, int length)
+ {
+ return new FSBCharacterBlockEnumeration(start,length);
+ }
+
+ /** Support for DTM2XNI. Rather than push XNI awareness into this class,
+ * (as we did for SAX in sendSAX*), yield the content in a reasonably
+ * efficient manner for the caller to pass along.
+ *
+ * %BUG% %REVIEW% Currently does _NOT_ support inner FSBs.
+ * We need to either rearchitect those or get rid of 'em...
+ * */
+ protected class FSBCharacterBlockEnumeration
+ extends CharacterBlockEnumeration
+ {
+ int f_remaining;
+ int f_chunk;
+
+ FSBCharacterBlockEnumeration(int start,int length)
+ {
+ if(m_innerFSB!=null)
+ throw new UnsupportedOperationException("Can't handle innerFSBs yet");
+
+ int l=length();
+ if(start>l)
+ {
+ // Don't start off end -- take that as empty
+ _start=_length=f_remaining=0;
+ _chars=m_array[0];
+ }
+ else
+ {
+ // Don't run off end -- truncate to fit
+ l-=start;
+ f_remaining = (l>length) ? length : l;
+
+ // Set up first chunk
+ f_chunk=start>>>m_chunkBits;
+
+ _start=start & m_chunkMask;
+
+ l=m_chunkSize-start;
+ _length = (l>f_remaining) ? f_remaining : l;
+
+ f_remaining -= _length;
+ }
+ }
+
+ /** Not supported in this implementaton */
+ public FSBCharacterBlockEnumeration()
+ {
+ throw new UnsupportedOperationException("Not supported in this implementaton");
+ }
+
+ /** Not supported in this implementaton */
+ public FSBCharacterBlockEnumeration(String s)
+ {
+ throw new UnsupportedOperationException("Not supported in this implementaton");
+ }
+
+ /** Not supported in this implementaton */
+ public FSBCharacterBlockEnumeration(String s, int start, int length)
+ {
+ throw new UnsupportedOperationException("Not supported in this implementaton");
+ }
+
+ /** Not supported in this implementaton */
+ public FSBCharacterBlockEnumeration(char[] ch)
+ {
+ throw new UnsupportedOperationException("Not supported in this implementaton");
+ }
+
+ /** Not supported in this implementaton */
+ public FSBCharacterBlockEnumeration(char[] ch, int start, int length)
+ {
+ throw new UnsupportedOperationException("Not supported in this implementaton");
+ }
+
+ /** @return true if another character block can be accessed by calling
+ * nextElement()
+ */
+ public boolean hasMoreElements()
+ {
+ return f_remaining>0;
+ }
+
+ /** Advance to the next character block.
+ *
+ * @returns either this CharacterBlockEnumeration object (as a
+ * transient accessor to the "element") or null if no more elements are available.
+ * This is a bit of a kluge, but it allows us to claim that we
+ * implement the Java Enumeration interface if we want to do so, and
+ * it seems to be as good or bad as any other return value.
+ * */
+ public Object nextElement()
+ {
+ if(f_remaining==0)
+ return null;
+
+ // Next chunk
+ ++f_chunk;
+ _start=0;
+ _length = (m_chunkSize>f_remaining) ? f_remaining : m_chunkSize;
+ f_remaining -= _length;
+ return this;
+ }
+
+
+ /** @return the starting offset in the current block's character array
+ * */
+ public int getStart()
+ {
+ return _start;
+ }
+
+ /** @return the length of the the current block
+ * */
+ public int getLength()
+ {
+ return _length;
+ }
+
+ /**
+ * @return the current block's character array. Data will begin at
+ * offset {start}.
+ * */
+ public char[] getChars()
+ {
+ char[] ch=(_length>0)
+ ? m_array[f_chunk]
+ : EMPTY;
+ return ch;
+ }
+
+ /** @param target A char[] to be copied into. If a buffer is not supplied
+ * we will create one.
+ *
+ * @param targetStart Offset in the target at which copying should begin.
+ *
+ * @return the buffer, filled with {length} characters starting at offset
+ * {targetStart}. Characters before or after that block should be unaffected.
+ * */
+ public char[] getChars(char[] target, int targetStart)
+ {
+ if(_length>0)
+ {
+ System.arraycopy(m_array[f_chunk],_start,target,targetStart,_length);
+ }
+
+ return target;
+ }
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org