Package org.apfloat.internal
Class DiskDataStorage
java.lang.Object
org.apfloat.spi.DataStorage
org.apfloat.internal.DiskDataStorage
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
DoubleDiskDataStorage
,FloatDiskDataStorage
,IntDiskDataStorage
,LongDiskDataStorage
Abstract base class for disk-based data storage, containing the common
functionality independent of the element type.
- Version:
- 1.14.0
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
private static class
Nested classes/interfaces inherited from class org.apfloat.spi.DataStorage
DataStorage.AbstractIterator, DataStorage.Iterator
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static boolean
private DiskDataStorage.FileStorage
private static ReferenceQueue
<DiskDataStorage.FileStorage> private static Set
<DiskDataStorage.FileStorageReference> private static final long
private static ThreadLocal
<SoftReference<ByteBuffer>> private static final long
private static final ReadableByteChannel
Fields inherited from class org.apfloat.spi.DataStorage
READ, READ_WRITE, WRITE
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Default constructor.protected
DiskDataStorage
(DiskDataStorage diskDataStorage, long offset, long length) Subsequence constructor. -
Method Summary
Modifier and TypeMethodDescription(package private) static void
cleanUp()
protected abstract ArrayAccess
createArrayAccess
(int mode, int startColumn, int columns, int rows) Create an empty ArrayAccess.private static DiskDataStorage.FileStorage
protected abstract ArrayAccess
createTransposedArrayAccess
(int mode, int startColumn, int columns, int rows) Create an empty transposed ArrayAccess.private static void
private static void
(package private) static void
gc()
protected static int
Convenience method for getting the block size (in bytes) for the currentApfloatContext
.private static ByteBuffer
protected final FileChannel
TheFileChannel
of the underlying disk file.protected final String
Filename of the underlying disk data storage.protected abstract int
Size of the element type, in bytes.protected void
implCopyFrom
(DataStorage dataStorage, long size) Copies the specified number of elements from another data storage to this data storage.protected ArrayAccess
implGetArray
(int mode, int startColumn, int columns, int rows) Maps a block of data to a memory array when the data is treated as a matrix.protected long
Return the size of the whole data storage, not including sub-sequence settings.protected ArrayAccess
implGetTransposedArray
(int mode, int startColumn, int columns, int rows) Maps a transposed block of data to a memory array when the data is treated as a matrix.protected void
implSetSize
(long size) Sets the size of the data storage.boolean
isCached()
Is this object cached in memory.private void
pad
(long position, long size) private void
readToArray
(long readPosition, ArrayAccess arrayAccess, int writePosition, int length) private static void
referenceFileStorage
(DiskDataStorage.FileStorage fileStorage) protected void
setArray
(ArrayAccess arrayAccess, int startColumn, int columns, int rows) Write the data back to the same location in the file that was retrieved withimplGetArray(int,int,int,int)
.protected void
setTransposedArray
(ArrayAccess arrayAccess, int startColumn, int columns, int rows) Write the data back to the same location in the file that was retrieved withimplGetTransposedArray(int,int,int,int)
.protected void
transferFrom
(ReadableByteChannel in, long position, long size) Transfer from a readable channel, possibly in multiple chunks.protected void
transferTo
(WritableByteChannel out, long position, long size) Transfer to a writable channel, possibly in multiple chunks.private void
writeFromArray
(ArrayAccess arrayAccess, int readPosition, long writePosition, int length) Methods inherited from class org.apfloat.spi.DataStorage
copyFrom, copyFrom, getArray, getArray, getOffset, getSize, getTransposedArray, implGetArray, implSubsequence, isReadOnly, isSubsequenced, iterator, setReadOnly, setSize, subsequence
-
Field Details
-
ZERO_CHANNEL
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
TIMEOUT
private static final long TIMEOUT- See Also:
-
referenceQueue
-
references
-
threadLocal
-
cleanUp
private static boolean cleanUp -
fileStorage
-
-
Constructor Details
-
DiskDataStorage
Default constructor.- Throws:
ApfloatRuntimeException
-
DiskDataStorage
Subsequence constructor.- Parameters:
diskDataStorage
- The originating data storage.offset
- The subsequence starting position.length
- The subsequence length.
-
-
Method Details
-
isCached
public boolean isCached()Description copied from class:DataStorage
Is this object cached in memory.- Specified by:
isCached
in classDataStorage
- Returns:
true
if this object is cached in memory,false
if not.
-
implCopyFrom
Description copied from class:DataStorage
Copies the specified number of elements from another data storage to this data storage. The validity of the arguments of this method do not need to be checked.- Specified by:
implCopyFrom
in classDataStorage
- Parameters:
dataStorage
- The data storage where the data should be copied from.size
- The number of elements to be copied.- Throws:
ApfloatRuntimeException
-
implGetSize
Description copied from class:DataStorage
Return the size of the whole data storage, not including sub-sequence settings.- Specified by:
implGetSize
in classDataStorage
- Returns:
- The size of the whole data storage, not including sub-sequence settings.
- Throws:
ApfloatRuntimeException
-
implSetSize
Description copied from class:DataStorage
Sets the size of the data storage. The validity of the arguments of this method do not need to be checked.- Specified by:
implSetSize
in classDataStorage
- Parameters:
size
- The size of the data storage.- Throws:
ApfloatRuntimeException
-
implGetArray
protected ArrayAccess implGetArray(int mode, int startColumn, int columns, int rows) throws ApfloatRuntimeException Description copied from class:DataStorage
Maps a block of data to a memory array when the data is treated as a matrix. The validity of the arguments of this method do not need to be checked.- Specified by:
implGetArray
in classDataStorage
- Parameters:
mode
- Whether the array is prepared for reading, writing or both. The value should beDataStorage.READ
,DataStorage.WRITE
or a combination of these.startColumn
- The starting column where data is read.columns
- The number of columns of data to read.rows
- The number of rows of data to read. This should be equivalent to n1, number of rows in the matrix.- Returns:
- Access to an array of size
columns
xrows
containing the data. - Throws:
ApfloatRuntimeException
-
implGetTransposedArray
protected ArrayAccess implGetTransposedArray(int mode, int startColumn, int columns, int rows) throws ApfloatRuntimeException Description copied from class:DataStorage
Maps a transposed block of data to a memory array when the data is treated as a matrix. The validity of the arguments of this method do not need to be checked.- Specified by:
implGetTransposedArray
in classDataStorage
- Parameters:
mode
- Whether the array is prepared for reading, writing or both. The value should beDataStorage.READ
,DataStorage.WRITE
or a combination of these.startColumn
- The starting column where data is read.columns
- The number of columns of data to read.rows
- The number of rows of data to read. This should be equivalent to n1, number of rows in the matrix.- Returns:
- Access to an array of size
columns
xrows
containing the transposed data. - Throws:
ApfloatRuntimeException
-
setArray
protected void setArray(ArrayAccess arrayAccess, int startColumn, int columns, int rows) throws ApfloatRuntimeException Write the data back to the same location in the file that was retrieved withimplGetArray(int,int,int,int)
.- Parameters:
arrayAccess
- The transposed array access.startColumn
- The starting column where data is stored.columns
- The number of columns of data.rows
- The number of rows of data.- Throws:
ApfloatRuntimeException
- Since:
- 1.7.0
-
setTransposedArray
protected void setTransposedArray(ArrayAccess arrayAccess, int startColumn, int columns, int rows) throws ApfloatRuntimeException Write the data back to the same location in the file that was retrieved withimplGetTransposedArray(int,int,int,int)
.- Parameters:
arrayAccess
- The transposed array access.startColumn
- The starting column where data is stored.columns
- The number of columns of data.rows
- The number of rows of data.- Throws:
ApfloatRuntimeException
- Since:
- 1.7.0
-
readToArray
private void readToArray(long readPosition, ArrayAccess arrayAccess, int writePosition, int length) throws ApfloatRuntimeException - Throws:
ApfloatRuntimeException
-
writeFromArray
private void writeFromArray(ArrayAccess arrayAccess, int readPosition, long writePosition, int length) throws ApfloatRuntimeException - Throws:
ApfloatRuntimeException
-
createArrayAccess
Create an empty ArrayAccess.- Parameters:
mode
- Whether the array is prepared for reading, writing or both. The value should beDataStorage.READ
,DataStorage.WRITE
or a combination of these.startColumn
- The starting column where data is stored.columns
- The number of columns of data.rows
- The number of rows of data.- Returns:
- Access to an empty array of the specified size and position.
- Since:
- 1.7.0
-
createTransposedArrayAccess
protected abstract ArrayAccess createTransposedArrayAccess(int mode, int startColumn, int columns, int rows) Create an empty transposed ArrayAccess.- Parameters:
mode
- Whether the array is prepared for reading, writing or both. The value should beDataStorage.READ
,DataStorage.WRITE
or a combination of these.startColumn
- The starting column where data is stored.columns
- The number of columns of data.rows
- The number of rows of data.- Returns:
- Access to an empty array of the specified size and position.
- Since:
- 1.7.0
-
transferFrom
protected void transferFrom(ReadableByteChannel in, long position, long size) throws ApfloatRuntimeException Transfer from a readable channel, possibly in multiple chunks.- Parameters:
in
- Input channel.position
- Start position of transfer.size
- Total number of bytes to transfer.- Throws:
ApfloatRuntimeException
-
transferTo
protected void transferTo(WritableByteChannel out, long position, long size) throws ApfloatRuntimeException Transfer to a writable channel, possibly in multiple chunks.- Parameters:
out
- Output channel.position
- Start position of transfer.size
- Total number of bytes to transfer.- Throws:
ApfloatRuntimeException
-
getBlockSize
protected static int getBlockSize()Convenience method for getting the block size (in bytes) for the currentApfloatContext
.- Returns:
- I/O block size, in bytes.
-
getUnitSize
protected abstract int getUnitSize()Size of the element type, in bytes.- Returns:
- Size of the element type, in bytes.
-
getFilename
Filename of the underlying disk data storage.- Returns:
- Filename of the underlying disk data storage.
-
getFileChannel
TheFileChannel
of the underlying disk file.- Returns:
- The
FileChannel
of the underlying disk file.
-
cleanUp
- Throws:
ApfloatRuntimeException
-
gc
- Throws:
ApfloatRuntimeException
-
pad
- Throws:
IOException
ApfloatRuntimeException
-
createFileStorage
- Throws:
ApfloatInternalException
-
referenceFileStorage
private static void referenceFileStorage(DiskDataStorage.FileStorage fileStorage) throws ApfloatInternalException - Throws:
ApfloatInternalException
-
freeFileStorage
private static void freeFileStorage() -
forceFreeFileStorage
- Throws:
ApfloatInternalException
-
getDirectByteBuffer
-