15#include <unordered_map>
27template <
typename SolverInterface,
28 template <
typename ShapeFunction>
29 class SolverImplementationTplTpl>
34 static std::unordered_map<std::type_index, SolverIntfPtr>
initSolvers()
36 std::unordered_map<std::type_index, SolverIntfPtr> solvers;
38 auto at_least_1D = []<
typename ET>(ET*)
39 {
return ET::Element::dimension >= 1; };
41 auto create_and_insert_solver = [&solvers]<
typename ET>(ET*)
43 using SolverImplementation =
44 SolverImplementationTplTpl<typename ET::ShapeFunction>;
46 solvers[std::type_index(
typeid(
typename ET::Element))] =
47 std::make_unique<SolverImplementation>();
50 using ElementTraitsFiltered =
34 static std::unordered_map<std::type_index, SolverIntfPtr>
initSolvers() {
…}
59 static const std::unordered_map<std::type_index, SolverIntfPtr>
solvers_;
64 auto const type_idx = std::type_index(
typeid(e));
65 auto const it_type_solver =
solvers_.find(type_idx);
67 if (it_type_solver !=
solvers_.end())
69 return *it_type_solver->second;
72 "You are trying to get a solver for an unknown mesh element "
79template <
typename SolverInterface,
81 class SolverImplementationTplTpl>
82const std::unordered_map<std::type_index, std::unique_ptr<SolverInterface>>
83 SolverByElementTypeRegistry<SolverInterface,
84 SolverImplementationTplTpl>::solvers_{
85 SolverByElementTypeRegistry<SolverInterface,
86 SolverImplementationTplTpl>::initSolvers()};
static std::unordered_map< std::type_index, SolverIntfPtr > initSolvers()
static SolverInterface const & getFor(MeshLib::Element const &e)
std::unique_ptr< SolverInterface > SolverIntfPtr
static const std::unordered_map< std::type_index, SolverIntfPtr > solvers_
void foreach(Function &&f)
decltype(auto) filter(Pred pred)