Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef MBF_ABSTRACT_NAV__ABSTRACT_PLUGIN_MANAGER_H_
00040 #define MBF_ABSTRACT_NAV__ABSTRACT_PLUGIN_MANAGER_H_
00041
00042 #include <boost/function.hpp>
00043
00044 namespace mbf_abstract_nav{
00045
00046 template <typename PluginType>
00047 class AbstractPluginManager
00048 {
00049 public:
00050
00051 typedef boost::function<typename PluginType::Ptr(const std::string& plugin)> loadPluginFunction;
00052 typedef boost::function<bool (const std::string& name, const typename PluginType::Ptr& plugin_ptr)> initPluginFunction;
00053
00054 AbstractPluginManager(
00055 const std::string param_name,
00056 const loadPluginFunction& loadPlugin,
00057 const initPluginFunction& initPlugin
00058 );
00059
00060 bool loadPlugins();
00061
00062 bool hasPlugin(const std::string& name);
00063
00064 std::string getType(const std::string& name);
00065
00066 const std::vector<std::string>& getLoadedNames();
00067
00068 typename PluginType::Ptr getPlugin(const std::string& name);
00069
00070 protected:
00071 std::map<std::string, typename PluginType::Ptr> plugins_;
00072 std::map<std::string, std::string> plugins_type_;
00073 std::vector<std::string> names_;
00074 const std::string param_name_;
00075 const loadPluginFunction loadPlugin_;
00076 const initPluginFunction initPlugin_;
00077 };
00078 }
00079
00080 #include "impl/abstract_plugin_manager.tcc"
00081 #endif //MBF_ABSTRACT_NAV__ABSTRACT_PLUGIN_MANAGER_H_