org.apache.xerces.utils
Class CharDataChunk

java.lang.Object
  |
  +--org.apache.xerces.utils.CharDataChunk
All Implemented Interfaces:
StringPool.StringProducer

public final class CharDataChunk
extends java.lang.Object
implements StringPool.StringProducer

This class provides the character buffers used by some of the reader classes. The instances of this class are reference counted and placed upon a free list for reallocation when no longer in use so that they are reclaimed faster and with less overhead than using the garbage collector.

Version:
 

Field Summary
static int CHUNK_MASK
           
static int CHUNK_SHIFT
          Chunk size constants The reader classes use the chunk size directly for better performance.
static int CHUNK_SIZE
           
 
Method Summary
 int addString(int offset, int length)
          Add a range from this chunk to the StringPool
 int addSymbol(int offset, int length, int hashcode)
          Add a range from this chunk to the StringPool as a symbol
 void append(XMLEntityHandler.CharBuffer charBuffer, int offset, int length)
          Append data from a CharBuffer to this chunk.
 CharDataChunk chunkFor(int offset)
          Return the instance that contains the specified offset.
 boolean clearPreviousChunk()
          Clean the previous chunk reference.
static CharDataChunk createChunk(StringPool stringPool, CharDataChunk prev)
          Public constructor (factory) If there are any free instances available, remove them from the free list and reinitialize them.
 boolean equalsString(int offset, int length, char[] strChars, int strOffset, int strLength)
          Compare a range in this chunk and a range in a character array for equality
 CharDataChunk nextChunk()
          Get the next chunk.
 void releaseChunk()
          Release the reference to this chunk held by the reader that allocated this instance.
 void releaseString(int offset, int length)
          Release a string from this chunk
 void setCharArray(char[] data)
          Set the character array for this instance.
 char[] toCharArray()
          Get the character array of this instance.
 java.lang.String toString(int offset, int length)
          Return a range of characters as a String.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CHUNK_SHIFT

public static final int CHUNK_SHIFT
Chunk size constants The reader classes use the chunk size directly for better performance.

CHUNK_SIZE

public static final int CHUNK_SIZE

CHUNK_MASK

public static final int CHUNK_MASK
Method Detail

createChunk

public static CharDataChunk createChunk(StringPool stringPool,
                                        CharDataChunk prev)
Public constructor (factory) If there are any free instances available, remove them from the free list and reinitialize them. If not, allocate a new one.
Parameters:
stringPool - The string pool.
prev - The chunk that precedes this one, or null if this is the first chunk.
Returns:
The instance reused or created.

chunkFor

public CharDataChunk chunkFor(int offset)
Return the instance that contains the specified offset. This method must always be invoked on an instance that contains the specified offset, or an instance the contains an offset greater than, i.e. after, the instance we are to return.
Parameters:
offset - The offset to find.
Returns:
The instance containing the offset.

toCharArray

public char[] toCharArray()
Get the character array of this instance. The reader classes access the data of each instance directly. This class only exists to manage the lifetime of the references to each instance. It is not intended to hide from the readers the fact that each instance contains a buffer of character data.
Returns:
The character data.

setCharArray

public void setCharArray(char[] data)
Set the character array for this instance.
Parameters:
data - The character data.

nextChunk

public CharDataChunk nextChunk()
Get the next chunk.
Returns:
The instance that follows this one in the list of chunks, or null if there is no such instance.

clearPreviousChunk

public boolean clearPreviousChunk()
Clean the previous chunk reference. When a reader has reached a point where it knows that it will no longer call the addString, addSymbol, or append methods with an offset that is contained within a chunk that precedes this one, it will call this method to clear the reference from this chunk to the one preceding it. This allows the references between chunks to be dropped as we go and allow the unused instances to be placed upon the free list for reuse.
Returns:
true if we cleared the previous chunk pointer; otherwise false if the pointer is already null.

releaseChunk

public void releaseChunk()
Release the reference to this chunk held by the reader that allocated this instance. Called at end of input to release the last chunk in the list used by the reader.

addString

public int addString(int offset,
                     int length)
Add a range from this chunk to the StringPool
Parameters:
offset - the offset of the first character to be added
length - the number of characters to add
Returns:
the StringPool handle that was added.

addSymbol

public int addSymbol(int offset,
                     int length,
                     int hashcode)
Add a range from this chunk to the StringPool as a symbol
Parameters:
offset - the offset of the first character to be added
length - the number of characters to add
hashcode - hashcode to match to ensure uniqueness
Returns:
the StringPool handle that was added.

append

public void append(XMLEntityHandler.CharBuffer charBuffer,
                   int offset,
                   int length)
Append data from a CharBuffer to this chunk.
Parameters:
charBuffer - the buffer to be appended.
offset - the offset of the first character to be appended.
length - the number of characters to append.

toString

public java.lang.String toString(int offset,
                                 int length)
Return a range of characters as a String.
Specified by:
toString in interface StringPool.StringProducer
Parameters:
offset - the offset of the first character to convert.
length - the number of characters to convert.
Returns:
the String

releaseString

public void releaseString(int offset,
                          int length)
Release a string from this chunk
Specified by:
releaseString in interface StringPool.StringProducer
Parameters:
offset - the offset of the first character to be released
length - the number of characters to release.

equalsString

public boolean equalsString(int offset,
                            int length,
                            char[] strChars,
                            int strOffset,
                            int strLength)
Compare a range in this chunk and a range in a character array for equality
Specified by:
equalsString in interface StringPool.StringProducer
Parameters:
offset - the offset of the first character in the range in this chunk
length - the number of characters in the range to compare
strChars - the character array to compare
strOffset - the offset of the first character in the range in strChars
strLength - the number of characters to release.
Returns:
true if the ranges are character-wise equal, otherwise false.


Copyright 1999-2001 Apache XML Project. All Rights Reserved.