@Override
    public Integer value(final Matrix<TypeOfValue> matrix) {
        int column = this._column;
        int lowRow = this._lowerRowBound;
        int highRow = this._upperRowBound;
        Operator<TypeOfValue, TypeOfValue, Boolean> comparer = this._comparer;
        if (highRow < lowRow)
            throw new IllegalStateException("The bounds on the rows are incorrectly specified.");
        else if (matrix == null)
            throw new NullPointerException("Matrix not properly specified.");
        else if (matrix.getLastColumn() < column ||
                column < matrix.getFirstColumn())
            throw new IllegalArgumentException("Matrix does not contain the specified column.");
        else if (lowRow < matrix.getFirstRow() || matrix.getLastRow() < highRow)
            throw new IllegalArgumentException("Matrix does not contain the specified rows.");
        int index = lowRow - 1;
        TypeOfValue value = null;
        for (int row = lowRow; row <= highRow; row++)
        {
            TypeOfValue v = matrix.getValue(row, column);
            if (value == null || comparer.value(value, v))
            {
                index = row;
                value = v;
            }
        }
        return index;
    }