## nom.tam.util
Class ArrayFuncs

    java.lang.Object
      nom.tam.util.ArrayFuncs

public class ArrayFuncs
extends Object

This is a package of static functions which perform computations on arrays. Generally these routines attempt to complete without throwing errors by ignoring data they cannot understand.

Constructor Summary
`ArrayFuncs()`

Method Summary
`static String` `arrayDescription(Object o)` Generate a description of an array (presumed rectangular).
`static int` `computeSize(Object o)` Compute the size of an object.
`static Object` `convertArray(Object array, Class newType)` Convert an array to a specified type.
`static void` `copyArray(Object original, Object copy)` Copy one array into another.
`static Object` `curl(Object input, int[] dimens)` Curl an input array up into a multi-dimensional array.
`static Object` `deepClone(Object o)` Try to create a deep clone of an Array or a standard clone of a scalar.
`protected static int` `doCurl(Object input, Object output, int[] dimens, int offset)` Do the curling of the 1-d to multi-d array.
`protected static int` `doFlatten(Object input, Object output, int offset)` This routine does the actually flattening of multi-dimensional arrays.
`static void` `examinePrimitiveArray(Object o)` Examine the structure of an array in detail.
`static Object` `flatten(Object input)` Given an array of arbitrary dimensionality return the array flattened into a single dimension.
`static Object` `generateArray(Class baseType, int[] dims)` Create an array and populate it with a test pattern.
`static Object` `genericClone(Object o)` Clone an Object if possible.
`static Class` `getBaseClass(Object o)` This routine returns the base class of an object.
`static int` `getBaseLength(Object o)` This routine returns the size of the base element of an array.
`static int[]` `getDimensions(Object o)` Find the dimensions of an object.
`static void` `main(String[] args)` Test and demonstrate the ArrayFuncs methods.
`static byte` `testPattern(Object o, byte start)` Just create a simple pattern cycling through valid byte values.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ArrayFuncs

    public ArrayFuncs()

Method Detail

### computeSize

    public static int computeSize(Object o)

  Compute the size of an object. Note that this only handles arrays or scalars of the primitive objects and Strings. It returns 0 for any object array element it does not understand.

  Parameters:
    `o` - The object whose size is desired.

### deepClone

    public static Object deepClone(Object o)

  Try to create a deep clone of an Array or a standard clone of a scalar. The object may comprise arrays of any primitive type or any Object type which implements Cloneable. However, if the Object is some kind of collection, e.g., a Vector then only a shallow copy of that object is made. I.e., deep refers only to arrays.

  Parameters:
    `o` - The object to be copied.

### genericClone

    public static Object genericClone(Object o)

  Clone an Object if possible. This method returns an Object which is a clone of the input object. It checks if the method implements the Cloneable interface and then uses reflection to invoke the clone method. This can't be done directly since as far as the compiler is concerned the clone method for Object is protected and someone could implement Cloneable but leave the clone method protected. The cloning can fail in a variety of ways which are trapped so that it returns null instead. This method will generally create a shallow clone. If you wish a deep copy of an array the method deepClone should be used.

  Parameters:
    `o` - The object to be cloned.

### copyArray

    public static void copyArray(Object original,
                                 Object copy)

  Copy one array into another. This function copies the contents of one array into a previously allocated array. The arrays must agree in type and size.

  Parameters:
    `original` - The array to be copied.
    `copy` - The array to be copied into. This array must already be fully allocated.

### getDimensions

    public static int[] getDimensions(Object o)

  Find the dimensions of an object. This method returns an integer array with the dimensions of the object o which should usually be an array. It returns an array of dimension 0 for scalar objects and it returns -1 for dimension which have not been allocated, e.g., int[][][] x = new int[100][][]; should return [100,-1,-1].

  Parameters:
    `o` - The object to get the dimensions of.

### getBaseClass

    public static Class getBaseClass(Object o)

  This routine returns the base class of an object. This is just the class of the object for non-arrays.

### getBaseLength

    public static int getBaseLength(Object o)

  This routine returns the size of the base element of an array.

  Parameters:
    `o` - The array object whose base length is desired.
  Returns:
    the size of the object in bytes, 0 if null, or -1 if not a primitive array.

### generateArray

    public static Object generateArray(Class baseType,
                                       int[] dims)

  Create an array and populate it with a test pattern.

  Parameters:
    `baseType` - The base type of the array. This is expected to be a numeric type, but this is not checked.
    `dims` - The desired dimensions.
  Returns:
    An array object populated with a simple test pattern.

### testPattern

    public static byte testPattern(Object o,
                                   byte start)

  Just create a simple pattern cycling through valid byte values. We use bytes because they can be cast to any other numeric type.

  Parameters:
    `o` - The array in which the test pattern is to be set.
    `start` - The value for the first element.

### arrayDescription

    public static String arrayDescription(Object o)

  Generate a description of an array (presumed rectangular).

  Parameters:
    `o` - The array to be described.

### examinePrimitiveArray

    public static void examinePrimitiveArray(Object o)

  Examine the structure of an array in detail.

  Parameters:
    `o` - The array to be examined.

### flatten

    public static Object flatten(Object input)

  Given an array of arbitrary dimensionality return the array flattened into a single dimension.

  Parameters:
    `input` - The input array.

### doFlatten

    protected static int doFlatten(Object input,
                                   Object output,
                                   int offset)

  This routine does the actually flattening of multi-dimensional arrays.

  Parameters:
    `input` - The input array to be flattened.
    `output` - The flattened array.
    `offset` - The current offset within the output array.
  Returns:
    The number of elements within the array.

### curl

    public static Object curl(Object input,
                              int[] dimens)

  Curl an input array up into a multi-dimensional array.

  Parameters:
    `input` - The one dimensional array to be curled.
    `dimens` - The desired dimensions
  Returns:
    The curled array.

### doCurl

    protected static int doCurl(Object input,
                                Object output,
                                int[] dimens,
                                int offset)

  Do the curling of the 1-d to multi-d array.

  Parameters:
    `input` - The 1-d array to be curled.
    `output` - The multi-dimensional array to be filled.
    `dimens` - The desired output dimensions.
    `offset` - The current offset in the input array.
  Returns:
    The number of elements curled.

### convertArray

    public static Object convertArray(Object array,
                                      Class newType)

  Convert an array to a specified type. This method supports conversions only among the primitive numeric types.

  Parameters:
    `array` - A possibly multidimensional array to be converted.
    `newType` - The desired output type. This should be one of the class descriptors for primitive numeric data, e.g., double.type.

### main

    public static void main(String[] args)

  Test and demonstrate the ArrayFuncs methods.

  Parameters:
    `args` - Unused.