diff options
Diffstat (limited to 'cpp/src/qpid/Plugin.h')
-rw-r--r-- | cpp/src/qpid/Plugin.h | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/cpp/src/qpid/Plugin.h b/cpp/src/qpid/Plugin.h index 3c7c8031bb..4e057872b9 100644 --- a/cpp/src/qpid/Plugin.h +++ b/cpp/src/qpid/Plugin.h @@ -24,11 +24,12 @@ #include <boost/noncopyable.hpp> #include <boost/function.hpp> #include <vector> +#include "qpid/CommonImportExport.h" /**@file Generic plug-in framework. */ namespace qpid { -class Options; +struct Options; /** * Plug-in base class. @@ -36,6 +37,8 @@ class Options; class Plugin : private boost::noncopyable { public: typedef std::vector<Plugin*> Plugins; + /** Default value returned by initOrder() */ + static const int DEFAULT_INIT_ORDER=1000; /** * Base interface for targets that can receive plug-ins. @@ -46,13 +49,13 @@ class Plugin : private boost::noncopyable { { public: /** Calls finalize() if not already called. */ - virtual ~Target(); + QPID_COMMON_EXTERN virtual ~Target(); /** Run all the finalizers */ - void finalize(); + QPID_COMMON_EXTERN void finalize(); /** Add a function to run when finalize() is called */ - void addFinalizer(const boost::function<void()>&); + QPID_COMMON_EXTERN void addFinalizer(const boost::function<void()>&); private: std::vector<boost::function<void()> > finalizers; @@ -65,9 +68,9 @@ class Plugin : private boost::noncopyable { * member variable in a library so it is registered during * initialization when the library is loaded. */ - Plugin(); + QPID_COMMON_EXTERN Plugin(); - virtual ~Plugin(); + QPID_COMMON_EXTERN virtual ~Plugin(); /** * Configuration options for the plugin. @@ -76,7 +79,7 @@ class Plugin : private boost::noncopyable { * @return An options group or 0 for no options. Default returns 0. * Plugin retains ownership of return value. */ - virtual Options* getOptions(); + QPID_COMMON_EXTERN virtual Options* getOptions(); /** * Initialize Plugin functionality on a Target, called before @@ -98,19 +101,27 @@ class Plugin : private boost::noncopyable { */ virtual void initialize(Target&) = 0; + /** + * Initialization order. If a plugin does not override this, it + * returns DEFAULT_INIT_ORDER. Plugins that need to be initialized + * earlier/later than normal can override initOrder to return + * a lower/higher value than DEFAULT_INIT_ORDER. + */ + QPID_COMMON_EXTERN virtual int initOrder() const; + /** List of registered Plugin objects. * Caller must not delete plugin pointers. */ - static const Plugins& getPlugins(); + QPID_COMMON_EXTERN static const Plugins& getPlugins(); /** Call earlyInitialize() on all registered plugins */ - static void earlyInitAll(Target&); + QPID_COMMON_EXTERN static void earlyInitAll(Target&); /** Call initialize() on all registered plugins */ - static void initializeAll(Target&); + QPID_COMMON_EXTERN static void initializeAll(Target&); /** For each registered plugin, add plugin.getOptions() to opts. */ - static void addOptions(Options& opts); + QPID_COMMON_EXTERN static void addOptions(Options& opts); }; } // namespace qpid |