AlgART Home

net.algart.arrays
Interface PFixedArray

All Superinterfaces:
Array, PArray
All Known Subinterfaces:
BitArray, ByteArray, CharArray, IntArray, LongArray, MutableBitArray, MutableByteArray, MutableCharArray, MutableIntArray, MutableLongArray, MutablePFixedArray, MutablePIntegerArray, MutableShortArray, PIntegerArray, ShortArray, UpdatableBitArray, UpdatableByteArray, UpdatableCharArray, UpdatableIntArray, UpdatableLongArray, UpdatablePFixedArray, UpdatablePIntegerArray, UpdatableShortArray
All Known Implementing Classes:
AbstractBitArray, AbstractByteArray, AbstractCharArray, AbstractIntArray, AbstractLongArray, AbstractShortArray, AbstractUpdatableBitArray, AbstractUpdatableByteArray, AbstractUpdatableCharArray, AbstractUpdatableIntArray, AbstractUpdatableLongArray, AbstractUpdatableShortArray

public interface PFixedArray
extends PArray

AlgART array of any fixed-point primitive numeric, character or bit elements (byte, short, int, long, char or boolean), read-only access.

Any class implementing this interface must implement one of BitArray, CharArray, ByteArray, ShortArray, IntArray, LongArray subinterfaces.

AlgART Laboratory 2007-2013

Since:
JDK 1.5
Version:
1.2
Author:
Daniel Alievsky

Method Summary
Modifier and Type Method and Description
 PFixedArray asImmutable()
          Returns an immutable view of this array.
 PFixedArray asTrustedImmutable()
          Returns a trusted immutable view of this array.
 int getInt(long index)
          Returns the element #index converted to int: (int)value&0xFF for byte value, (int)value&0xFFFF for short value, (int)value for int, float, double, char values, value?1:0 for boolean values, min(max(value, Integer.MIN_VALUE), Integer.MAX_VALUE) (i.e. the value truncated to the range Integer.MIN_VALUE..Integer.MAX_VALUE) for long values.
 long getLong(long index)
          Returns the element #index converted to long: (long)value&0xFF for byte value, (long)value&0xFFFF for short value, (long)value for int, long, float, double, char values, or as value?1:0 for boolean values.
 long indexOf(long lowIndex, long highIndex, long value)
          Returns the minimal index k, so that lowIndex<=k<min(highIndex,thisArray.length()) and getLong(k)==value, or -1 if there is no such array element.
 long lastIndexOf(long lowIndex, long highIndex, long value)
          Returns the maximal index k, so that highIndex>k>=max(lowIndex,0) and getLong(k)==value, or -1 if there is no such array element.
 long maxPossibleValue()
          Returns 1 for BitArray, 0xFF for ByteArray, 0xFFFF for CharArray and ShortArray, Integer.MAX_VALUE for IntArray, Long.MAX_VALUE for LongArray.
 long minPossibleValue()
          Returns 0 for BitArray, ByteArray, CharArray and ShortArray, Integer.MIN_VALUE for IntArray, Long.MIN_VALUE for LongArray.
 MutablePFixedArray mutableClone(MemoryModel memoryModel)
          Returns a mutable resizable copy of this array.
 UpdatablePFixedArray updatableClone(MemoryModel memoryModel)
          Returns an unresizable updatable copy of this array.
 
Methods inherited from interface net.algart.arrays.PArray
bitsPerElement, getDouble, indexOf, isZeroFilled, lastIndexOf, maxPossibleValue, minPossibleValue, mutableType, type, updatableType
 
Methods inherited from interface net.algart.arrays.Array
asCopyOnNextWrite, buffer, buffer, buffer, buffer, byteOrder, capacity, checkUnallowedMutation, elementType, equals, flushResources, flushResources, freeResources, freeResources, getData, getData, getElement, hashCode, isCopyOnNextWrite, isImmutable, isLazy, isNew, isNewReadOnlyView, isUnresizable, length, loadResources, newJavaArray, shallowClone, subArr, subArray, toString
 

Method Detail

minPossibleValue

long minPossibleValue()
Returns 0 for BitArray, ByteArray, CharArray and ShortArray, Integer.MIN_VALUE for IntArray, Long.MIN_VALUE for LongArray. It is the minimal possible value, that can stored in elements of this array (byte and short elements are interpreted as unsigned). This method is equivalent to minPossibleIntegerValue(thisArray.getClass()).

Returns:
the minimal possible value, that can stored in elements of this array.
See Also:
PArray.minPossibleValue(double)

maxPossibleValue

long maxPossibleValue()
Returns 1 for BitArray, 0xFF for ByteArray, 0xFFFF for CharArray and ShortArray, Integer.MAX_VALUE for IntArray, Long.MAX_VALUE for LongArray. valueForFloatingPoint for FloatArray and DoubleArray. It is the maximal possible value, that can stored in elements of this array (byte and short elements are interpreted as unsigned). This method is equivalent to maxPossibleIntegerValue(thisArray.getClass()).

Returns:
the maximal possible value, that can stored in elements of this array.
See Also:
PArray.maxPossibleValue(double)

getLong

long getLong(long index)
Returns the element #index converted to long: (long)value&0xFF for byte value, (long)value&0xFFFF for short value, (long)value for int, long, float, double, char values, or as value?1:0 for boolean values. Please note that this method returns unsigned values for byte and short arrays. Returned value contains full information stored in the element, if it is not a array of float or double elements.

Parameters:
index - index of element to get.
Returns:
the element at the specified position in this array.
Throws:
java.lang.IndexOutOfBoundsException - if index out of range 0..length()-1.
See Also:
UpdatablePArray.setLong(long, long)

getInt

int getInt(long index)
Returns the element #index converted to int: (int)value&0xFF for byte value, (int)value&0xFFFF for short value, (int)value for int, float, double, char values, value?1:0 for boolean values, min(max(value, Integer.MIN_VALUE), Integer.MAX_VALUE) (i.e. the value truncated to the range Integer.MIN_VALUE..Integer.MAX_VALUE) for long values. Please note that this method returns unsigned values for byte and short arrays. Returned value contains full information stored in the element, if it is not a array of long, float or double elements.

Parameters:
index - index of element to get.
Returns:
the element at the specified position in this array.
Throws:
java.lang.IndexOutOfBoundsException - if index out of range 0..length()-1.
See Also:
UpdatablePArray.setInt(long, int)

indexOf

long indexOf(long lowIndex,
             long highIndex,
             long value)
Returns the minimal index k, so that lowIndex<=k<min(highIndex,thisArray.length()) and getLong(k)==value, or -1 if there is no such array element.

In particular, if lowIndex>=thisArray.length()} or lowIndex>=highIndex, this method returns -1, and if lowIndex<0, the result is the same as if lowIndex==0.

You may specify lowIndex=0 and highIndex=Long.MAX_VALUE to search through all array elements.

Parameters:
lowIndex - the low index in the array for search (inclusive).
highIndex - the high index in the array for search (exclusive).
value - the value to be found.
Returns:
the index of the first occurrence of this value in this array in range lowIndex<=index<highIndex, or -1 if this value does not occur in this range.

lastIndexOf

long lastIndexOf(long lowIndex,
                 long highIndex,
                 long value)
Returns the maximal index k, so that highIndex>k>=max(lowIndex,0) and getLong(k)==value, or -1 if there is no such array element.

In particular, if highIndex<=0 or highIndex<=lowIndex, this method returns -1, and if highIndex>=thisArray.length(), the result is the same as if highIndex==thisArray.length().

You may specify lowIndex=0 and highIndex=Long.MAX_VALUE to search through all array elements.

Parameters:
lowIndex - the low index in the array for search (inclusive).
highIndex - the high index in the array for search (exclusive).
value - the value to be found.
Returns:
the index of the last occurrence of this value in this array in range lowIndex<=index<highIndex, or -1 if this value does not occur in this range.

asImmutable

PFixedArray asImmutable()
Description copied from interface: Array
Returns an immutable view of this array. If this array is already immutable (i.e. Array.isImmutable() is true), returns a reference to this object.

A array is considered to be immutable, if there are no ways to modify its content or state with help of this instance. In particular, immutable arrays never implement UpdatableArray or DirectAccessible interfaces. Moreover, any third-party implementation of Array interface must return an instance of a class, which has no public methods or fields allowing to change this instance.

Query operations on the returned array "read through" to this array. The returned view is also unresizable (see UpdatableArray.asUnresizable()).

The returned view (when it is not a reference to this object) contains the same elements as this array, but independent length, start offset, capacity, copy-on-next-write and possible other information about array characteristics besides its elements, as for Array.shallowClone() method. If modifications of this array characteristics lead to reallocation of the internal storage, then the returned array ceases to be a view of this array. The only possible reasons for reallocation are the following: calling MutableArray.length(long), MutableArray.ensureCapacity(long) or MutableArray.trim() methods for this array, or any modification of this or returned array in a case when this array is copy-on-next-write.

By default, the array factories (memory models) create mutable arrays, but they can be converted to immutable by this method.

Note: Array.isNew() method, called for the result of this method, always returns false — because it does not implement UpdatableArray.

Also note: Array.isNewReadOnlyView() method, called for the result of this method, always returns the same value as Array.isNewReadOnlyView() for this object. Really,

Specified by:
asImmutable in interface Array
Specified by:
asImmutable in interface PArray
Returns:
an immutable view of this array (or a reference to this array if it is already immutable).
See Also:
Array.isImmutable(), Array.asTrustedImmutable(), Array.mutableClone(MemoryModel), Array.updatableClone(MemoryModel), UpdatableArray.asUnresizable()

asTrustedImmutable

PFixedArray asTrustedImmutable()
Description copied from interface: Array
Returns a trusted immutable view of this array. If this array is already trusted immutable, returns a reference to this object.

A array is considered to be "trusted" immutable, if it potentially can change its elements, but the Java code working with this array promises that it will not change them. The returned instance never implements UpdatableArray, but may implement DirectAccessible, that allow quick access to its elements. As for usual immutable view, query operations on the returned array "read through" to this array.

The only standard way allowing to change elements of returned array is using DirectAccessible.javaArray() method, in a case when the array is backed by an accessible array. But the Java code, processing the trusted immutable array, must use this method only for quick reading elements and not try to change them. If, despite the promise, the elements of the trusted immutable array will be changed, the UnallowedMutationError may be thrown by the call of Array.checkUnallowedMutation() method.

In some implementations — for example, if DirectAccessible interface is not supported by this array — this method may return the same result as Array.asImmutable().

The returned view is always unresizable.

The returned view (when it is not a reference to this object) contains the same elements as this array, but independent length, start offset, capacity, copy-on-next-write and possible other information about array characteristics besides its elements, as for Array.shallowClone() method. If modifications of this array characteristics lead to reallocation of the internal storage, then the returned array ceases to be a view of this array. The only possible reasons for reallocation are the following: calling MutableArray.length(long), MutableArray.ensureCapacity(long) or MutableArray.trim() methods for this array, or any modification of this or returned array in a case when this array is copy-on-next-write.

Trusted immutable view is a compromise between absolute safety, provided by usual immutable view, and maximal efficiency, achieved while using the original non-protected array. Please see the package description to learn more about possible usage of this method.

Specified by:
asTrustedImmutable in interface Array
Specified by:
asTrustedImmutable in interface PArray
Returns:
a trusted immutable view of this array (or a reference to this array if it is already trusted immutable).
See Also:
Array.asImmutable(), Array.checkUnallowedMutation()

mutableClone

MutablePFixedArray mutableClone(MemoryModel memoryModel)
Description copied from interface: Array
Returns a mutable resizable copy of this array. This method is equivalent to the following code:
 memoryModel.newArray(thisArray).copy(thisArray);
 

Please note: this method is a good choice for cloning little arrays (thousands, maybe millions elements). If you clone large arrays by this method, the user, in particular, has no ways to view the progress of copying or to interrupt copying. To clone large arrays, we recommend the following code:

 MutableArray clone = memoryModel.newArray(thisArray);
 Arrays.copy(someContext, clone, a);
 

Specified by:
mutableClone in interface Array
Specified by:
mutableClone in interface PArray
Parameters:
memoryModel - the memory model, used for allocation a new copy of this array.
Returns:
a mutable copy of this array.
See Also:
Array.updatableClone(MemoryModel)

updatableClone

UpdatablePFixedArray updatableClone(MemoryModel memoryModel)
Description copied from interface: Array
Returns an unresizable updatable copy of this array. This method is equivalent to the following code:
 memoryModel.newUnresizableArray(thisArray).copy(thisArray);
 

Please note: this method is a good choice for cloning little arrays (thousands, maybe millions elements). If you clone large arrays by this method, the user, in particular, has no ways to view the progress of copying or to interrupt copying. To clone large arrays, we recommend the following code:

 UpdatableArray clone = memoryModel.newUnresizableArray(thisArray);
 Arrays.copy(someContext, clone, a);
 

Specified by:
updatableClone in interface Array
Specified by:
updatableClone in interface PArray
Parameters:
memoryModel - the memory model, used for allocation a new copy of this array.
Returns:
an updatable copy of this array.
See Also:
Array.mutableClone(MemoryModel)