# Class CalculatorColumnSupplement

java.lang.Object
uk.ac.starlink.ttools.filter.CalculatorColumnSupplement

All Implemented Interfaces:
  `ColumnSupplement`

public abstract class CalculatorColumnSupplement extends Object implements ColumnSupplement
ColumnSupplement whose columns are derived by calculating values based on all the columns of another table. To generate any of the columns of this table, a whole row of the input supplement must be read. Concrete implementations of this abstract class must implement the `calculate(Object[])` method.

Since:
  2 Apr 2012
Author:
  Mark Taylor

## Constructor Summary

Constructors
Constructor
Description
`CalculatorColumnSupplement(ColumnSupplement baseSup, uk.ac.starlink.table.ColumnInfo[] outColInfos)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected abstract Object[]`
`calculate(Object[] inRow)`
Performs the calculations which populate the columns of this table.
`SupplementData`
`createSupplementData(uk.ac.starlink.table.RowData rdata)`
Returns a new accessor for the values in the columns defined by this object.
`Object`
`getCell(long irow, int icol)`
Random access read of a cell defined by this object.
`int`
`getColumnCount()`
Returns the number of columns defined by this object.
`uk.ac.starlink.table.ColumnInfo`
`getColumnInfo(int icol)`
Returns the column metadata object for a given column.
`static double`
`getDouble(Object value)`
Utility method to turn an Object into a floating point value.
`Object[]`
`getRow(long irow)`
Random access read of a row defined by this object.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### CalculatorColumnSupplement

public CalculatorColumnSupplement(ColumnSupplement baseSup, uk.ac.starlink.table.ColumnInfo[] outColInfos)
Constructor.

Parameters:
  `baseSup` - base supplement
  `outColInfos` - column metadata for the supplementary columns (length defines column count)

## Method Details

### calculate

protected abstract Object[] calculate(Object[] inRow) throws IOException
Performs the calculations which populate the columns of this table. The input is a row of the base table, and the output is the row of this table.

The implementation must return a new array each time, not repopulate the same `Object[]` array object.

Parameters:
  `inRow` - input column values
Returns:
  output column values (same size as column count)
Throws:
  `IOException`

### getColumnCount

public int getColumnCount()
Description copied from interface: `ColumnSupplement`
Returns the number of columns defined by this object.

Specified by:
  `getColumnCount` in interface `ColumnSupplement`
Returns:
  number of columns

### getColumnInfo

public uk.ac.starlink.table.ColumnInfo getColumnInfo(int icol)
Description copied from interface: `ColumnSupplement`
Returns the column metadata object for a given column.

Specified by:
  `getColumnInfo` in interface `ColumnSupplement`
Parameters:
  `icol` - column index within this object
Returns:
  column metadata for the icol'th column defined by this object

### getRow

public Object[] getRow(long irow) throws IOException
Description copied from interface: `ColumnSupplement`
Random access read of a row defined by this object.

Specified by:
  `getRow` in interface `ColumnSupplement`
Parameters:
  `irow` - row index
Returns:
  array of cell contents for all the cells in this row
Throws:
  `IOException`

### getCell

public Object getCell(long irow, int icol) throws IOException
Description copied from interface: `ColumnSupplement`
Random access read of a cell defined by this object.

Specified by:
  `getCell` in interface `ColumnSupplement`
Parameters:
  `irow` - row index
  `icol` - column index
Returns:
  cell content
Throws:
  `IOException`

### createSupplementData

public SupplementData createSupplementData(uk.ac.starlink.table.RowData rdata) throws IOException
Description copied from interface: `ColumnSupplement`
Returns a new accessor for the values in the columns defined by this object. The supplied row object must be from an appropriate host table; if not, behaviour is undefined.

Specified by:
  `createSupplementData` in interface `ColumnSupplement`
Parameters:
  `rdata` - row accessor providing data from the host table
Returns:
  accessor over row data from supplementary columns
Throws:
  `IOException`

### getDouble

public static double getDouble(Object value)
Utility method to turn an Object into a floating point value. If the submitted value is not a Number (including if it is null), NaN will be returned.

Parameters:
  `value` - object value
Returns:
  floating point value