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
 
OptimizationAlgorithmFactoryoperator= (OptimizationAlgorithmFactory const &)=delete
 
void registerSolver (const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
 
void unregisterSolver (const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
 
OptimizationAlgorithmconstruct (const std::string &tag, OptimizationAlgorithmProperty &solverProperty) const
 
void listSolvers (std::ostream &os) const
 list the known solvers into a stream
 
const CreatorListcreatorList () const
 return the underlying list of creators
 

Static Public Member Functions

static OptimizationAlgorithmFactoryinstance ()
 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< OptimizationAlgorithmFactoryfactoryInstance
 

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: