On Monday, 17 February 2020 at 20:08:24 UTC, Adnan wrote:
On Monday, 17 February 2020 at 14:34:44 UTC, Simen Kjærås wrote:
On Monday, 17 February 2020 at 14:04:34 UTC, Adnan wrote:
//
All in all, I end up with this code:
module strassens_matmul
package {
T[][] mulIterative(T)(const T[][] mat1, const T[][] mat2) {
auto result = createMatrix!T(getRowSize!T(mat1),
getColumnSize!T(mat2));
foreach (row; 0 .. mat1.getRowSize()) {
foreach (column; 0 .. mat2.getColumnSize()) {
T value;
foreach (i; 0 .. mat1.getRowSize()) {
value += mat1.getPointCopy(row, i) *
mat2.getPointCopy(i, column);
}
*result.getPointPtr(row, column) = value;
}
}
return result;
}
}
Aren’t these passing by values? That’s why I used ref. Plus
since I don’t want to change the arrays in the function scope I
used const scope.
In D, the type `T[]` is not an array like in C, but a slice,
containing a pointer to some data and an integer indicating the
array's length. So when you pass it to a function by value, only
the pointer and length are copied, not the data itself.
You can read more about D's slices in this article:
https://dlang.org/articles/d-array-article.html