Package uk.ac.starlink.array

# Class BadHandler

java.lang.Object
uk.ac.starlink.array.BadHandler

public abstract class BadHandler extends Object
Handles bad pixel values. Instances of this class can detect and write values in an array with a `magic' bad value. Since its methods reference values within arrays, client code does not need to be written in a primitive-type-specific fashion.

Obtain an instance of this class using the `getHandler(uk.ac.starlink.array.Type, java.lang.Number)` static method.

It is not expected to be necessary to extend this class for normal purposes, but there is a protected constructor in case this is required. Such subclassing might be useful to provided specialised bad value handlers in which, for instance, floating `NaN` values do not count as bad, or infinite values do. Such subclassing should be done and used with care.

Version:
  $Id$
Author:
  Mark Taylor (Starlink)

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`BadHandler.ArrayHandler`
Class provided for testing and setting bad values in a given primitive array.

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`BadHandler(Type type, Number badValue)`
Constructor which may be used for subclassing.

## Method Summary

Modifier and Type
Method
Description
`abstract BadHandler.ArrayHandler`
`arrayHandler(Object array)`
Returns an `ArrayHandler` object for testing/setting bad values in a given primitive array according to the bad value handling rules of this `BadHandler`.
`boolean`
`equals(Object other)`
`Number`
`getBadValue()`
Gets the bad data value.
`static BadHandler`
`getHandler(Type type, Number badValue)`
Returns an instance of this class capable of dealing with primitives of a given type and using a given bad value.
`Type`
`getType()`
Gets the Type of this handler.
`int`
`hashCode()`
`abstract boolean`
`isBad(Object array, int pos)`
Indicates whether an element of an array represents a bad value for this NDArray.
`abstract Number`
`makeNumber(Object array, int pos)`
Turns a single element of an array into a `Number` object of the appropriate type.
`abstract void`
`putBad(Object array, int pos)`
Writes a single bad value into an array.
`abstract void`
`putBad(Object array, int start, int size)`
Writes a sequence of bad values into an array.
`String`
`toString()`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Constructor Details

### BadHandler

protected BadHandler(Type type, Number badValue)
Constructor which may be used for subclassing.

## Method Details

### isBad

public abstract boolean isBad(Object array, int pos)
Indicates whether an element of an array represents a bad value for this NDArray.

Parameters:
  `array` - the array in which the pixel resides
  `pos` - the position in array of the pixel to be tested.
Throws:
  `ClassCastException` - if array is not an array of primitives with type matching the type of this handler
  `IndexOutOfBoundsException` - if pos is outside the bounds of array

### putBad

public abstract void putBad(Object array, int start, int size)
Writes a sequence of bad values into an array.

Parameters:
  `array` - array into which to write bad values, which must be an array of primitive type matching this handler's Type with at least start+length elements
  `start` - the position in array at which to start writing bad values
  `size` - the number of elements of array to write bad values to
Throws:
  `ClassCastException` - if array is not an array of primitives with type matching the type of this handler
  `IndexOutOfBoundsException` - if access outside the bounds of the array is attempted

### putBad

public abstract void putBad(Object array, int pos)
Writes a single bad value into an array.

Parameters:
  `array` - array into which to write a bad value; it must be an array of primitive type matching this handler's Type with at least pos-1 elements
  `pos` - the position at which to write the bad value
Throws:
  `ClassCastException` - if array is not an array of primitives with type matching the type of this handler
  `IndexOutOfBoundsException` - if access outside the bounds of the array is attempted

### makeNumber

public abstract Number makeNumber(Object array, int pos)
Turns a single element of an array into a `Number` object of the appropriate type. The return value will be one of the wrapper types Byte, Short, Integer, Float or Double wrapping the value in question, unless the array element is bad, in which case the null value will be returned.

Parameters:
  `array` - array containing the value to be converted
  `pos` - the index into array at which the element of interest is to be found
Returns:
  a Number object wrapping the pos'th element of array, or null if that element is bad
Throws:
  `IndexOutOfBoundsException` - if access outside the bounds of the array is attempted

### arrayHandler

public abstract BadHandler.ArrayHandler arrayHandler(Object array)
Returns an `ArrayHandler` object for testing/setting bad values in a given primitive array according to the bad value handling rules of this `BadHandler`. The same functionality can be achieved by use of the `isBad(java.lang.Object, int)` and `putBad(Object,int)` methods of this class, but using an `ArrayHandler` can avoid repeated typecasts and provide better performance.

Throws:
  `ClassCastException` - if array is not an array of primitives with type matching the type of this handler

### getType

public Type getType()
Gets the Type of this handler.

Returns:
  the type

### getBadValue

public Number getBadValue()
Gets the bad data value. This will be an instance of the primitive wrapper class corresponding to this array's type. Any elements matching the number thus represented will be considered to be bad; calling the isBad method on them will return true. The value may be null, in which case no data of integer type is considered bad, but floating point values which are NaN still are.

Returns:
  a Number object of appropriate type wrapping the bad data value. May be null.

### getHandler

public static BadHandler getHandler(Type type, Number badValue)
Returns an instance of this class capable of dealing with primitives of a given type and using a given bad value.

Parameters:
  `type` - a Type object determining what kind of primitive data this handler will deal with
  `badValue` - a Number object giving the magic bad value. This will be an instance of the primitive wrapper class corresponding to this array's type. The value may be null, in which case no data of integer type is considered bad, but floating point values which are NaN still are. In this case a default bad value will be written if the putBad methods are invoked
Returns:
  a suitable BadHandler

### equals

public boolean equals(Object other)

Overrides:
  `equals` in class `Object`

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### toString

public String toString()

Overrides:
  `toString` in class `Object`