g2o
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Private Attributes | List of all members
g2o::OptimizationAlgorithmFactory Class Reference

create solvers based on their short name More...

#include <optimization_algorithm_factory.h>

Public Types

typedef std::list< std::shared_ptr< AbstractOptimizationAlgorithmCreator > > CreatorList
 

Public Member Functions

 OptimizationAlgorithmFactory (OptimizationAlgorithmFactory const &)=delete
 
OptimizationAlgorithmFactory & operator= (OptimizationAlgorithmFactory const &)=delete
 
void registerSolver (const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
 
void unregisterSolver (const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
 
OptimizationAlgorithm * construct (const std::string &tag, OptimizationAlgorithmProperty &solverProperty) const
 
void listSolvers (std::ostream &os) const
 list the known solvers into a stream
 
const CreatorList & creatorList () const
 return the underlying list of creators
 

Static Public Member Functions

static OptimizationAlgorithmFactory * instance ()
 return the instance
 
static void destroy ()
 free the instance
 

Protected Member Functions

 OptimizationAlgorithmFactory ()=default
 
CreatorList::const_iterator findSolver (const std::string &name) const
 
CreatorList::iterator findSolver (const std::string &name)
 

Protected Attributes

CreatorList _creator
 

Static Private Attributes

static std::unique_ptr< OptimizationAlgorithmFactory > factoryInstance
 

Detailed Description

create solvers based on their short name

Factory to allocate solvers based on their short name. The Factory is implemented as a singleton and the single instance can be accessed via the instance() function.

Definition at line 73 of file optimization_algorithm_factory.h.

Member Typedef Documentation

◆ CreatorList

Definition at line 76 of file optimization_algorithm_factory.h.

Constructor & Destructor Documentation

◆ OptimizationAlgorithmFactory() [1/2]

g2o::OptimizationAlgorithmFactory::OptimizationAlgorithmFactory ( OptimizationAlgorithmFactory const &  )
delete

◆ OptimizationAlgorithmFactory() [2/2]

g2o::OptimizationAlgorithmFactory::OptimizationAlgorithmFactory ( )
protecteddefault

Member Function Documentation

◆ construct()

OptimizationAlgorithm * g2o::OptimizationAlgorithmFactory::construct ( const std::string &  tag,
OptimizationAlgorithmProperty &  solverProperty 
) const

construct a solver based on its name, e.g., var, fix3_2_cholmod

Definition at line 74 of file optimization_algorithm_factory.cpp.

76 {
77 CreatorList::const_iterator foundIt = findSolver(name);
78 if (foundIt != _creator.end()) {
79 solverProperty = (*foundIt)->property();
80 return (*foundIt)->construct();
81 }
82 G2O_WARN("SOLVER FACTORY: Unable to create solver {}", name);
83 return nullptr;
84}
CreatorList::const_iterator findSolver(const std::string &name) const
#define G2O_WARN(...)
Definition logger.h:88

References _creator, findSolver(), and G2O_WARN.

Referenced by MainWindow::allocateSolver(), g2o::SparseOptimizerOnline::initSolver(), and main().

◆ creatorList()

const CreatorList & g2o::OptimizationAlgorithmFactory::creatorList ( ) const
inline

return the underlying list of creators

Definition at line 111 of file optimization_algorithm_factory.h.

111{ return _creator; }

Referenced by MainWindow::updateDisplayedSolvers().

◆ destroy()

void g2o::OptimizationAlgorithmFactory::destroy ( )
static

free the instance

Definition at line 86 of file optimization_algorithm_factory.cpp.

86 {
87 std::unique_ptr<OptimizationAlgorithmFactory> aux;
88 factoryInstance.swap(aux);
89}
static std::unique_ptr< OptimizationAlgorithmFactory > factoryInstance

References factoryInstance.

◆ findSolver() [1/2]

OptimizationAlgorithmFactory::CreatorList::iterator g2o::OptimizationAlgorithmFactory::findSolver ( const std::string &  name)
protected

Definition at line 119 of file optimization_algorithm_factory.cpp.

119 {
120 for (CreatorList::iterator it = _creator.begin(); it != _creator.end();
121 ++it) {
122 const OptimizationAlgorithmProperty& sp = (*it)->property();
123 if (sp.name == name) return it;
124 }
125 return _creator.end();
126}

References _creator, and g2o::OptimizationAlgorithmProperty::name.

◆ findSolver() [2/2]

OptimizationAlgorithmFactory::CreatorList::const_iterator g2o::OptimizationAlgorithmFactory::findSolver ( const std::string &  name) const
protected

Definition at line 109 of file optimization_algorithm_factory.cpp.

109 {
110 for (CreatorList::const_iterator it = _creator.begin(); it != _creator.end();
111 ++it) {
112 const OptimizationAlgorithmProperty& sp = (*it)->property();
113 if (sp.name == name) return it;
114 }
115 return _creator.end();
116}

References _creator, and g2o::OptimizationAlgorithmProperty::name.

Referenced by construct(), registerSolver(), and unregisterSolver().

◆ instance()

OptimizationAlgorithmFactory * g2o::OptimizationAlgorithmFactory::instance ( )
static

◆ listSolvers()

void g2o::OptimizationAlgorithmFactory::listSolvers ( std::ostream &  os) const

list the known solvers into a stream

Definition at line 91 of file optimization_algorithm_factory.cpp.

91 {
92 size_t solverNameColumnLength = 0;
93 for (CreatorList::const_iterator it = _creator.begin(); it != _creator.end();
94 ++it)
95 solverNameColumnLength =
96 std::max(solverNameColumnLength, (*it)->property().name.size());
97 solverNameColumnLength += 4;
98
99 for (CreatorList::const_iterator it = _creator.begin(); it != _creator.end();
100 ++it) {
101 const OptimizationAlgorithmProperty& sp = (*it)->property();
102 os << sp.name;
103 for (size_t i = sp.name.size(); i < solverNameColumnLength; ++i) os << ' ';
104 os << sp.type << " \t" << sp.desc << endl;
105 }
106}

References _creator, g2o::OptimizationAlgorithmProperty::desc, g2o::OptimizationAlgorithmProperty::name, and g2o::OptimizationAlgorithmProperty::type.

Referenced by main().

◆ operator=()

OptimizationAlgorithmFactory & g2o::OptimizationAlgorithmFactory::operator= ( OptimizationAlgorithmFactory const &  )
delete

◆ registerSolver()

void g2o::OptimizationAlgorithmFactory::registerSolver ( const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &  c)

register a specific creator for allocating a solver

Definition at line 53 of file optimization_algorithm_factory.cpp.

54 {
55 const string& name = c->property().name;
56 CreatorList::iterator foundIt = findSolver(name);
57 if (foundIt != _creator.end()) {
58 _creator.erase(foundIt);
59 G2O_WARN("SOLVER FACTORY: Overwriting Solver creator {}", name);
60 assert(0);
61 }
62 _creator.push_back(c);
63}

References _creator, findSolver(), and G2O_WARN.

Referenced by g2o::RegisterOptimizationAlgorithmProxy::RegisterOptimizationAlgorithmProxy().

◆ unregisterSolver()

void g2o::OptimizationAlgorithmFactory::unregisterSolver ( const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &  c)

unregister a specific creator for allocating a solver

Definition at line 65 of file optimization_algorithm_factory.cpp.

66 {
67 const string& name = c->property().name;
68 CreatorList::iterator foundIt = findSolver(name);
69 if (foundIt != _creator.end()) {
70 _creator.erase(foundIt);
71 }
72}

References _creator, and findSolver().

Member Data Documentation

◆ _creator

CreatorList g2o::OptimizationAlgorithmFactory::_creator
protected

◆ factoryInstance

std::unique_ptr< OptimizationAlgorithmFactory > g2o::OptimizationAlgorithmFactory::factoryInstance
staticprivate

Definition at line 122 of file optimization_algorithm_factory.h.

Referenced by destroy(), and instance().


The documentation for this class was generated from the following files: