/**
 * package "containers" for Diab Data FastJ Bubble Sort example program.
 *
 * Contains one class ArrayInt -- implements a simple array of integers
 * to gain two methods beyond basic access methods:
 *
 *      sort()          Sorts an ArrayInt object in ascending order.
 *      toString()      Formats an ArrayInt object for printing.
 */

package containers;

public class ArrayInt {

    protected int data[];

    public ArrayInt(int length) {       // constructor
        data = new int[length];
    }

    // Declare methods "final" (cannot be overridden) for optimization.

    public final int elementAt(int index) {
        return data[index];
    }

    public final void setElementAt(int value, int index) {
        data[index] = value;
    }

    public final int length() {
        return data.length;
    }

    public final void sort() {          // simple bubble sort
        boolean change = true;

        while (change) {
            change = false;

            for (int i = 0; i < length() - 1; ++i) {
                if (data[i] > data[i+1]) {
                    swap(i, i+1);
                    change = true;
                }
            }
        }       
    }

    // "swapInt" is coded in C.
    static native void swapInt(int data[], int index1, int index2);

    public final void swap(int index1, int index2) {
        if (index1 != index2  &&  index1 < data.length  &&
                                  index2 < data.length) {
            swapInt(data, index1, index2);
        }
    }

    /**
     * toString: override the "toString" method of the root class
     * "Object" -- return a string containing all elements of the array
     * in the form "xx, xx, xx, ...". Values < 10 have format " x".
     */

    public final String toString() {
        String s = format(data[0]);

        for (int i = 1; i < data.length; ++i) {
            s += ", " + format(data[i]);
        }
        return s;
    }

    private static final String format(int n) {
        return  (n < 10  ?  " " : "")  +  n;
    }
}
