-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolver_factory.cpp
42 lines (30 loc) · 1.01 KB
/
solver_factory.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "factory/solver_factory.h"
#include "solvers/bfs_solver.h"
#include <memory>
namespace mapf::solver {
SolverFactory::SolverFactory() {
#define REGISTER(NAME, SOLVER_CLS, ...) \
factory_map_[#NAME] = []() { return std::make_shared<SOLVER_CLS>(__VA_ARGS__); }
REGISTER(bfs_solver, BFSSolver);
#undef REGISTER
}
SolverFactory& SolverFactory::Instance() {
static SolverFactory instance;
return instance;
}
SolverPtr SolverFactory::CreateSolver(const std::string& name) const {
if (auto it = factory_map_.find(name); it != factory_map_.end()) {
return (it->second)();
}
return nullptr;
}
SolverFactory::SolverFactoryMap::const_iterator SolverFactory::find(const std::string& name) const {
return factory_map_.find(name);
}
SolverFactory::SolverFactoryMap::const_iterator SolverFactory::cbegin() const {
return factory_map_.cbegin();
}
SolverFactory::SolverFactoryMap::const_iterator SolverFactory::cend() const {
return factory_map_.cend();
}
} // namespace mapf::solver