Make Hybrid::switchCases more hybrid
Summary
This MR adds two overloads of Hybrid::switchCases
using StaticIntegralRange
and IntegralRange
. These two ranges can be easily constructed using the range utility Dune::range(size)
with size
an integer or an integral_constant
. Making the switchCases
utility more hybrid by allowing dynamic ranges with dynamic indices makes writing generic code more flexible.
For the implementation to work, the IntegralRange
and staticIntegralRange
are extended by a contains(value)
method to check whether value
is contained in that range.
Example:
Accessing an entry in a vector
Dune::Hybrid::switchCases(Dune::range(Dune::Hybrid::size(vector)), index, [&](auto ii) {
// do something with vector[ii]
});
where the vector can be a MultiTypeVector
or a TupleVector
or a std::vector
or...
Edited by Simon Praetorius