|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.xml.utils.SuballocatedByteVector
public class SuballocatedByteVector
A very simple table that stores a list of byte. Very similar API to our IntVector class (same API); different internal storage. This version uses an array-of-arrays solution. Read/write access is thus a bit slower than the simple IntVector, and basic storage is a trifle higher due to the top-level array -- but appending is O(1) fast rather than O(N**2) slow, which will swamp those costs in situations where long vectors are being built up. Known issues: Some methods are private because they haven't yet been tested properly. If an element has not been set (because we skipped it), its value will initially be 0. Shortening the vector does not clear old storage; if you then skip values and setElementAt a higher index again, you may see old data reappear in the truncated-and-restored section. Doing anything else would have performance costs.
Field Summary | |
---|---|
protected int |
m_blocksize
Size of blocks to allocate |
protected int |
m_firstFree
Number of bytes in array |
protected byte[][] |
m_map
Array of arrays of bytes |
protected byte[] |
m_map0
"Shortcut" handle to m_map[0] |
protected int |
m_numblocks
Number of blocks to (over)allocate by |
Constructor Summary | |
---|---|
SuballocatedByteVector()
Default constructor. |
|
SuballocatedByteVector(int blocksize)
Construct a ByteVector, using the given block size. |
|
SuballocatedByteVector(int blocksize,
int increaseSize)
Construct a ByteVector, using the given block size. |
Method Summary | |
---|---|
void |
addElement(byte value)
Append a byte onto the vector. |
private void |
addElements(byte value,
int numberOfElements)
Append several byte values onto the vector. |
private void |
addElements(int numberOfElements)
Append several slots onto the vector, but do not set the values. |
private boolean |
contains(byte s)
Tell if the table contains the given node. |
byte |
elementAt(int i)
Get the nth element. |
int |
indexOf(byte elem)
Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method. |
int |
indexOf(byte elem,
int index)
Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method. |
private void |
insertElementAt(byte value,
int at)
Inserts the specified node in this vector at the specified index. |
private int |
lastIndexOf(byte elem)
Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method. |
void |
removeAllElements()
Wipe it out. |
private boolean |
removeElement(byte s)
Removes the first occurrence of the argument from this vector. |
private void |
removeElementAt(int at)
Deletes the component at the specified index. |
void |
setElementAt(byte value,
int at)
Sets the component at the specified index of this vector to be the specified object. |
private void |
setSize(int sz)
Set the length of the list. |
int |
size()
Get the length of the list. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected int m_blocksize
protected int m_numblocks
protected byte[][] m_map
protected int m_firstFree
protected byte[] m_map0
Constructor Detail |
---|
public SuballocatedByteVector()
public SuballocatedByteVector(int blocksize)
blocksize
- Size of block to allocatepublic SuballocatedByteVector(int blocksize, int increaseSize)
blocksize
- Size of block to allocateMethod Detail |
---|
public int size()
private void setSize(int sz)
public void addElement(byte value)
value
- Byte to add to the listprivate void addElements(byte value, int numberOfElements)
value
- Byte to add to the listprivate void addElements(int numberOfElements)
numberOfElements
- private void insertElementAt(byte value, int at)
value
- Byte to insertat
- Index of where to insertpublic void removeAllElements()
private boolean removeElement(byte s)
s
- Byte to remove from array
private void removeElementAt(int at)
at
- index of where to remove a bytepublic void setElementAt(byte value, int at)
value
- at
- Index of where to set the objectpublic byte elementAt(int i)
i
- index of value to get
java.lang.ArrayIndexOutOfBoundsException
- if the index was _clearly_
unreasonable (negative, or past the highest block).
java.lang.NullPointerException
- if the index points to a block that could
have existed (based on the highest index used) but has never had anything
set into it.
%REVIEW% Could add a catch to create the block in that case, or return 0.
Try/Catch is _supposed_ to be nearly free when not thrown to. Do we
believe that? Should we have a separate safeElementAt?private boolean contains(byte s)
s
- object to look for
public int indexOf(byte elem, int index)
elem
- object to look forindex
- Index of where to begin search
public int indexOf(byte elem)
elem
- object to look for
private int lastIndexOf(byte elem)
elem
- Object to look for
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |