/usr/include/roboptim/core/solver-factory.hh is in libroboptim-core-dev 2.0-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | // Copyright (C) 2009 by Thomas Moulard, AIST, CNRS, INRIA.
//
// This file is part of the roboptim.
//
// roboptim is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// roboptim is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with roboptim. If not, see <http://www.gnu.org/licenses/>.
#ifndef ROBOPTIM_CORE_SOLVER_FACTORY_HH
# define ROBOPTIM_CORE_SOLVER_FACTORY_HH
# include <roboptim/core/sys.hh>
# include <roboptim/core/debug.hh>
# include <stdexcept>
# include <string>
# include <ltdl.h>
# include <boost/static_assert.hpp>
# include <boost/type_traits/is_base_of.hpp>
# include <roboptim/core/fwd.hh>
# include <roboptim/core/solver.hh>
# include <roboptim/core/solver-error.hh>
namespace roboptim
{
/// \addtogroup roboptim_problem
/// @{
/// \brief Define a solver factory that instanciate the plug-ins.
///
/// The solver factory has to be used to instantiate solvers which
/// are packaged as roboptim-core plug-ins.
///
/// This class uses libltdl to handle plug-ins. This lightweight library
/// is provided with GNU Libtool and wraps OS specific behavior into
/// a uniform interface.
///
/// \warning The solver lifetime is bound to the factory lifetime,
/// when the factory goes out of scope, the solver is destroyed too.
///
/// \tparam T solver type
/// \pre T has to be a subtype of Solver<F,C>.
template <typename T>
class SolverFactory
{
BOOST_STATIC_ASSERT((boost::is_base_of<GenericSolver, T>::value));
public:
/// \brief Solver type.
typedef T solver_t;
/// \brief Problem type.
typedef typename T::problem_t problem_t;
/// \brief Instantiate a factory and load the plug-in.
///
/// The constructor search for the plug-in and load it.
/// If the wanted plug-in can not be found, an exception is thrown.
///
/// \param solver solver name (for instance ``cfsqp'')
/// \param problem problem that will be solved
explicit SolverFactory (std::string solver, const problem_t& problem)
throw (std::runtime_error);
/// Unload the plug-in and free the instantiated solver.
~SolverFactory () throw ();
/// \brief Retrieve a reference on the solver.
/// \return reference on a solver
solver_t& operator () () throw ();
private:
/// \brief ltdl plug-in handle.
lt_dlhandle handle_;
/// \brief Allocated solver.
solver_t* solver_;
};
/// @}
} // end of namespace roboptim
# include <roboptim/core/solver-factory.hxx>
#endif //! ROBOPTIM_CORE_SOLVER_FACTORY_HH
|