Draft: Improve support on BCRS custom allocators
Currently, allocators in the BCRS matrix do not allow certain operations desired when using custom allocators:
- An allocator that models a standard Allocator requirements will fail to compile in BCRSMatrix and Blocked vectors due to
using size_type = A::size_type
. This is changed in this MR by invoking the allocator traitsusing size_type = std::allocator_traits<A>::size_type
. - The allocator cannot be set a priory. This is unfortunate because stateful allocators would allow contiguous allocation on different BCRS matrices (e.g. sub-blocks of a bigger BCRS matrix) by sharing the allocator between the different matrices. This is changed in this MR by allowing to get and set the allocator and by copying them during matrix copies. Naturally, this does not change the behavior on stateless allocators like
std::allocator<B>
.
This MR is part of #107 to improve performance on matrices with low number of entries per rows and nested blocking of BCRSMatrix
.
Stateful allocators are out of scope of this MR, thus, I cannot provide tests that check correct behavior on other than std::allocator<B>
. If you want this functionality, let me know and I can push a MR with an implementation.
Edited by Santiago Ospina De Los Ríos