Package nom.tam.util
Class ColumnTable<T>
java.lang.Object
nom.tam.util.ColumnTable<T>
- All Implemented Interfaces:
DataTable
A data table is conventionally considered to consist of rows and columns,
where the structure within each column is constant, but different columns may
have different structures. I.e., structurally columns may differ but rows are
identical. Typically tabular data is usually stored in row order which can
make it extremely difficult to access efficiently using Java. This class
provides efficient access to data which is stored in row order and allows
users to get and set the elements of the table. The table can consist only of
arrays of primitive types. Data stored in column order can be efficiently
read and written using the BufferedDataXputStream classes. The table is
represented entirely as a set of one-dimensional primitive arrays. For a
given column, a row consists of some number of contiguous elements of the
array. Each column is required to have the same number of rows. Information
regarding the dimensionality of columns and possible data pointers is
retained for use by clients which can understand them.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Object[]
The columns to be read/writtenprivate Class<?>[]
private boolean[][]
private byte[][]
private char[][]
private double[][]
private T
Allow the client to provide opaque data.private float[][]
private int[][]
private long[][]
private static final int
private static final int
private int
The number of rowsprivate static final Map<PrimitiveType<?>,
ColumnTable.PointerAccess<?>> private static final ColumnTable.PointerAccess<?>[]
private short[][]
private int[]
The number of elements in a row for each columnprivate char[]
The base type of each row (using the second character of the [x class names of the arrays. -
Constructor Summary
ConstructorsConstructorDescriptionColumnTable
(Object[] arrays, int[] sizes) Create the object after checking consistency. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Add a column .protected void
addPointer
(Object data) Add a pointer in the pointer lists.void
Add a row to the table.protected void
checkArrayConsistency
(Object[] newArrays, int[] newSizes) Check that the columns and sizes are consistent.private int
checkColumnConsistency
(Object data, String classname, int ratio, int size) copy()
void
deleteColumns
(int start, int len) Delete a contiguous set of columns from the table.void
deleteRow
(int row) Delete a row from the table.void
deleteRows
(int row, int length) Delete a contiguous set of rows from the table.private <ArrayType>
ArrayTypeextendArray
(ArrayType originalArray, Object data) Class<?>[]
getBases()
Get the base classes of the columns.getColumn
(int col) Get a particular column.Object[]
getElement
(int row, int col) Get a element of the table.int
getNCols()
Get the number of columns in the table.int
getNRows()
Get the number of rows in the table.getRow
(int row) Get a row of data.int[]
getSizes()
char[]
getTypes()
Get the characters describing the base classes of the columns.protected void
Set the pointer arrays for the eight primitive types to point to the appropriate elements of arrays.void
read
(ArrayDataInput is) Read a table.void
read
(ArrayDataInput is, int rowStart, int rowEnd, int columnNr) Read a column of a table.private ColumnTable.PointerAccess<Object>
selectPointerAccessor
(Object data) void
Set the values in a particular column.void
setElement
(int row, int col, Object x) Modify an element of the table.void
setExtraState
(T opaque) Store additional information that may be needed by the client to regenerate initial arrays.void
Modify a row of data.private void
Actually perform the initialization.void
write
(ArrayDataOutput os) Write a table.void
write
(ArrayDataOutput os, int rowStart, int rowEnd, int columnNr) Write a column of a table.
-
Field Details
-
MAX_COLUMN_INDEXES
private static final int MAX_COLUMN_INDEXES- See Also:
-
MAX_TYPE_VALUE
private static final int MAX_TYPE_VALUE- See Also:
-
POINTER_ACCESSORS
-
POINTER_ACCESSORS_BY_TYPE
-
arrays
The columns to be read/written -
sizes
private int[] sizesThe number of elements in a row for each column -
nrow
private int nrowThe number of rows -
types
private char[] typesThe base type of each row (using the second character of the [x class names of the arrays. -
bases
-
bytePointers
private byte[][] bytePointers -
shortPointers
private short[][] shortPointers -
intPointers
private int[][] intPointers -
longPointers
private long[][] longPointers -
floatPointers
private float[][] floatPointers -
doublePointers
private double[][] doublePointers -
charPointers
private char[][] charPointers -
booleanPointers
private boolean[][] booleanPointers -
extraState
Allow the client to provide opaque data.
-
-
Constructor Details
-
ColumnTable
Create the object after checking consistency.- Parameters:
arrays
- An array of one-d primitive arrays.sizes
- The number of elements in each row for the corresponding column- Throws:
TableException
- if the structure of the columns is not consistent
-
-
Method Details
-
addColumn
Add a column .- Parameters:
newColumn
- the column to add.size
- size for the column- Throws:
TableException
- if the structure of the new column does not fit the structure of the rows/columns
-
addPointer
Add a pointer in the pointer lists.- Parameters:
data
- data pointer to add- Throws:
TableException
- if the structure of the specified array does not fit the structure of the rows/columns
-
selectPointerAccessor
-
extendArray
-
addRow
Add a row to the table. This method is very inefficient for adding multiple rows and should be avoided if possible.- Parameters:
row
- the row to add- Throws:
TableException
- if the structure of the specified array does not fit the structure of the rows/columns
-
checkArrayConsistency
Check that the columns and sizes are consistent. Inconsistencies include:- arrays and sizes have different lengths.
- an element of arrays is not a primitive array.
- the size of an array is not divisible by the sizes entry.
- the number of rows differs for the columns.
- Parameters:
newArrays
- The arrays defining the columns.newSizes
- The number of elements in each row for the column.- Throws:
TableException
- if the table was inconsistent
-
checkColumnConsistency
private int checkColumnConsistency(Object data, String classname, int ratio, int size) throws TableException - Throws:
TableException
-
copy
- Throws:
TableException
-
deleteColumns
Delete a contiguous set of columns from the table.- Parameters:
start
- The first column (0-indexed) to be deleted.len
- The number of columns to be deleted.- Throws:
TableException
- if the request goes outside the boundaries of the table or if the length is negative.
-
deleteRow
Delete a row from the table.- Parameters:
row
- The row (0-indexed) to be deleted.- Throws:
TableException
- if the request goes outside the boundaries of the table or if the length is negative.
-
deleteRows
Delete a contiguous set of rows from the table.- Parameters:
row
- The row (0-indexed) to be deleted.length
- The number of rows to be deleted.- Throws:
TableException
- if the request goes outside the boundaries of the table or if the length is negative.
-
getBases
Get the base classes of the columns.- Returns:
- An array of Class objects, one for each column.
-
getColumn
Get a particular column. -
getColumns
- Returns:
- the actual data arrays
-
getElement
Get a element of the table.- Specified by:
getElement
in interfaceDataTable
- Parameters:
row
- The row desired.col
- The column desired.- Returns:
- A primitive array containing the information. Note that an array will be returned even if the element is a scalar.
-
getExtraState
- Returns:
- the pointer state
-
getNCols
public int getNCols()Get the number of columns in the table. -
getNRows
public int getNRows()Get the number of rows in the table. -
getRow
Get a row of data. -
getSizes
public int[] getSizes() -
getTypes
public char[] getTypes()Get the characters describing the base classes of the columns.- Returns:
- An array of char's, one for each column.
-
initializePointers
protected void initializePointers()Set the pointer arrays for the eight primitive types to point to the appropriate elements of arrays. -
read
Read a table.- Parameters:
is
- The input stream to read from.- Throws:
IOException
- if the reading failed
-
setColumn
Set the values in a particular column. The new values must match the old in length but not necessarily in type.- Specified by:
setColumn
in interfaceDataTable
- Parameters:
col
- The column to modify.newColumn
- The new column data. This should be a primitive array.- Throws:
TableException
- Thrown when the new data is not commenserable with information in the table.
-
setElement
Modify an element of the table.- Specified by:
setElement
in interfaceDataTable
- Parameters:
row
- The row containing the element.col
- The column containing the element.x
- The new datum. This should be 1-d primitive array.- Throws:
TableException
- Thrown when the new data is not of the same type as the data it replaces.
-
setExtraState
Store additional information that may be needed by the client to regenerate initial arrays.- Parameters:
opaque
- the extra state to set.
-
setRow
Modify a row of data.- Specified by:
setRow
in interfaceDataTable
- Parameters:
row
- The row to be modified.x
- The data to be modified. This should be an array of objects. It is described as an Object here since other table implementations may use other methods to store the data (e.g., @see nom.tam.util.ColumnTable)- Throws:
TableException
-
setup
Actually perform the initialization.- Parameters:
newArrays
- An array of one-d primitive arrays.newSizes
- The number of elements in each row for the corresponding column- Throws:
TableException
- if the structure of the columns is not consistent
-
write
Write a table.- Parameters:
os
- the output stream to write to.- Throws:
IOException
- if the write operation failed
-
write
Write a column of a table.- Parameters:
os
- the output stream to write to.rowStart
- first row to writerowEnd
- row number that should not be written anymorecolumnNr
- zero based column number to write.- Throws:
IOException
- if the write operation failed
-
read
Read a column of a table.- Parameters:
is
- The input stream to read from.rowStart
- first row to readrowEnd
- row number that should not be read anymorecolumnNr
- the columnNumber to read.- Throws:
IOException
- if the reading failed
-