27#ifndef G2O_OPTIMIZATION_ALGORITHM_FACTORY_H
28#define G2O_OPTIMIZATION_ALGORITHM_FACTORY_H
34#include "g2o/config.h"
75 typedef std::list<std::shared_ptr<AbstractOptimizationAlgorithmCreator>>
82 static void destroy();
92 const std::shared_ptr<AbstractOptimizationAlgorithmCreator>& c);
97 void unregisterSolver(
98 const std::shared_ptr<AbstractOptimizationAlgorithmCreator>& c);
104 const std::string& tag,
108 void listSolvers(std::ostream& os)
const;
118 CreatorList::const_iterator findSolver(
const std::string& name)
const;
119 CreatorList::iterator findSolver(
const std::string& name);
129#ifdef G2O_DEBUG_OPTIMIZATION_ALGORITHM_FACTORY
130 std::cout << __FUNCTION__ <<
": Registering " <<
_creator->property().name
131 <<
" of type " <<
typeid(*_creator).name() << std::endl;
137 std::shared_ptr<AbstractOptimizationAlgorithmCreator>
_creator;
142#if defined _MSC_VER && defined G2O_SHARED_LIBS
143#define G2O_OAF_EXPORT __declspec(dllexport)
144#define G2O_OAF_IMPORT __declspec(dllimport)
146#define G2O_OAF_EXPORT
147#define G2O_OAF_IMPORT
160#define G2O_REGISTER_OPTIMIZATION_LIBRARY(libraryname) \
161 extern "C" void G2O_OAF_EXPORT g2o_optimization_library_##libraryname(void) {}
170#define G2O_USE_OPTIMIZATION_LIBRARY(libraryname) \
171 extern "C" void G2O_OAF_IMPORT g2o_optimization_library_##libraryname(void); \
172 static g2o::ForceLinker \
173 g2o_force_optimization_algorithm_library_##libraryname( \
174 g2o_optimization_library_##libraryname);
181#define G2O_REGISTER_OPTIMIZATION_ALGORITHM(optimizername, instance) \
182 extern "C" void G2O_OAF_EXPORT g2o_optimization_algorithm_##optimizername( \
184 static g2o::RegisterOptimizationAlgorithmProxy \
185 g_optimization_algorithm_proxy_##optimizername(instance);
192#define G2O_USE_OPTIMIZATION_ALGORITHM(optimizername) \
193 extern "C" void G2O_OAF_IMPORT g2o_optimization_algorithm_##optimizername( \
195 static g2o::ForceLinker \
196 g2o_force_optimization_algorithm_link_##optimizername( \
197 g2o_optimization_algorithm_##optimizername);
base for allocating an optimization algorithm
virtual OptimizationAlgorithm * construct()=0
allocate a solver operating on optimizer, re-implement for your creator
const OptimizationAlgorithmProperty & property() const
return the properties of the solver
virtual ~AbstractOptimizationAlgorithmCreator()
OptimizationAlgorithmProperty _property
create solvers based on their short name
void registerSolver(const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
const CreatorList & creatorList() const
return the underlying list of creators
OptimizationAlgorithmFactory & operator=(OptimizationAlgorithmFactory const &)=delete
OptimizationAlgorithmFactory(OptimizationAlgorithmFactory const &)=delete
static OptimizationAlgorithmFactory * instance()
return the instance
std::list< std::shared_ptr< AbstractOptimizationAlgorithmCreator > > CreatorList
static std::unique_ptr< OptimizationAlgorithmFactory > factoryInstance
OptimizationAlgorithmFactory()=default
Generic interface for a non-linear solver operating on a graph.
std::shared_ptr< AbstractOptimizationAlgorithmCreator > _creator
RegisterOptimizationAlgorithmProxy(AbstractOptimizationAlgorithmCreator *c)
some general case utility functions
describe the properties of a solver