A ClassLoader that can bind more than one runtime library. More...
#include <multi_library_class_loader.h>
Public Member Functions | |
template<class Base > | |
boost::shared_ptr< Base > | createInstance (const std::string &class_name) |
Creates an instance of an object of given class name with ancestor class Base This version does not look in a specific library for the factory, but rather the first open library that defines the classs. | |
template<class Base > | |
boost::shared_ptr< Base > | createInstance (const std::string &class_name, const std::string &library_path) |
Creates an instance of an object of given class name with ancestor class Base This version takes a specific library to make explicit the factory being used. | |
template<class Base > | |
Base * | createUnmanagedInstance (const std::string &class_name) |
Creates an instance of an object of given class name with ancestor class Base This version does not look in a specific library for the factory, but rather the first open library that defines the classs This version should not be used as the plugin system cannot do automated safe loading/unloadings. | |
template<class Base > | |
Base * | createUnmanagedInstance (const std::string &class_name, const std::string &library_path) |
Creates an instance of an object of given class name with ancestor class Base This version takes a specific library to make explicit the factory being used This version should not be used as the plugin system cannot do automated safe loading/unloadings. | |
template<class Base > | |
std::vector< std::string > | getAvailableClasses () |
Gets a list of all classes that are loaded by the class loader. | |
template<class Base > | |
std::vector< std::string > | getAvailableClassesForLibrary (const std::string &library_path) |
Gets a list of all classes loaded for a particular library. | |
std::vector< std::string > | getRegisteredLibraries () |
Gets a list of all libraries opened by this class loader @. | |
template<class Base > | |
bool | isClassAvailable (const std::string &class_name) |
Indicates if a class has been loaded and can be instantiated. | |
bool | isLibraryAvailable (const std::string &library_path) |
Indicates if a library has been loaded into memory. | |
void | loadLibrary (const std::string &library_path) |
Loads a library into memory for this class loader. | |
MultiLibraryClassLoader (bool enable_ondemand_loadunload) | |
Constructor for the class. | |
int | unloadLibrary (const std::string &library_path) |
Unloads a library for this class loader. | |
virtual | ~MultiLibraryClassLoader () |
Virtual destructor for class. | |
Private Member Functions | |
ClassLoaderVector | getAllAvailableClassLoaders () |
Gets all class loaders loaded within scope. | |
template<typename Base > | |
ClassLoader * | getClassLoaderForClass (const std::string &class_name) |
Gets a handle to the class loader corresponding to a specific class. | |
ClassLoader * | getClassLoaderForLibrary (const std::string &library_path) |
Gets a handle to the class loader corresponding to a specific runtime library. | |
bool | isOnDemandLoadUnloadEnabled () |
Indicates if on-demand (lazy) load/unload is enabled so libraries are loaded/unloaded automatically as needed. | |
void | shutdownAllClassLoaders () |
Destroys all ClassLoaders. | |
Private Attributes | |
LibraryToClassLoaderMap | active_class_loaders_ |
bool | enable_ondemand_loadunload_ |
boost::mutex | loader_mutex_ |
A ClassLoader that can bind more than one runtime library.
Definition at line 47 of file multi_library_class_loader.h.
class_loader::MultiLibraryClassLoader::MultiLibraryClassLoader | ( | bool | enable_ondemand_loadunload | ) |
Constructor for the class.
enable_ondemand_loadunload | - Flag indicates if classes are to be loaded/unloaded automatically as class_loader are created and destroyed |
Definition at line 35 of file multi_library_class_loader.cpp.
Virtual destructor for class.
Definition at line 40 of file multi_library_class_loader.cpp.
boost::shared_ptr<Base> class_loader::MultiLibraryClassLoader::createInstance | ( | const std::string & | class_name | ) | [inline] |
Creates an instance of an object of given class name with ancestor class Base This version does not look in a specific library for the factory, but rather the first open library that defines the classs.
Base | - polymorphic type indicating base class |
class_name | - the name of the concrete plugin class we want to instantiate |
Definition at line 69 of file multi_library_class_loader.h.
boost::shared_ptr<Base> class_loader::MultiLibraryClassLoader::createInstance | ( | const std::string & | class_name, |
const std::string & | library_path | ||
) | [inline] |
Creates an instance of an object of given class name with ancestor class Base This version takes a specific library to make explicit the factory being used.
Base | - polymorphic type indicating base class |
class_name | - the name of the concrete plugin class we want to instantiate |
library_path | - the library from which we want to create the plugin |
Definition at line 87 of file multi_library_class_loader.h.
Base* class_loader::MultiLibraryClassLoader::createUnmanagedInstance | ( | const std::string & | class_name | ) | [inline] |
Creates an instance of an object of given class name with ancestor class Base This version does not look in a specific library for the factory, but rather the first open library that defines the classs This version should not be used as the plugin system cannot do automated safe loading/unloadings.
Base | - polymorphic type indicating base class |
class_name | - the name of the concrete plugin class we want to instantiate |
Definition at line 140 of file multi_library_class_loader.h.
Base* class_loader::MultiLibraryClassLoader::createUnmanagedInstance | ( | const std::string & | class_name, |
const std::string & | library_path | ||
) | [inline] |
Creates an instance of an object of given class name with ancestor class Base This version takes a specific library to make explicit the factory being used This version should not be used as the plugin system cannot do automated safe loading/unloadings.
Base | - polymorphic type indicating Base class |
class_name | - name of class for which we want to create instance |
library_path | - the fully qualified path to the runtime library |
Definition at line 157 of file multi_library_class_loader.h.
Gets all class loaders loaded within scope.
Definition at line 60 of file multi_library_class_loader.cpp.
std::vector<std::string> class_loader::MultiLibraryClassLoader::getAvailableClasses | ( | ) | [inline] |
Gets a list of all classes that are loaded by the class loader.
Definition at line 191 of file multi_library_class_loader.h.
std::vector<std::string> class_loader::MultiLibraryClassLoader::getAvailableClassesForLibrary | ( | const std::string & | library_path | ) | [inline] |
Gets a list of all classes loaded for a particular library.
Definition at line 210 of file multi_library_class_loader.h.
ClassLoader* class_loader::MultiLibraryClassLoader::getClassLoaderForClass | ( | const std::string & | class_name | ) | [inline, private] |
Gets a handle to the class loader corresponding to a specific class.
class_name | - name of class for which we want to create instance |
Definition at line 261 of file multi_library_class_loader.h.
ClassLoader * class_loader::MultiLibraryClassLoader::getClassLoaderForLibrary | ( | const std::string & | library_path | ) | [private] |
Gets a handle to the class loader corresponding to a specific runtime library.
library_path | - the library from which we want to create the plugin |
Definition at line 53 of file multi_library_class_loader.cpp.
std::vector< std::string > class_loader::MultiLibraryClassLoader::getRegisteredLibraries | ( | ) |
Gets a list of all libraries opened by this class loader @.
Definition at line 45 of file multi_library_class_loader.cpp.
bool class_loader::MultiLibraryClassLoader::isClassAvailable | ( | const std::string & | class_name | ) | [inline] |
Indicates if a class has been loaded and can be instantiated.
Base | - polymorphic type indicating Base class |
class_name | - name of class that is be inquired about |
Definition at line 172 of file multi_library_class_loader.h.
bool class_loader::MultiLibraryClassLoader::isLibraryAvailable | ( | const std::string & | library_path | ) |
Indicates if a library has been loaded into memory.
library_path | - The full qualified path to the runtime library |
Definition at line 68 of file multi_library_class_loader.cpp.
bool class_loader::MultiLibraryClassLoader::isOnDemandLoadUnloadEnabled | ( | ) | [inline, private] |
Indicates if on-demand (lazy) load/unload is enabled so libraries are loaded/unloaded automatically as needed.
Definition at line 246 of file multi_library_class_loader.h.
void class_loader::MultiLibraryClassLoader::loadLibrary | ( | const std::string & | library_path | ) |
Loads a library into memory for this class loader.
library_path | - the fully qualified path to the runtime library |
Definition at line 73 of file multi_library_class_loader.cpp.
void class_loader::MultiLibraryClassLoader::shutdownAllClassLoaders | ( | ) | [private] |
Destroys all ClassLoaders.
Definition at line 79 of file multi_library_class_loader.cpp.
int class_loader::MultiLibraryClassLoader::unloadLibrary | ( | const std::string & | library_path | ) |
Unloads a library for this class loader.
library_path | - the fully qualified path to the runtime library |
Definition at line 86 of file multi_library_class_loader.cpp.
Definition at line 286 of file multi_library_class_loader.h.
Definition at line 285 of file multi_library_class_loader.h.
boost::mutex class_loader::MultiLibraryClassLoader::loader_mutex_ [private] |
Definition at line 287 of file multi_library_class_loader.h.