#include <ComponentLoader.hpp>
Classes | |
struct | ComponentData |
class | LoadedLib |
Public Types | |
typedef boost::shared_ptr < ComponentLoader > | shared_ptr |
Public Member Functions | |
void | addFactory (std::string const &name, ComponentLoaderSignature factory) |
std::string | getComponentPath () const |
const FactoryMap & | getFactories () const |
bool | import (std::string const &path_list) |
bool | import (std::string const &name, std::string const &path_list) |
bool | isImported (std::string type_name) |
std::vector< std::string > | listComponents () const |
std::vector< std::string > | listComponentTypes () const |
RTT::TaskContext * | loadComponent (std::string const &name, std::string const &type) |
bool | loadLibrary (std::string const &path) |
bool | reloadLibrary (std::string const &filepath) |
void | setComponentPath (std::string const &newpath) |
bool | unloadComponent (RTT::TaskContext *tc) |
Static Public Member Functions | |
static boost::shared_ptr < ComponentLoader > | Instance () |
static void | Release () |
Private Types | |
typedef std::map< std::string, ComponentData > | CompList |
Private Member Functions | |
bool | importInstalledPackage (std::string const &package, std::string const &path_list) |
bool | importRosPackage (std::string const &package) |
bool | isCompatibleComponent (std::string const &filepath) |
bool | loadInProcess (std::string filename, std::string shortname, bool log_error) |
bool | reloadInProcess (std::string filename, std::string shortname) |
Private Attributes | |
std::string | component_path |
CompList | comps |
std::vector< LoadedLib > | loadedLibs |
std::vector< std::string > | loadedPackages |
Definition at line 22 of file ComponentLoader.hpp.
typedef std::map<std::string, ComponentData> RTT::ComponentLoader::CompList [private] |
This vector holds the dynamically loaded components.
Definition at line 65 of file ComponentLoader.hpp.
typedef boost::shared_ptr<ComponentLoader> RTT::ComponentLoader::shared_ptr |
Definition at line 116 of file ComponentLoader.hpp.
void ComponentLoader::addFactory | ( | std::string const & | name, |
ComponentLoaderSignature | factory | ||
) |
Adds a factory to the component factory map.
Definition at line 867 of file ComponentLoader.cpp.
std::string ComponentLoader::getComponentPath | ( | ) | const |
Returns the current Component path list. Defaults to the value of RTT_COMPONENT_PATH, when the RTT was started for the current process.
Definition at line 760 of file ComponentLoader.cpp.
const FactoryMap & ComponentLoader::getFactories | ( | ) | const |
Returns the factory singleton which creates all types of components for the ComponentLoader.
Definition at line 862 of file ComponentLoader.cpp.
bool ComponentLoader::import | ( | std::string const & | path_list | ) |
Imports any Component library found in each path in path_list in the current process.
path_list | A colon or semi-colon seperated list of paths to look for Components. May be the empty string. |
Definition at line 251 of file ComponentLoader.cpp.
bool ComponentLoader::import | ( | std::string const & | name, |
std::string const & | path_list | ||
) |
Imports a package found in each path in path_list in the current process.
name | The name of the (package) directory to import |
path_list | A colon or semi-colon seperated list of paths to look for Components. May be the empty string. In that case, the default component search path is used. |
Definition at line 352 of file ComponentLoader.cpp.
bool ComponentLoader::importInstalledPackage | ( | std::string const & | package, |
std::string const & | path_list | ||
) | [private] |
Returns true if package is a subdir of the RTT_COMPONENT_PATH
Definition at line 473 of file ComponentLoader.cpp.
bool ComponentLoader::importRosPackage | ( | std::string const & | package | ) | [private] |
Returns true only if package is a ROS package and contained a lib/orocos directory.
Definition at line 394 of file ComponentLoader.cpp.
boost::shared_ptr< ComponentLoader > ComponentLoader::Instance | ( | ) | [static] |
Create the instance of the ComponentLoader. It will keep track of the loaded libraries for this process.
Definition at line 239 of file ComponentLoader.cpp.
bool ComponentLoader::isCompatibleComponent | ( | std::string const & | filepath | ) | [private] |
Internal helper function that validate if a component is compatible with the current target. Currently, there's a validation only on the win32 platform to avoid mixing debug/release runtime libraries.
filepath | Full path of component to validate (with extension). |
Definition at line 832 of file ComponentLoader.cpp.
bool ComponentLoader::isImported | ( | std::string | type_name | ) |
Checks if a given Component type, filename or package name has been imported. This function accepts full filenames ('libthe_Component.so.1.99.0'), short names ('the_Component'), the name provided by the Component Factory ('App::Component'), or a package name ('myrobot')
type_name | name of a file, package directory or the Component type. |
Definition at line 607 of file ComponentLoader.cpp.
std::vector< std::string > ComponentLoader::listComponents | ( | ) | const |
Lists all Component created by loadComponent().
Definition at line 824 of file ComponentLoader.cpp.
std::vector< std::string > ComponentLoader::listComponentTypes | ( | ) | const |
Lists all Component types discovered by the ComponentLoader.
Definition at line 751 of file ComponentLoader.cpp.
RTT::TaskContext * ComponentLoader::loadComponent | ( | std::string const & | name, |
std::string const & | type | ||
) |
Creates a new component an earlier discovered component type.
name | The name of the to be created Component |
type | The type of component to be created. |
Definition at line 773 of file ComponentLoader.cpp.
bool ComponentLoader::loadInProcess | ( | std::string | filename, |
std::string | shortname, | ||
bool | log_error | ||
) | [private] |
Internal function that does all library loading.
filename | The path+filename to open |
shortname | The short name of this file |
log_error | Log errors to users. Set to false in case you are poking files to see if they can be loaded. |
Definition at line 664 of file ComponentLoader.cpp.
bool ComponentLoader::loadLibrary | ( | std::string const & | path | ) |
Loads a library as component library.
path | an absolute or relative path to a library. Relative paths are interpreted with regard to the plugin path. |
Definition at line 557 of file ComponentLoader.cpp.
void ComponentLoader::Release | ( | ) | [static] |
Release the ComponentLoader, erasing all knowledge of loaded libraries. No libraries will be unloaded from the process.
Definition at line 245 of file ComponentLoader.cpp.
bool ComponentLoader::reloadInProcess | ( | std::string | filename, |
std::string | shortname | ||
) | [private] |
Internal function that does try to reload a previously loaded library by first dl_close'ing the library.
filename | The path+filename to open |
shortname | The short name of this file |
Definition at line 621 of file ComponentLoader.cpp.
bool ComponentLoader::reloadLibrary | ( | std::string const & | filepath | ) |
Reloads a component library.
filepath | an absolute path to a library. |
Definition at line 543 of file ComponentLoader.cpp.
void ComponentLoader::setComponentPath | ( | std::string const & | newpath | ) |
Sets the Component path list. This is typically done by RTT startup code with the contents of the RTT_COMPONENT_PATH variable.
newpath | The new paths to look for Components. |
Definition at line 768 of file ComponentLoader.cpp.
bool ComponentLoader::unloadComponent | ( | RTT::TaskContext * | tc | ) |
Destroys an earlier created component.
tc | The TaskContext to be destroyed. tc may no longer be used after this function returns true. |
Definition at line 809 of file ComponentLoader.cpp.
std::string RTT::ComponentLoader::component_path [private] |
Path to look for if all else fails.
Definition at line 77 of file ComponentLoader.hpp.
CompList RTT::ComponentLoader::comps [private] |
Definition at line 67 of file ComponentLoader.hpp.
std::vector< LoadedLib > RTT::ComponentLoader::loadedLibs [private] |
Definition at line 70 of file ComponentLoader.hpp.
std::vector< std::string > RTT::ComponentLoader::loadedPackages [private] |
Definition at line 72 of file ComponentLoader.hpp.