This removes all stride support from #1582, which removes most of the heavy iterator functionality added in the other PR.
It relies on zip_iterator to provide both enumerating
for (auto [nonzero_index, column, value] : matrix.enumerated()[row]) and non-enumerating
for (auto [column, value] : matrix[row]) iteration through a matrix, and uses pairs of pointers to represent ranges of column indices or values.
The two commits add the baseline first and C++17 structured binding support second.
This removes all stride support from #1582, which removes most of the heavy
iterator
functionality added in the other PR. It relies onzip_iterator
to provide both enumeratingfor (auto [nonzero_index, column, value] : matrix.enumerated()[row])
and non-enumeratingfor (auto [column, value] : matrix[row])
iteration through a matrix, and uses pairs of pointers to represent ranges of column indices or values. The two commits add the baseline first and C++17 structured binding support second.TODO