Class AbstractUpdatableObjectArray<E>
- All Implemented Interfaces:
Cloneable,Array,ArrayExchanger,ObjectArray<E>,UpdatableArray,UpdatableObjectArray<E>
Implementation of almost all basic functions of UpdatableObjectArray interface.
The only ObjectArray.get(long) and UpdatableObjectArray.set(long, Object) methods
are not defined in this class;
all other methods are implemented via calls of these 2 methods.
- Author:
- Daniel Alievsky
-
Field Summary
Fields inherited from class net.algart.arrays.AbstractArray
capacity, length, underlyingArrays -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractUpdatableObjectArray(Class<E> elementType, long initialCapacityAndLength, boolean underlyingArraysAreParallel, Array... underlyingArrays) Equivalent to the constructorAbstractUpdatableObjectArray(Class, long, long, boolean, Array...), where both initialCapacity and initialLength arguments are equal to initialCapacityAndLength.protectedAbstractUpdatableObjectArray(Class<E> elementType, long initialCapacity, long initialLength, boolean underlyingArraysAreParallel, Array... underlyingArrays) Creates an array with the given initial capacity and length. -
Method Summary
Modifier and TypeMethodDescriptionThis implementation returnsupdatableClone(Arrays.SMM).This implementation returns an instance of the subclass ofAbstractObjectArray, where the following method are overridden and call the same methods of this instance:AbstractObjectArray.get(long),AbstractObjectArray.getData(long, Object, int, int),AbstractObjectArray.getData(long, Object),AbstractObjectArray.loadResources(ArrayContext, long, long),AbstractObjectArray.flushResources(ArrayContext, long, long, boolean)andAbstractObjectArray.freeResources(ArrayContext, long, long, boolean).This implementation returns this object.<D> UpdatableObjectArray<D>Returns this array cast to the specified generic element type or throws ClassCastException if the elements cannot be cast to the required type (because theelement typeis not its subclass).voidcopy(long destIndex, long srcIndex) This implementation calls set(destIndex, get(srcIndex)).voidcopy(long destIndex, long srcIndex, long count) This implementation is based on a loop of calls ofcopy(long, long)method.This implementation callsdefaultCopy(thisInstance, src).This implementation does the following:subArr(position, count).copy(Arrays.nObjectCopies(count, value)).final UpdatableObjectArray<E>This implementation just callsfill(0, thisArray.length(), value).booleanThis implementation returns false.abstract voidEquivalent tosetElement(index, value).This implementation callssetData(long, Object, int, int)with corresponding arguments.This implementation is based on a loop of calls ofset(long, Object)method.voidsetElement(long index, Object value) This implementation calls set(index, value).voidThis implementation callssetNewStatus(false).This implementation returns (UpdatableArray)super.shallowClone().subArr(long position, long count) This implementation returnssubArray(position, position + count).subArray(long fromIndex, long toIndex) This implementation returns new instance ofAbstractUpdatableObjectArraywith the same memory model and underlying arrays, that were passed to the constructor of this instance, and with overridden methodsAbstractObjectArray.get(long),set(long, Object),AbstractObjectArray.getData(long, Object, int, int)andsetData(long, Object, int, int)calling the same methods of this instance with corresponding corrections of the arguments.voidswap(long firstIndex, long secondIndex) This implementation swaps two elements byAbstractObjectArray.get(long)andset(long, Object)methods.voidswap(long firstIndex, long secondIndex, long count) This implementation is based on a loop of calls ofswap(long, long)method.swap(UpdatableArray another) This implementation callsdefaultSwap(thisInstance, another).toString()Returns a brief string description of this object.Methods inherited from class net.algart.arrays.AbstractObjectArray
asTrustedImmutable, buffer, buffer, buffer, buffer, checkUnallowedMutation, elementType, flushResources, flushResources, freeResources, freeResources, get, getData, getData, getElement, indexOf, isCopyOnNextWrite, isUnresizable, ja, lastIndexOf, loadResources, loadResources, mutableClone, mutableType, type, updatableClone, updatableTypeMethods inherited from class net.algart.arrays.AbstractArray
byteOrder, capacity, checkCopyArguments, checkSubArrArguments, checkSubArrayArguments, checkSwapArguments, defaultAppend, defaultBuffer, defaultBufferCapacity, defaultCopy, defaultCopy, defaultSwap, equals, equals, flushResources, freeResources, hashCode, hashCode, isLazy, isNew, isNewReadOnlyView, isZeroFilled, length, newJavaArray, setNewReadOnlyViewStatus, setNewStatus, standardObjectCloneMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface net.algart.arrays.Array
byteOrder, capacity, checkUnallowedMutation, equals, flushResources, flushResources, freeResources, freeResources, getData, getData, getElement, hashCode, isCopyOnNextWrite, isEmpty, isLazy, isNew, isNewReadOnlyView, isUnresizable, length, length32, loadResources, newJavaArrayMethods inherited from interface net.algart.arrays.ObjectArray
asTrustedImmutable, buffer, buffer, buffer, buffer, elementType, get, indexOf, ja, lastIndexOf, mutableClone, mutableType, type, updatableClone, updatableTypeMethods inherited from interface net.algart.arrays.UpdatableObjectArray
matrix
-
Constructor Details
-
AbstractUpdatableObjectArray
protected AbstractUpdatableObjectArray(Class<E> elementType, long initialCapacity, long initialLength, boolean underlyingArraysAreParallel, Array... underlyingArrays) Creates an array with the given initial capacity and length.This array is not
newby default. This is correct usually, because this class is often used for creating a view of another data. However, if the instance if this class does not depend on any other data sources, you may callsetNewStatus(true)in the constructor of your subclass.- Parameters:
elementType- theelement typeof this array.initialCapacity- initial capacity of the array.initialLength- initial length of the array.underlyingArraysAreParallel- see the same argument ofAbstractFloatArray(long, long, boolean, Array...).underlyingArrays- see the same argument ofAbstractArray(long, long, Array...).- Throws:
NullPointerException- if underlyingArrays argument or some of underlyingArrays[k] elements is null.IllegalArgumentException- if the initialCapacity or initialLength arguments are illegal (negative, or capacity < length).SizeMismatchException- if underlyingArraysAreParallel=true, underlyingArrays.length>1 and some of passed arrays have different lengths.
-
AbstractUpdatableObjectArray
protected AbstractUpdatableObjectArray(Class<E> elementType, long initialCapacityAndLength, boolean underlyingArraysAreParallel, Array... underlyingArrays) Equivalent to the constructorAbstractUpdatableObjectArray(Class, long, long, boolean, Array...), where both initialCapacity and initialLength arguments are equal to initialCapacityAndLength.- Parameters:
elementType- theelement typeof this array.initialCapacityAndLength- initial capacity and length of the array.underlyingArraysAreParallel- seeAbstractUpdatableObjectArray(Class, long, long, boolean, Array...).underlyingArrays- seeAbstractUpdatableObjectArray(Class, long, long, boolean, Array...)- Throws:
IllegalArgumentException- if the passed argument are illegal (negative).
-
-
Method Details
-
subArray
This implementation returns new instance ofAbstractUpdatableObjectArraywith the same memory model and underlying arrays, that were passed to the constructor of this instance, and with overridden methodsAbstractObjectArray.get(long),set(long, Object),AbstractObjectArray.getData(long, Object, int, int)andsetData(long, Object, int, int)calling the same methods of this instance with corresponding corrections of the arguments.The returned instance also have overridden methods
AbstractObjectArray.loadResources(ArrayContext, long, long),AbstractObjectArray.flushResources(ArrayContext, long, long, boolean)andAbstractObjectArray.freeResources(ArrayContext, long, long, boolean), that also call the same methods of this instance with corresponding correction of their fromIndex argument.The returned instance also have overridden method
AbstractArray.isLazy(), that just calls the same methods of this instance with the same arguments.- Specified by:
subArrayin interfaceArray- Specified by:
subArrayin interfaceUpdatableArray- Specified by:
subArrayin interfaceUpdatableObjectArray<E>- Overrides:
subArrayin classAbstractObjectArray<E>- Parameters:
fromIndex- low endpoint (inclusive) of the subarray.toIndex- high endpoint (exclusive) of the subarray.- Returns:
- a view of the specified range within this array.
- Throws:
IndexOutOfBoundsException- for illegal fromIndex and toIndex (fromIndex < 0 || toIndex > length() || fromIndex > toIndex).- See Also:
-
subArr
Description copied from class:AbstractArrayThis implementation returnssubArray(position, position + count). Please note that the exception message can be not fully correct for the very exotic case position+count>Long.MAX_VALUE.- Specified by:
subArrin interfaceArray- Specified by:
subArrin interfaceUpdatableArray- Specified by:
subArrin interfaceUpdatableObjectArray<E>- Overrides:
subArrin classAbstractArray- Parameters:
position- start position (inclusive) of the subarray.count- number of elements in the subarray.- Returns:
- a view of the specified range within this array.
- See Also:
-
set
Description copied from interface:UpdatableObjectArrayEquivalent tosetElement(index, value).- Specified by:
setin interfaceUpdatableObjectArray<E>- Parameters:
index- index of element to replace.value- element to be stored at the specified position.
-
fill
This implementation just callsfill(0, thisArray.length(), value).- Specified by:
fillin interfaceUpdatableObjectArray<E>- Parameters:
value- the value to be stored in all elements of the array.- Returns:
- a reference to this array.
- See Also:
-
fill
This implementation does the following:subArr(position, count).copy(Arrays.nObjectCopies(count, value)). Please override this method if it's possible to perform the same task more efficiently.- Specified by:
fillin interfaceUpdatableObjectArray<E>- Parameters:
position- start index (inclusive) to be filled.count- number of filled elements.value- the value to be stored in the elements of the array.- Returns:
- a reference to this array.
- Throws:
IndexOutOfBoundsException- for illegal position and count (position < 0 || count < 0 || position + count > length()).- See Also:
-
isImmutable
public boolean isImmutable()This implementation returns false.- Specified by:
isImmutablein interfaceArray- Overrides:
isImmutablein classAbstractObjectArray<E>- Returns:
- true if this instance is immutable.
- See Also:
-
asImmutable
This implementation returns an instance of the subclass ofAbstractObjectArray, where the following method are overridden and call the same methods of this instance:AbstractObjectArray.get(long),AbstractObjectArray.getData(long, Object, int, int),AbstractObjectArray.getData(long, Object),AbstractObjectArray.loadResources(ArrayContext, long, long),AbstractObjectArray.flushResources(ArrayContext, long, long, boolean)andAbstractObjectArray.freeResources(ArrayContext, long, long, boolean).The returned instance also have overridden method
AbstractArray.isLazy(), that just calls the same methods of this instance with the same arguments.- Specified by:
asImmutablein interfaceArray- Specified by:
asImmutablein interfaceObjectArray<E>- Overrides:
asImmutablein classAbstractObjectArray<E>- Returns:
- an immutable view of this array.
- See Also:
-
shallowClone
This implementation returns (UpdatableArray)super.shallowClone().- Specified by:
shallowClonein interfaceArray- Specified by:
shallowClonein interfaceUpdatableArray- Overrides:
shallowClonein classAbstractArray- Returns:
- a shallow copy of this object.
- See Also:
-
setElement
This implementation calls set(index, value).- Specified by:
setElementin interfaceUpdatableArray- Parameters:
index- index of element to replace.value- element to be stored at the specified position.- Throws:
IndexOutOfBoundsException- if index is out of range 0..length()-1.NullPointerException- if value == null and it is an array of primitive elementsClassCastException- if it is an array of primitive elements and value is not a corresponding wrapped class (Boolean, Integer, etc.)ArrayStoreException- if it is an array of non-primitive elements and value is not an instance ofAbstractObjectArray.elementType()class
-
setData
This implementation is based on a loop of calls ofset(long, Object)method. Please override this method if it's possible to perform the same task more efficiently than such a loop.- Specified by:
setDatain interfaceUpdatableArray- Parameters:
arrayPos- starting position in this AlgART array.srcArray- the source Java array.srcArrayOffset- starting position in the source Java array.count- the number of elements to be copied.- Returns:
- a reference to this AlgART array.
- Throws:
NullPointerException- if srcArray argument is null.IllegalArgumentException- if srcArray argument is not an array.IndexOutOfBoundsException- if copying would cause access of data outside this array or source Java array.ArrayStoreException- if destArray element type mismatches with this arrayelementType().ClassCastException- if destArray element type mismatches with this arrayelementType()(both this and ArrayStoreException are possible, depending on implementation).- See Also:
-
setData
This implementation callssetData(long, Object, int, int)with corresponding arguments.- Specified by:
setDatain interfaceUpdatableArray- Parameters:
arrayPos- starting position in this AlgART array.srcArray- the source Java array.- Returns:
- a reference to this AlgART array.
- Throws:
NullPointerException- if srcArray argument is null.IllegalArgumentException- if srcArray argument is not an array.IndexOutOfBoundsException- if copying would cause access of data outside this array or source Java array.ArrayStoreException- if destArray element type mismatches with this arrayAbstractObjectArray.elementType().ClassCastException- if destArray element type mismatches with this arrayAbstractObjectArray.elementType()(both this and ArrayStoreException are possible, depending on implementation).- See Also:
-
copy
public void copy(long destIndex, long srcIndex) This implementation calls set(destIndex, get(srcIndex)).- Specified by:
copyin interfaceUpdatableArray- Parameters:
destIndex- index of element to replace.srcIndex- index of element to be copied.- Throws:
IndexOutOfBoundsException- if one of indexes is out of range 0..length()-1.
-
copy
public void copy(long destIndex, long srcIndex, long count) This implementation is based on a loop of calls ofcopy(long, long)method.- Specified by:
copyin interfaceUpdatableArray- Parameters:
destIndex- starting index of element to replace.srcIndex- starting index of element to be copied.count- the number of elements to be copied.- Throws:
IndexOutOfBoundsException- if one of indexes is out of range 0..length()-1.
-
swap
public void swap(long firstIndex, long secondIndex) This implementation swaps two elements byAbstractObjectArray.get(long)andset(long, Object)methods.- Specified by:
swapin interfaceArrayExchanger- Specified by:
swapin interfaceUpdatableArray- Parameters:
firstIndex- first index of element to exchange.secondIndex- second index of element to exchange.- Throws:
IndexOutOfBoundsException- if one of indexes is out of range 0..length()-1.
-
swap
public void swap(long firstIndex, long secondIndex, long count) This implementation is based on a loop of calls ofswap(long, long)method.- Specified by:
swapin interfaceUpdatableArray- Parameters:
firstIndex- starting first index of element to exchange.secondIndex- starting second index of element to exchange.count- the number of elements to be exchanged.- Throws:
IndexOutOfBoundsException- if one of indexes is out of range 0..length()-1.
-
copy
This implementation callsdefaultCopy(thisInstance, src).- Specified by:
copyin interfaceUpdatableArray- Parameters:
src- the source array.- Returns:
- a reference to this array.
- Throws:
NullPointerException- if src argument is null.IllegalArgumentException- if the source and this element types do not match.- See Also:
-
swap
This implementation callsdefaultSwap(thisInstance, another).- Specified by:
swapin interfaceUpdatableArray- Parameters:
another- another array.- Returns:
- a reference to this array.
- Throws:
NullPointerException- if another argument is null.IllegalArgumentException- if another and this element types do not match.
-
setNonNew
public void setNonNew()This implementation callssetNewStatus(false).- Specified by:
setNonNewin interfaceUpdatableArray
-
asCopyOnNextWrite
This implementation returnsupdatableClone(Arrays.SMM).- Specified by:
asCopyOnNextWritein interfaceArray- Specified by:
asCopyOnNextWritein interfaceUpdatableArray- Overrides:
asCopyOnNextWritein classAbstractObjectArray<E>- Returns:
- a copy of this object.
- See Also:
-
asUnresizable
This implementation returns this object. Should be overridden if the inheritor is resizable.- Specified by:
asUnresizablein interfaceUpdatableArray- Specified by:
asUnresizablein interfaceUpdatableObjectArray<E>- Returns:
- an unresizable view of this array.
- See Also:
-
cast
Description copied from interface:ObjectArrayReturns this array cast to the specified generic element type or throws ClassCastException if the elements cannot be cast to the required type (because theelement typeis not its subclass). Equivalent to (ObjectArray)thisArray , but is compiled without "unchecked cast" warning or "inconvertible type" error.Unlike ArrayList architecture, such casting is safe here, because all methods, storing data in the AlgART array, always check the
element typeand do not allow saving illegal elements.- Specified by:
castin interfaceObjectArray<E>- Specified by:
castin interfaceUpdatableObjectArray<E>- Overrides:
castin classAbstractObjectArray<E>- Parameters:
elementType- the required generic type.- Returns:
- this array cast to the specified generic element type.
-
toString
Description copied from interface:ArrayReturns a brief string description of this object.The result of this method may depend on implementation and usually contains a short description of the array length, capacity, element type.
Note: for
character arrays, unlike CharSequence.toString(), this method works as for all other array types. If you need to convert a character array to a string, containing all characters of the array, you may useArrays.toString(CharArray)method.- Specified by:
toStringin interfaceArray- Overrides:
toStringin classAbstractObjectArray<E>- Returns:
- a brief string description of this object.
-