| java.lang.Object org.python.core.AbstractArray
All known Subclasses: org.python.core.PyObjectArray,
AbstractArray | abstract public class AbstractArray implements Serializable(Code) | | Abstract class that manages bulk structural and data operations
on arrays, defering type-specific element-wise operations to the
subclass. Subclasses supply the underlying array and the
type-specific operations--greatly reducing the need for casting
(thus achieving array-like performances with collection-like
flexibility). Also includes
functionality to support integration with the the jdk's
collections (via methods that return a modification increment).
Subclasses will want to provide the following methods (which are
not declared in this class since subclasses should specify the
explicit return type):
<type> get(int)
void set(int, <type>)
void add(<type>)
void add(int, <type>)
<type>[] toArray()
Clone cannot be supported since the array is not held locally.
But the @link #AbstractArray(AbstractArray) constructor can be used
for suclasses that need to support clone.
This "type-specific collections" approach was originally developed
by Dennis Sosnoski, who provides a more complete library at the
referenced URL. Sosnoski's library does not integrate with the
jdk collection classes but provides collection-like classes.
author: Clark Updike See Also:
* Sosnoski's Type-Specific Collection Library |
Field Summary | |
protected int | capacity Size of the current array, which can be larger than the
size field. | protected int | modCountIncr The modification count increment indicates if a structural change
occured as a result of an operation that would make concurrent iteration
over the array invalid. | protected int | size The number of values currently present in the array. |
Constructor Summary | |
public | AbstractArray(AbstractArray toCopy) Since AbstractArray can support a clone method, this facilitates
sublcasses that want to implement clone (poor man's cloning). | public | AbstractArray(int size) Use when the subclass has a preexisting array. | public | AbstractArray(Class type) Creates the managed array with a default size of 10. | public | AbstractArray(Class type, int[] dimensions) Construtor for multi-dimensional array types.
For example, char[][] . | public | AbstractArray(Class type, int size) Creates the managed array with the specified size. |
Method Summary | |
public void | appendArray(Object ofArrayType) Appends the supplied array, which must be an array of the same
type as this , to the end of this . | public void | clear() Set the array to the empty state, clearing all the data out and
nulling objects (or "zero-ing" primitives). | protected void | clearRange(int start, int stop) Clears out the values in the specified range. | public Object | copyArray() Constructs and returns a simple array containing the same data as held
in this growable array. | protected void | ensureCapacity(int minCapacity) Ensures that the base array has at least the specified
minimum capacity. | protected int | getAddIndex() Gets the next add position for appending a value to those in the array. | abstract protected Object | getArray() Get the backing array. | public int | getModCountIncr() Returns the modification count increment, which is used by
AbstractList subclasses to adjust modCount
AbstractList uses it's modCount field
to invalidate concurrent operations (like iteration) that should
fail if the underlying array changes structurally during the
operation. | public int | getSize() Get the number of values currently present in the array. | protected boolean | isEmpty() | protected void | makeInsertSpace(int index) Makes room to insert a value at a specified index in the array.
AbstractList subclasses should update their
modCount after calling this method.
| protected void | makeInsertSpace(int index, int length) | public void | remove(int index) Remove a value from the array. | public void | remove(int start, int stop) Removes a range from the array at the specified indices. | public void | replaceSubArray(Object array, int atIndex) Allows an array type to overwrite a segment of the array. | public void | replaceSubArray(int thisStart, int thisStop, Object srcArray, int srcStart, int srcStop) Replace a range of this array with another subarray. | abstract protected void | setArray(Object array) Set the backing array. | public void | setSize(int count) Sets the number of values currently present in the array. | public String | toString() Provides a default comma-delimited representation of array. | protected void | trimToSize() Removes any excess capacity in the backing array so it is
just big enough to hold the amount of data actually in the array. |
capacity | protected int capacity(Code) | | Size of the current array, which can be larger than the
size field.
|
modCountIncr | protected int modCountIncr(Code) | | The modification count increment indicates if a structural change
occured as a result of an operation that would make concurrent iteration
over the array invalid. It is typically used by subclasses that
extend AbstractList , by adding the value to
AbstractList.modCount after performing a potentially
structure-altering operation. A value of 0 indicates that
it is still valid to iterate over the array. A value of 1
indicates it is no longer valid to iterate over the range.
This class uses a somewhat stricter semantic for modCount .
Namely, modCountIncr is only set to 1 if a structural
change occurred. The jdk collections generally increment
modCount if a potentially structure-altering method
is called, regardless of whether or not a change actually occurred.
See also: java.util.AbstractList#modCount
|
size | protected int size(Code) | | The number of values currently present in the array.
|
AbstractArray | public AbstractArray(AbstractArray toCopy)(Code) | | Since AbstractArray can support a clone method, this facilitates
sublcasses that want to implement clone (poor man's cloning).
Sublclasses can then do this:
public MyManagedArray(MyManagedArray toCopy) {
super(this);
this.baseArray = ()toCopy.copyArray();
this.someProp = toCopy.someProp;
}
public Object clone() {
return new MyManagedArray(this);
}
Parameters: toCopy - |
AbstractArray | public AbstractArray(int size)(Code) | | Use when the subclass has a preexisting array.
Parameters: size - the initial size of the array |
AbstractArray | public AbstractArray(Class type)(Code) | | Creates the managed array with a default size of 10.
Parameters: type - array element type (primitive type or object class) |
AbstractArray | public AbstractArray(Class type, int[] dimensions)(Code) | | Construtor for multi-dimensional array types.
For example, char[][] . This class only manages the
top level dimension of the array. For single dimension
arrays (the more typical usage), use the other constructors.
Parameters: type - Array element type (primitive type or object class). Parameters: dimensions - An int array specifying the dimensions. Fora 2D array, something like new int[] {10,0} tocreate 10 elements each of which can hold an reference to anarray of the same type. See Also: Array.newInstance(java.lang.Classint[]) |
AbstractArray | public AbstractArray(Class type, int size)(Code) | | Creates the managed array with the specified size.
Parameters: type - array element type (primitive type or object class) Parameters: size - number of elements initially allowed in array |
appendArray | public void appendArray(Object ofArrayType)(Code) | | Appends the supplied array, which must be an array of the same
type as this , to the end of this .
AbstractList subclasses should update their
modCount after calling this method.
Parameters: ofArrayType - the array to append
|
clear | public void clear()(Code) | | Set the array to the empty state, clearing all the data out and
nulling objects (or "zero-ing" primitives).
Note: This method does not set modCountIncr to
1 even though java.util.ArrayList
would.
AbstractList subclasses should update their
modCount after calling this method.
|
clearRange | protected void clearRange(int start, int stop)(Code) | | Clears out the values in the specified range. For object arrays,
the cleared range is nullified. For primitve arrays, it is
"zero-ed" out.
Note: This method does not set modCountIncr to
1 even though java.util.ArrayList
would.
Parameters: start - the start index, inclusive Parameters: stop - the stop index, exclusive |
copyArray | public Object copyArray()(Code) | | Constructs and returns a simple array containing the same data as held
in this growable array.
array containing a shallow copy of the data. |
ensureCapacity | protected void ensureCapacity(int minCapacity)(Code) | | Ensures that the base array has at least the specified
minimum capacity.
AbstractList subclasses should update their
modCount after calling this method.
Parameters: minCapacity - new minimum size required
|
getAddIndex | protected int getAddIndex()(Code) | | Gets the next add position for appending a value to those in the array.
If the underlying array is full, it is grown by the appropriate size
increment so that the index value returned is always valid for the
array in use by the time of the return.
AbstractList subclasses should update their
modCount after calling this method.
index position for next added element
|
getArray | abstract protected Object getArray()(Code) | | Get the backing array. This method is used by the type-agnostic base
class code to access the array used for type-specific storage by the
child class.
backing array object |
getModCountIncr | public int getModCountIncr()(Code) | | Returns the modification count increment, which is used by
AbstractList subclasses to adjust modCount
AbstractList uses it's modCount field
to invalidate concurrent operations (like iteration) that should
fail if the underlying array changes structurally during the
operation.
the modification count increment (0 if no change, 1 if changed) |
getSize | public int getSize()(Code) | | Get the number of values currently present in the array.
count of values present |
isEmpty | protected boolean isEmpty()(Code) | | |
makeInsertSpace | protected void makeInsertSpace(int index)(Code) | | Makes room to insert a value at a specified index in the array.
AbstractList subclasses should update their
modCount after calling this method. Does not change
the size property of the array.
Parameters: index - index position at which to insert element
|
makeInsertSpace | protected void makeInsertSpace(int index, int length)(Code) | | |
remove | public void remove(int index)(Code) | | Remove a value from the array. All values above the index removed
are moved down one index position.
AbstractList subclasses should always increment
their modCount method after calling this, as
remove always causes a structural modification.
Parameters: index - index number of value to be removed
|
remove | public void remove(int start, int stop)(Code) | | Removes a range from the array at the specified indices.
Parameters: start - inclusive Parameters: stop - exclusive |
replaceSubArray | public void replaceSubArray(Object array, int atIndex)(Code) | | Allows an array type to overwrite a segment of the array.
Will expand the array if (atIndex + 1) + ofArrayType 's length
is greater than the current length.
AbstractList subclasses should update their
modCount after calling this method.
Parameters: array - Parameters: atIndex -
|
replaceSubArray | public void replaceSubArray(int thisStart, int thisStop, Object srcArray, int srcStart, int srcStop)(Code) | | Replace a range of this array with another subarray.
Parameters: thisStart - the start index (inclusive) of the subarray in this array to be replaced Parameters: thisStop - the stop index (exclusive) of the subarray in this array to be replaced Parameters: srcArray - the source array from which to copy Parameters: srcStart - the start index (inclusive) of the replacement subarray Parameters: srcStop - the stop index (exclusive) of the replacement subarray |
setArray | abstract protected void setArray(Object array)(Code) | | Set the backing array. This method is used by the type-agnostic base
class code to set the array used for type-specific storage by the
child class.
Parameters: array - the backing array object |
setSize | public void setSize(int count)(Code) | | Sets the number of values currently present in the array. If the new
size is greater than the current size, the added values are initialized
to the default values. If the new size is less than the current size,
all values dropped from the array are discarded.
AbstractList subclasses should update their
modCount after calling this method.
Parameters: count - number of values to be set
|
trimToSize | protected void trimToSize()(Code) | | Removes any excess capacity in the backing array so it is
just big enough to hold the amount of data actually in the array.
|
|
|