function Array1DTracer(module) {
    return Array2DTracer.call(this, module || Array1DTracer);
}

Array1DTracer.prototype = $.extend(true, Object.create(Array2DTracer.prototype), {
    constructor: Array1DTracer,
    _setData: function (D) {
        return Array2DTracer.prototype._setData.call(this, [D]);
    },
    _notify: function (idx1, idx2) {
        if (idx2 === undefined) {
            Array2DTracer.prototype._notify.call(this, 0, idx1);
        } else {
            Array2DTracer.prototype._notify.call(this, 0, idx1, 0, idx2);
        }
    },
    _select: function (s, e) {
        if (e === undefined) {
            Array2DTracer.prototype._select.call(this, 0, s);
        } else {
            Array2DTracer.prototype._selectRow.call(this, 0, s, e);
        }
    },
    _selectSet: function (indexes) {
        var coords = [];
        indexes.forEach(function (index) {
            coords.push({
                x: 0,
                y: index
            });
        });
        Array2DTracer.prototype._selectSet.call(this, coords);
    },
    _deselect: function (s, e) {
        if (e === undefined) {
            Array2DTracer.prototype._deselect.call(this, 0, s);
        } else {
            Array2DTracer.prototype._deselectRow.call(this, 0, s, e);
        }
    },
    _deselectSet: function (indexes) {
        var coords = [];
        indexes.forEach(function (index) {
            coords.push({
                x: 0,
                y: index
            });
        });
        Array2DTracer.prototype._deselectSet.call(this, coords);
    }
});

var Array1D = {
    random: function (N, min, max) {
        return Array2D.random(1, N, min, max)[0];
    },
    randomSorted: function (N, min, max) {
        return Array2D.randomSorted(1, N, min, max)[0];
    }
};