Orocos Real-Time Toolkit  2.9.0
PluginLoader.hpp
Go to the documentation of this file.
1 /***************************************************************************
2  tag: The SourceWorks Tue Sep 7 00:55:18 CEST 2010 PluginLoader.hpp
3 
4  PluginLoader.hpp - description
5  -------------------
6  begin : Tue September 07 2010
7  copyright : (C) 2010 The SourceWorks
8  email : peter@thesourceworks.com
9 
10  ***************************************************************************
11  * This library is free software; you can redistribute it and/or *
12  * modify it under the terms of the GNU General Public *
13  * License as published by the Free Software Foundation; *
14  * version 2 of the License. *
15  * *
16  * As a special exception, you may use this file as part of a free *
17  * software library without restriction. Specifically, if other files *
18  * instantiate templates or use macros or inline functions from this *
19  * file, or you compile this file and link it with other files to *
20  * produce an executable, this file does not by itself cause the *
21  * resulting executable to be covered by the GNU General Public *
22  * License. This exception does not however invalidate any other *
23  * reasons why the executable file might be covered by the GNU General *
24  * Public License. *
25  * *
26  * This library is distributed in the hope that it will be useful, *
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
29  * Lesser General Public License for more details. *
30  * *
31  * You should have received a copy of the GNU General Public *
32  * License along with this library; if not, write to the Free Software *
33  * Foundation, Inc., 59 Temple Place, *
34  * Suite 330, Boston, MA 02111-1307 USA *
35  * *
36  ***************************************************************************/
37 
38 
39 #ifndef ORO_PLUGINLOADER_HPP_
40 #define ORO_PLUGINLOADER_HPP_
41 
42 #include <string>
43 #include <vector>
44 #include <boost/shared_ptr.hpp>
45 
46 #include "../rtt-fwd.hpp"
47 #include "../rtt-config.h"
48 #include "../os/Mutex.hpp"
49 
50 namespace RTT {
51  namespace plugin {
69  {
74  class LoadedLib{
75  public:
76  LoadedLib(std::string n, std::string short_name, void* h)
77  : filename(n), shortname(short_name), handle(h), loadPlugin(0), is_typekit(false), is_service(false)
78  {
79  }
83  std::string filename;
87  std::string shortname;
91  std::string plugname;
92  void* handle;
93  bool (*loadPlugin)(RTT::TaskContext*);
94  RTT::ServicePtr (*createService)(void);
95  bool is_typekit, is_service;
96  };
97 
98  std::vector< LoadedLib > loadedLibs;
99 
103  std::string plugin_path;
104 
108  mutable os::MutexRecursive listlock;
109 
119  bool loadInProcess(std::string filename, std::string shortname, std::string kind, bool log_error );
129  bool loadPluginInternal( std::string const& name, std::string const& path_list, std::string const& subdir, std::string const& kind );
138  bool loadPluginsInternal( std::string const& path_list, std::string const& subdir, std::string const& kind );
143  bool isLoadedInternal(std::string name);
151  bool isCompatiblePlugin(std::string const& filepath);
152 
153  public:
154  PluginLoader();
155  ~PluginLoader();
156 
157  typedef boost::shared_ptr<PluginLoader> shared_ptr;
163  static boost::shared_ptr<PluginLoader> Instance();
164 
169  static void Release();
170 
176  bool loadLibrary(std::string const& path);
177 
187  bool loadTypekits(std::string const& path_list);
188 
197  bool loadTypekit(std::string const& name, std::string const& path_list);
198 
206  bool loadPlugins(std::string const& path_list);
207 
215  bool isLoaded(std::string name);
216 
224  bool loadPlugin(std::string const& name, std::string const& path_list);
225 
233  bool loadService(std::string const& servicename, TaskContext* tc);
234 
239  std::vector<std::string> listServices() const;
240 
245  std::vector<std::string> listPlugins() const;
246 
251  std::vector<std::string> listTypekits() const;
252 
259  std::string getPluginPath() const;
260 
267  void setPluginPath( std::string const& newpath );
268  };
269  }
270 }
271 
272 
273 #endif /* ORO_PLUGINLOADER_HPP_ */
#define RTT_API
Definition: rtt-config.h:97
Loads plugins found on the filesystem and keeps track of found plugins, typekits and services...
boost::shared_ptr< Service > ServicePtr
Definition: rtt-fwd.hpp:86
The TaskContext is the C++ representation of an Orocos component.
Definition: TaskContext.hpp:93
Contains TaskContext, Activity, OperationCaller, Operation, Property, InputPort, OutputPort, Attribute.
Definition: Activity.cpp:52
An object oriented wrapper around a recursive mutex.
Definition: Mutex.hpp:218
boost::shared_ptr< PluginLoader > shared_ptr