Public Types | Public Member Functions | Private Member Functions | Private Attributes
pluginlib::ClassLoader< T > Class Template Reference

A class to help manage and load classes. More...

#include <class_loader.hpp>

Inheritance diagram for pluginlib::ClassLoader< T >:
Inheritance graph
[legend]

List of all members.

Public Types

typedef std::map< std::string,
ClassDesc >::iterator 
ClassMapIterator

Public Member Functions

 ClassLoader (std::string package, std::string base_class, std::string attrib_name=std::string("plugin"), std::vector< std::string > plugin_xml_paths=std::vector< std::string >())
 Constructor for a ClassLoader.
T * createUnmanagedInstance (const std::string &lookup_name)
 Creates an instance of a desired class (which implicitly calls loadLibraryForClass() to increment the library counter).
virtual std::string getBaseClassType () const
 Given the lookup name of a class, returns the type of the associated base class.
virtual std::string getClassDescription (const std::string &lookup_name)
 Given the lookup name of a class, returns its description.
virtual std::string getClassLibraryPath (const std::string &lookup_name)
 Given the name of a class, returns the path to its associated library.
virtual std::string getClassPackage (const std::string &lookup_name)
 Given the name of a class, returns name of the containing package.
virtual std::string getClassType (const std::string &lookup_name)
 Given the lookup name of a class, returns the type of the derived class associated with it.
std::vector< std::string > getDeclaredClasses ()
 Returns a list of all available classes for this ClassLoader's base class type.
virtual std::string getName (const std::string &lookup_name)
 Strips the package name off of a lookup name.
virtual std::string getPluginManifestPath (const std::string &lookup_name)
 Given the name of a class, returns the path of the associated plugin manifest.
std::vector< std::string > getPluginXmlPaths ()
 Returns a list of all available plugin manifest paths for this ClassLoader's base class type.
virtual std::vector< std::string > getRegisteredLibraries ()
 Returns the libraries that are registered and can be loaded.
virtual bool isClassAvailable (const std::string &lookup_name)
 Checks if the class associated with a plugin name is available to be loaded.
bool isClassLoaded (const std::string &lookup_name)
 Checks if the library for a given class is currently loaded.
virtual void loadLibraryForClass (const std::string &lookup_name)
 Attempts to load the library containing a class with a given name and increments a counter for the library.
virtual void refreshDeclaredClasses ()
 Refreshs the list of all available classes for this ClassLoader's base class type

Exceptions:
pluginlib::LibraryLoadExceptionThrown if package manifest cannot be found.

virtual int unloadLibraryForClass (const std::string &lookup_name)
 Decrements the counter for the library containing a class with a given name and attempts to unload it if the counter reaches zero.
 ~ClassLoader ()
 Destructor for ClassLoader.

Private Member Functions

std::map< std::string, ClassDescdetermineAvailableClasses (const std::vector< std::string > &plugin_xml_paths)
 Returns the available classes.
std::string extractPackageNameFromPackageXML (const std::string &package_xml_path)
std::vector< std::string > getAllLibraryPathsToTry (const std::string &library_name, const std::string &exporting_package_name)
std::vector< std::string > getCatkinLibraryPaths ()
std::string getErrorStringForUnknownClass (const std::string &lookup_name)
 Returns an error message for an unknown class.
std::string getPackageFromPluginXMLFilePath (const std::string &path)
std::string getPathSeparator ()
std::vector< std::string > getPluginXmlPaths (const std::string &package, const std::string &attrib_name, bool force_recrawl=false)
std::string getROSBuildLibraryPath (const std::string &exporting_package_name)
std::string joinPaths (const std::string &path1, const std::string &path2)
void processSingleXMLPluginFile (const std::string &xml_file, std::map< std::string, ClassDesc > &class_available)
std::string stripAllButFileFromPath (const std::string &path)
int unloadClassLibraryInternal (const std::string &library_path)
 Helper function for unloading a shared library.

Private Attributes

std::string attrib_name_
std::string base_class_
std::map< std::string, ClassDescclasses_available_
class_loader::MultiLibraryClassLoader lowlevel_class_loader_
std::string package_
std::vector< std::string > plugin_xml_paths_

Detailed Description

template<class T>
class pluginlib::ClassLoader< T >

A class to help manage and load classes.

Definition at line 58 of file class_loader.hpp.


Member Typedef Documentation

template<class T>
typedef std::map<std::string, ClassDesc>::iterator pluginlib::ClassLoader< T >::ClassMapIterator

Definition at line 61 of file class_loader.hpp.


Constructor & Destructor Documentation

template<class T >
pluginlib::ClassLoader< T >::ClassLoader ( std::string  package,
std::string  base_class,
std::string  attrib_name = std::string("plugin"),
std::vector< std::string >  plugin_xml_paths = std::vector<std::string>() 
)

Constructor for a ClassLoader.

Parameters:
packageThe package containing the base class
base_classThe type of the base class for classes to be loaded
attrib_nameThe attribute to search for in manifext.xml files, defaults to "plugin"
plugin_xml_pathsThe list of paths of plugin.xml files, defaults to be crawled via ros::package::getPlugins()
Exceptions:
pluginlib::ClassLoaderExceptionThrown if package manifest cannot be found

Definition at line 82 of file class_loader_imp.hpp.

template<class T >
pluginlib::ClassLoader< T >::~ClassLoader ( )

Destructor for ClassLoader.

Definition at line 105 of file class_loader_imp.hpp.


Member Function Documentation

template<class T >
T * pluginlib::ClassLoader< T >::createUnmanagedInstance ( const std::string &  lookup_name)

Creates an instance of a desired class (which implicitly calls loadLibraryForClass() to increment the library counter).

Attention:
The ownership is transfered to the caller, which is responsible for deleting the instance and calling unloadLibraryForClass() (in order to decrement the associated library counter and unloading it if it is no more used).
Parameters:
lookup_nameThe name of the class to load
Exceptions:
pluginlib::LibraryLoadExceptionThrown when the library associated with the class cannot be loaded
pluginlib::CreateClassExceptionThrown when the class cannot be instantiated
Returns:
An instance of the class

Definition at line 197 of file class_loader_imp.hpp.

template<class T >
std::map< std::string, ClassDesc > pluginlib::ClassLoader< T >::determineAvailableClasses ( const std::vector< std::string > &  plugin_xml_paths) [private]

Returns the available classes.

Parameters:
plugin_xml_pathsThe vector of paths of plugin.xml files
Exceptions:
pluginlib::LibraryLoadExceptionThrown if package manifest cannot be found
Returns:
A map of class names and the corresponding descriptions

Definition at line 233 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::extractPackageNameFromPackageXML ( const std::string &  package_xml_path) [private]

Opens a package.xml file and extracts the package name (i.e. contents of <name> tag)

Definition at line 252 of file class_loader_imp.hpp.

template<class T >
std::vector< std::string > pluginlib::ClassLoader< T >::getAllLibraryPathsToTry ( const std::string &  library_name,
const std::string &  exporting_package_name 
) [private]

Gets a list of paths to try to find a library. As we transition from rosbuild to Catkin build systems, plugins can be found in the old rosbuild place (pkg_name/lib usually) or somewhere in the Catkin build space

Definition at line 284 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getBaseClassType ( ) const [virtual]

Given the lookup name of a class, returns the type of the associated base class.

Returns:
The type of the associated base class

Implements pluginlib::ClassLoaderBase.

Definition at line 331 of file class_loader_imp.hpp.

template<class T >
std::vector< std::string > pluginlib::ClassLoader< T >::getCatkinLibraryPaths ( ) [private]

Returns the paths where libraries are installed according to the Catkin build system.

Definition at line 277 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getClassDescription ( const std::string &  lookup_name) [virtual]

Given the lookup name of a class, returns its description.

Parameters:
lookup_nameThe lookup name of the class
Returns:
The description of the class

Implements pluginlib::ClassLoaderBase.

Definition at line 338 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getClassLibraryPath ( const std::string &  lookup_name) [virtual]

Given the name of a class, returns the path to its associated library.

Parameters:
lookup_nameThe name of the class
Returns:
The path to the associated library

Implements pluginlib::ClassLoaderBase.

Definition at line 358 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getClassPackage ( const std::string &  lookup_name) [virtual]

Given the name of a class, returns name of the containing package.

Parameters:
lookup_nameThe name of the class
Returns:
The name of the containing package

Implements pluginlib::ClassLoaderBase.

Definition at line 386 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getClassType ( const std::string &  lookup_name) [virtual]

Given the lookup name of a class, returns the type of the derived class associated with it.

Parameters:
lookup_nameThe name of the class
Returns:
The name of the associated derived class

Implements pluginlib::ClassLoaderBase.

Definition at line 348 of file class_loader_imp.hpp.

template<class T >
std::vector< std::string > pluginlib::ClassLoader< T >::getDeclaredClasses ( ) [virtual]

Returns a list of all available classes for this ClassLoader's base class type.

Returns:
A vector of strings corresponding to the names of all available classes

Implements pluginlib::ClassLoaderBase.

Definition at line 403 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getErrorStringForUnknownClass ( const std::string &  lookup_name) [private]

Returns an error message for an unknown class.

Parameters:
lookup_nameThe name of the class
Returns:
The error message

Definition at line 414 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getName ( const std::string &  lookup_name) [virtual]

Strips the package name off of a lookup name.

Parameters:
lookup_nameThe name of the plugin
Returns:
The name of the plugin stripped of the package name

Implements pluginlib::ClassLoaderBase.

Definition at line 428 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getPackageFromPluginXMLFilePath ( const std::string &  path) [private]

Gets the package name from a path to a plugin XML file

Definition at line 438 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getPathSeparator ( ) [private]

Gets the standard path separator for the native OS (e.g. "/" on *nix, "\" on windows)

Definition at line 495 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getPluginManifestPath ( const std::string &  lookup_name) [virtual]

Given the name of a class, returns the path of the associated plugin manifest.

Parameters:
lookup_nameThe name of the class
Returns:
The path of the associated plugin manifest

Implements pluginlib::ClassLoaderBase.

Definition at line 507 of file class_loader_imp.hpp.

template<class T >
std::vector< std::string > pluginlib::ClassLoader< T >::getPluginXmlPaths ( ) [virtual]

Returns a list of all available plugin manifest paths for this ClassLoader's base class type.

Returns:
A vector of strings corresponding to the paths of all available plugin manifests

Implements pluginlib::ClassLoaderBase.

Definition at line 396 of file class_loader_imp.hpp.

template<class T >
std::vector< std::string > pluginlib::ClassLoader< T >::getPluginXmlPaths ( const std::string &  package,
const std::string &  attrib_name,
bool  force_recrawl = false 
) [private]

Returns the paths to plugin.xml files.

Exceptions:
pluginlib::LibraryLoadExceptionThrown if package manifest cannot be found
Returns:
A vector of paths

Definition at line 223 of file class_loader_imp.hpp.

template<class T >
std::vector< std::string > pluginlib::ClassLoader< T >::getRegisteredLibraries ( ) [virtual]

Returns the libraries that are registered and can be loaded.

Returns:
A vector of strings corresponding to the names of registered libraries

Implements pluginlib::ClassLoaderBase.

Definition at line 518 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::getROSBuildLibraryPath ( const std::string &  exporting_package_name) [private]

Gets the path where rosbuild build system thinks plugins are installed

Definition at line 525 of file class_loader_imp.hpp.

template<class T >
bool pluginlib::ClassLoader< T >::isClassAvailable ( const std::string &  lookup_name) [virtual]

Checks if the class associated with a plugin name is available to be loaded.

Parameters:
lookup_nameThe name of the plugin
Returns:
True if the plugin is available, false otherwise

Implements pluginlib::ClassLoaderBase.

Definition at line 532 of file class_loader_imp.hpp.

template<class T >
bool pluginlib::ClassLoader< T >::isClassLoaded ( const std::string &  lookup_name) [virtual]

Checks if the library for a given class is currently loaded.

Parameters:
lookup_nameThe lookup name of the class to query
Returns:
True if the class is loaded, false otherwise

Implements pluginlib::ClassLoaderBase.

Definition at line 324 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::joinPaths ( const std::string &  path1,
const std::string &  path2 
) [private]

Joins two filesystem paths together utilzing appropriate path separator

Definition at line 539 of file class_loader_imp.hpp.

template<class T >
void pluginlib::ClassLoader< T >::loadLibraryForClass ( const std::string &  lookup_name) [virtual]

Attempts to load the library containing a class with a given name and increments a counter for the library.

Parameters:
lookup_nameThe lookup name of the class to load
Exceptions:
pluginlib::LibraryLoadExceptionThrown if the library for the class cannot be loaded

Implements pluginlib::ClassLoaderBase.

Definition at line 547 of file class_loader_imp.hpp.

template<class T >
void pluginlib::ClassLoader< T >::processSingleXMLPluginFile ( const std::string &  xml_file,
std::map< std::string, ClassDesc > &  class_available 
) [private]

Parses a plugin XML file and inserts the appropriate ClassDesc entries into the passes classes_available map

Definition at line 579 of file class_loader_imp.hpp.

template<class T >
void pluginlib::ClassLoader< T >::refreshDeclaredClasses ( ) [virtual]

Refreshs the list of all available classes for this ClassLoader's base class type

Exceptions:
pluginlib::LibraryLoadExceptionThrown if package manifest cannot be found.

Implements pluginlib::ClassLoaderBase.

Definition at line 669 of file class_loader_imp.hpp.

template<class T >
std::string pluginlib::ClassLoader< T >::stripAllButFileFromPath ( const std::string &  path) [private]

Strips all but the filename from an explicit file path.

Definition at line 701 of file class_loader_imp.hpp.

template<class T >
int pluginlib::ClassLoader< T >::unloadClassLibraryInternal ( const std::string &  library_path) [private]

Helper function for unloading a shared library.

Parameters:
library_pathThe exact path to the library to unload
Returns:
The number of pending unloads until the library is removed from memory

Definition at line 730 of file class_loader_imp.hpp.

template<class T >
int pluginlib::ClassLoader< T >::unloadLibraryForClass ( const std::string &  lookup_name) [virtual]

Decrements the counter for the library containing a class with a given name and attempts to unload it if the counter reaches zero.

Parameters:
lookup_nameThe lookup name of the class to unload
Exceptions:
pluginlib::LibraryUnloadExceptionThrown if the library for the class cannot be unloaded
Returns:
The number of pending unloads until the library is removed from memory

Implements pluginlib::ClassLoaderBase.

Definition at line 713 of file class_loader_imp.hpp.


Member Data Documentation

template<class T>
std::string pluginlib::ClassLoader< T >::attrib_name_ [private]

Definition at line 309 of file class_loader.hpp.

template<class T>
std::string pluginlib::ClassLoader< T >::base_class_ [private]

Definition at line 308 of file class_loader.hpp.

template<class T>
std::map<std::string, ClassDesc> pluginlib::ClassLoader< T >::classes_available_ [private]

Definition at line 306 of file class_loader.hpp.

Definition at line 310 of file class_loader.hpp.

template<class T>
std::string pluginlib::ClassLoader< T >::package_ [private]

Definition at line 307 of file class_loader.hpp.

template<class T>
std::vector<std::string> pluginlib::ClassLoader< T >::plugin_xml_paths_ [private]

Definition at line 305 of file class_loader.hpp.


The documentation for this class was generated from the following files:


pluginlib
Author(s): Eitan Marder-Eppstein, Tully Foote, Dirk Thomas, Mirza Shah
autogenerated on Sat Oct 20 2018 05:55:37