g2o
Toggle main menu visibility
Loading...
Searching...
No Matches
g2o
core
optimization_algorithm_factory.h
Go to the documentation of this file.
1
// g2o - General Graph Optimization
2
// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
7
// met:
8
//
9
// * Redistributions of source code must retain the above copyright notice,
10
// this list of conditions and the following disclaimer.
11
// * Redistributions in binary form must reproduce the above copyright
12
// notice, this list of conditions and the following disclaimer in the
13
// documentation and/or other materials provided with the distribution.
14
//
15
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17
// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18
// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27
#ifndef G2O_OPTIMIZATION_ALGORITHM_FACTORY_H
28
#define G2O_OPTIMIZATION_ALGORITHM_FACTORY_H
29
30
#include <iostream>
31
#include <list>
32
#include <memory>
33
34
#include "g2o/config.h"
35
#include "
g2o/stuff/misc.h
"
// ForceLinker for the macros
36
#include "
g2o_core_api.h
"
37
#include "
optimization_algorithm_property.h
"
38
39
// define to get some verbose output
40
// #define G2O_DEBUG_OPTIMIZATION_ALGORITHM_FACTORY
41
42
namespace
g2o
{
43
44
// forward decl
45
class
G2O_CORE_API
OptimizationAlgorithm
;
46
53
class
G2O_CORE_API
AbstractOptimizationAlgorithmCreator
{
54
public
:
55
AbstractOptimizationAlgorithmCreator
(
const
OptimizationAlgorithmProperty
& p);
56
virtual
~AbstractOptimizationAlgorithmCreator
() {}
58
virtual
OptimizationAlgorithm
*
construct
() = 0;
60
const
OptimizationAlgorithmProperty
&
property
()
const
{
return
_property
; }
61
62
protected
:
63
OptimizationAlgorithmProperty
_property
;
64
};
65
73
class
G2O_CORE_API
OptimizationAlgorithmFactory
{
74
public
:
75
typedef
std::list<std::shared_ptr<AbstractOptimizationAlgorithmCreator>>
76
CreatorList
;
77
79
static
OptimizationAlgorithmFactory
*
instance
();
80
82
static
void
destroy
();
83
84
OptimizationAlgorithmFactory
(
OptimizationAlgorithmFactory
const
&) =
delete
;
85
OptimizationAlgorithmFactory
&
operator=
(
OptimizationAlgorithmFactory
const
&) =
86
delete
;
87
91
void
registerSolver
(
92
const
std::shared_ptr<AbstractOptimizationAlgorithmCreator>& c);
93
97
void
unregisterSolver
(
98
const
std::shared_ptr<AbstractOptimizationAlgorithmCreator>& c);
99
103
OptimizationAlgorithm
*
construct
(
104
const
std::string& tag,
105
OptimizationAlgorithmProperty
& solverProperty)
const
;
106
108
void
listSolvers
(std::ostream& os)
const
;
109
111
const
CreatorList
&
creatorList
()
const
{
return
_creator
; }
112
113
protected
:
114
OptimizationAlgorithmFactory
() =
default
;
115
116
CreatorList
_creator
;
117
118
CreatorList::const_iterator
findSolver
(
const
std::string& name)
const
;
119
CreatorList::iterator
findSolver
(
const
std::string& name);
120
121
private
:
122
static
std::unique_ptr<OptimizationAlgorithmFactory>
factoryInstance
;
123
};
124
125
class
RegisterOptimizationAlgorithmProxy
{
126
public
:
127
RegisterOptimizationAlgorithmProxy
(
AbstractOptimizationAlgorithmCreator
* c) {
128
_creator
.reset(c);
129
#ifdef G2O_DEBUG_OPTIMIZATION_ALGORITHM_FACTORY
130
std::cout << __FUNCTION__ <<
": Registering "
<<
_creator
->property().name
131
<<
" of type "
<<
typeid
(*_creator).name() << std::endl;
132
#endif
133
OptimizationAlgorithmFactory::instance
()->
registerSolver
(
_creator
);
134
}
135
136
private
:
137
std::shared_ptr<AbstractOptimizationAlgorithmCreator>
_creator
;
138
};
139
140
}
// namespace g2o
141
142
#if defined _MSC_VER && defined G2O_SHARED_LIBS
143
#define G2O_OAF_EXPORT __declspec(dllexport)
144
#define G2O_OAF_IMPORT __declspec(dllimport)
145
#else
146
#define G2O_OAF_EXPORT
147
#define G2O_OAF_IMPORT
148
#endif
149
160
#define G2O_REGISTER_OPTIMIZATION_LIBRARY(libraryname) \
161
extern "C" void G2O_OAF_EXPORT g2o_optimization_library_##libraryname(void) {}
162
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);
175
181
#define G2O_REGISTER_OPTIMIZATION_ALGORITHM(optimizername, instance) \
182
extern "C" void G2O_OAF_EXPORT g2o_optimization_algorithm_##optimizername( \
183
void) {} \
184
static g2o::RegisterOptimizationAlgorithmProxy \
185
g_optimization_algorithm_proxy_##optimizername(instance);
186
192
#define G2O_USE_OPTIMIZATION_ALGORITHM(optimizername) \
193
extern "C" void G2O_OAF_IMPORT g2o_optimization_algorithm_##optimizername( \
194
void); \
195
static g2o::ForceLinker \
196
g2o_force_optimization_algorithm_link_##optimizername( \
197
g2o_optimization_algorithm_##optimizername);
198
199
#endif
g2o::AbstractOptimizationAlgorithmCreator
base for allocating an optimization algorithm
Definition
optimization_algorithm_factory.h:53
g2o::AbstractOptimizationAlgorithmCreator::construct
virtual OptimizationAlgorithm * construct()=0
allocate a solver operating on optimizer, re-implement for your creator
g2o::AbstractOptimizationAlgorithmCreator::property
const OptimizationAlgorithmProperty & property() const
return the properties of the solver
Definition
optimization_algorithm_factory.h:60
g2o::AbstractOptimizationAlgorithmCreator::~AbstractOptimizationAlgorithmCreator
virtual ~AbstractOptimizationAlgorithmCreator()
Definition
optimization_algorithm_factory.h:56
g2o::AbstractOptimizationAlgorithmCreator::_property
OptimizationAlgorithmProperty _property
Definition
optimization_algorithm_factory.h:63
g2o::AbstractOptimizationAlgorithmCreator::AbstractOptimizationAlgorithmCreator
AbstractOptimizationAlgorithmCreator(const OptimizationAlgorithmProperty &p)
Definition
optimization_algorithm_factory.cpp:39
g2o::OptimizationAlgorithmFactory::registerSolver
void registerSolver(const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
Definition
optimization_algorithm_factory.cpp:53
g2o::OptimizationAlgorithmFactory::creatorList
const CreatorList & creatorList() const
return the underlying list of creators
Definition
optimization_algorithm_factory.h:111
g2o::OptimizationAlgorithmFactory::_creator
CreatorList _creator
Definition
optimization_algorithm_factory.h:116
g2o::OptimizationAlgorithmFactory::operator=
OptimizationAlgorithmFactory & operator=(OptimizationAlgorithmFactory const &)=delete
g2o::OptimizationAlgorithmFactory::findSolver
CreatorList::const_iterator findSolver(const std::string &name) const
Definition
optimization_algorithm_factory.cpp:109
g2o::OptimizationAlgorithmFactory::OptimizationAlgorithmFactory
OptimizationAlgorithmFactory(OptimizationAlgorithmFactory const &)=delete
g2o::OptimizationAlgorithmFactory::construct
OptimizationAlgorithm * construct(const std::string &tag, OptimizationAlgorithmProperty &solverProperty) const
Definition
optimization_algorithm_factory.cpp:74
g2o::OptimizationAlgorithmFactory::instance
static OptimizationAlgorithmFactory * instance()
return the instance
Definition
optimization_algorithm_factory.cpp:46
g2o::OptimizationAlgorithmFactory::CreatorList
std::list< std::shared_ptr< AbstractOptimizationAlgorithmCreator > > CreatorList
Definition
optimization_algorithm_factory.h:76
g2o::OptimizationAlgorithmFactory::factoryInstance
static std::unique_ptr< OptimizationAlgorithmFactory > factoryInstance
Definition
optimization_algorithm_factory.h:122
g2o::OptimizationAlgorithmFactory::destroy
static void destroy()
free the instance
Definition
optimization_algorithm_factory.cpp:86
g2o::OptimizationAlgorithmFactory::listSolvers
void listSolvers(std::ostream &os) const
list the known solvers into a stream
Definition
optimization_algorithm_factory.cpp:91
g2o::OptimizationAlgorithmFactory::unregisterSolver
void unregisterSolver(const std::shared_ptr< AbstractOptimizationAlgorithmCreator > &c)
Definition
optimization_algorithm_factory.cpp:65
g2o::OptimizationAlgorithmFactory::OptimizationAlgorithmFactory
OptimizationAlgorithmFactory()=default
g2o::OptimizationAlgorithm
Generic interface for a non-linear solver operating on a graph.
Definition
optimization_algorithm.h:46
g2o::RegisterOptimizationAlgorithmProxy::_creator
std::shared_ptr< AbstractOptimizationAlgorithmCreator > _creator
Definition
optimization_algorithm_factory.h:137
g2o::RegisterOptimizationAlgorithmProxy::RegisterOptimizationAlgorithmProxy
RegisterOptimizationAlgorithmProxy(AbstractOptimizationAlgorithmCreator *c)
Definition
optimization_algorithm_factory.h:127
g2o_core_api.h
G2O_CORE_API
#define G2O_CORE_API
Definition
g2o_core_api.h:29
misc.h
some general case utility functions
g2o
Definition
dl_wrapper.cpp:55
optimization_algorithm_property.h
g2o::OptimizationAlgorithmProperty
describe the properties of a solver
Definition
optimization_algorithm_property.h:39
Generated on
for g2o by
1.17.0