Class MultiLibraryClassLoader

Class Documentation

class MultiLibraryClassLoader

A ClassLoader that can bind more than one runtime library.

Public Functions

explicit 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

virtual ~MultiLibraryClassLoader()

Virtual destructor for class.

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

Parameters:
  • Base – - polymorphic type indicating base class

  • class_name – - the name of the concrete plugin class we want to instantiate

Returns:

A std::shared_ptr<Base> to newly created plugin

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

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 std::shared_ptr<Base> to newly created plugin

template<class Base>
inline ClassLoader::UniquePtr<Base> createUniqueInstance(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 class

Parameters:
  • Base – - polymorphic type indicating base class

  • class_name – - the name of the concrete plugin class we want to instantiate

Returns:

A unique pointer to newly created plugin

template<class Base>
inline ClassLoader::UniquePtr<Base> createUniqueInstance(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

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 unique pointer to newly created plugin

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

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

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

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

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

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

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

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

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

template<class Base>
inline std::vector<std::string> getAvailableClassesForLibrary(const std::string &library_path)

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

std::vector<std::string> getRegisteredLibraries() const

Gets a list of all libraries opened by this class loader.

Returns:

A list of libraries opened by this class loader

void 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

int unloadLibrary(const std::string &library_path)

Unloads a library for this class loader.

Parameters:

library_path – - the fully qualified path to the runtime library

Returns:

The number of times more unloadLibrary() has to be called for it to be unbound from this MultiLibraryClassLoader