Nick Sabalausky:

T opIndex(size_t row, size_t col) const {
    immutable size_t i = this.dim.offset(row, col);
    if (i >= this.dim.size) {
// TODO - have to learn exception handling in D first. :P
    }
    return this.data[i];
}

No need for the bounds check. D already does bounds checks automatically

But the row-column bounds of the matrix are not the same as the 1D bounds of the 1D array. You can have out-of-column-bounds and still be inside the 1D bounds. So that test should go in the precondition and it should test row and col separately:

T opIndex(in size_t row, in size_t col) const pure nothrow
in {
    assert(row < nRows);
    assert(col < nCols);
} body {
    return data[dim.offset(row, col)];
}

Bye,
bearophile

Reply via email to