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 traits
using 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
This MR is part of #107 to improve performance on matrices with low number of entries per rows and nested blocking of
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.