Public Member Functions | Private Member Functions | Private Attributes | List of all members
class_loader::MultiLibraryClassLoader Class Reference

A ClassLoader that can bind more than one runtime library. More...

#include <multi_library_class_loader.hpp>

Public Member Functions

template<class Base >
boost::shared_ptr< BasecreateInstance (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. More...
 
template<class Base >
boost::shared_ptr< BasecreateInstance (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. More...
 
template<class Base >
BasecreateUnmanagedInstance (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. More...
 
template<class Base >
BasecreateUnmanagedInstance (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. More...
 
template<class Base >
std::vector< std::string > getAvailableClasses ()
 Gets a list of all classes that are loaded by the class loader. More...
 
template<class Base >
std::vector< std::string > getAvailableClassesForLibrary (const std::string &library_path)
 Gets a list of all classes loaded for a particular library. More...
 
std::vector< std::string > getRegisteredLibraries ()
 Gets a list of all libraries opened by this class loader . More...
 
template<class Base >
bool isClassAvailable (const std::string &class_name)
 Indicates if a class has been loaded and can be instantiated. More...
 
bool isLibraryAvailable (const std::string &library_path)
 Indicates if a library has been loaded into memory. More...
 
void loadLibrary (const std::string &library_path)
 Loads a library into memory for this class loader. More...
 
 MultiLibraryClassLoader (bool enable_ondemand_loadunload)
 Constructor for the class. More...
 
int unloadLibrary (const std::string &library_path)
 Unloads a library for this class loader. More...
 
virtual ~MultiLibraryClassLoader ()
 Virtual destructor for class. More...
 

Private Member Functions

ClassLoaderVector getAllAvailableClassLoaders ()
 Gets all class loaders loaded within scope. More...
 
template<typename Base >
ClassLoadergetClassLoaderForClass (const std::string &class_name)
 Gets a handle to the class loader corresponding to a specific class. More...
 
ClassLoadergetClassLoaderForLibrary (const std::string &library_path)
 Gets a handle to the class loader corresponding to a specific runtime library. More...
 
bool isOnDemandLoadUnloadEnabled ()
 Indicates if on-demand (lazy) load/unload is enabled so libraries are loaded/unloaded automatically as needed. More...
 
void shutdownAllClassLoaders ()
 Destroys all ClassLoaders. More...
 

Private Attributes

LibraryToClassLoaderMap active_class_loaders_
 
bool enable_ondemand_loadunload_
 
boost::mutex loader_mutex_
 

Detailed Description

A ClassLoader that can bind more than one runtime library.

Definition at line 58 of file multi_library_class_loader.hpp.

Constructor & Destructor Documentation

class_loader::MultiLibraryClassLoader::MultiLibraryClassLoader ( bool  enable_ondemand_loadunload)

Constructor for the class.

Parameters
enable_ondemand_loadunload- Flag indicates if classes are to be loaded/unloaded automatically as class_loader are created and destroyed

Definition at line 38 of file multi_library_class_loader.cpp.

class_loader::MultiLibraryClassLoader::~MultiLibraryClassLoader ( )
virtual

Virtual destructor for class.

Definition at line 43 of file multi_library_class_loader.cpp.

Member Function Documentation

template<class Base >
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.

Parameters
Base- polymorphic type indicating base class
class_name- the name of the concrete plugin class we want to instantiate
Returns
A boost::shared_ptr<Base> to newly created plugin

Definition at line 80 of file multi_library_class_loader.hpp.

template<class Base >
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.

Parameters
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
Returns
A boost::shared_ptr<Base> to newly created plugin

Definition at line 108 of file multi_library_class_loader.hpp.

template<class Base >
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.

Parameters
Base- polymorphic type indicating base class
class_name- the name of the concrete plugin class we want to instantiate
Returns
An unmanaged Base* to newly created plugin

Definition at line 177 of file multi_library_class_loader.hpp.

template<class Base >
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.

Parameters
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 196 of file multi_library_class_loader.hpp.

ClassLoaderVector class_loader::MultiLibraryClassLoader::getAllAvailableClassLoaders ( )
private

Gets all class loaders loaded within scope.

Definition at line 68 of file multi_library_class_loader.cpp.

template<class Base >
std::vector<std::string> class_loader::MultiLibraryClassLoader::getAvailableClasses ( )
inline

Gets a list of all classes that are loaded by the class loader.

Parameters
Base- polymorphic type indicating Base class
Returns
A vector<string> of the available classes

Definition at line 235 of file multi_library_class_loader.hpp.

template<class Base >
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.

Parameters
Base- polymorphic type indicating Base class
Returns
A vector<string> of the available classes in the passed library

Definition at line 254 of file multi_library_class_loader.hpp.

template<typename Base >
ClassLoader* class_loader::MultiLibraryClassLoader::getClassLoaderForClass ( const std::string &  class_name)
inlineprivate

Gets a handle to the class loader corresponding to a specific class.

Parameters
class_name- name of class for which we want to create instance
Returns
A pointer to the ClassLoader*, == NULL if not found

Definition at line 306 of file multi_library_class_loader.hpp.

ClassLoader * class_loader::MultiLibraryClassLoader::getClassLoaderForLibrary ( const std::string &  library_path)
private

Gets a handle to the class loader corresponding to a specific runtime library.

Parameters
library_path- the library from which we want to create the plugin
Returns
A pointer to the ClassLoader*, == NULL if not found

Definition at line 60 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 .

Returns
A list of libraries opened by this class loader

Definition at line 48 of file multi_library_class_loader.cpp.

template<class Base >
bool class_loader::MultiLibraryClassLoader::isClassAvailable ( const std::string &  class_name)
inline

Indicates if a class has been loaded and can be instantiated.

Parameters
Base- polymorphic type indicating Base class
class_name- name of class that is be inquired about
Returns
true if loaded, false otherwise

Definition at line 215 of file multi_library_class_loader.hpp.

bool class_loader::MultiLibraryClassLoader::isLibraryAvailable ( const std::string &  library_path)

Indicates if a library has been loaded into memory.

Parameters
library_path- The full qualified path to the runtime library
Returns
true if library is loaded, false otherwise

Definition at line 80 of file multi_library_class_loader.cpp.

bool class_loader::MultiLibraryClassLoader::isOnDemandLoadUnloadEnabled ( )
inlineprivate

Indicates if on-demand (lazy) load/unload is enabled so libraries are loaded/unloaded automatically as needed.

Definition at line 291 of file multi_library_class_loader.hpp.

void class_loader::MultiLibraryClassLoader::loadLibrary ( const std::string &  library_path)

Loads a library into memory for this class loader.

Parameters
library_path- the fully qualified path to the runtime library

Definition at line 85 of file multi_library_class_loader.cpp.

void class_loader::MultiLibraryClassLoader::shutdownAllClassLoaders ( )
private

Destroys all ClassLoaders.

Definition at line 93 of file multi_library_class_loader.cpp.

int class_loader::MultiLibraryClassLoader::unloadLibrary ( const std::string &  library_path)

Unloads a library for this class loader.

Parameters
library_path- the fully qualified path to the runtime library

Definition at line 101 of file multi_library_class_loader.cpp.

Member Data Documentation

LibraryToClassLoaderMap class_loader::MultiLibraryClassLoader::active_class_loaders_
private

Definition at line 332 of file multi_library_class_loader.hpp.

bool class_loader::MultiLibraryClassLoader::enable_ondemand_loadunload_
private

Definition at line 331 of file multi_library_class_loader.hpp.

boost::mutex class_loader::MultiLibraryClassLoader::loader_mutex_
private

Definition at line 333 of file multi_library_class_loader.hpp.


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


class_loader
Author(s): Mirza Shah
autogenerated on Wed Jun 5 2019 22:08:15