summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/Module.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/sys/Module.h')
-rw-r--r--cpp/src/qpid/sys/Module.h37
1 files changed, 28 insertions, 9 deletions
diff --git a/cpp/src/qpid/sys/Module.h b/cpp/src/qpid/sys/Module.h
index e812f57d7a..79793ed0ca 100644
--- a/cpp/src/qpid/sys/Module.h
+++ b/cpp/src/qpid/sys/Module.h
@@ -1,5 +1,5 @@
-#ifndef _sys_Module_h
-#define _sys_Module_h
+#ifndef QPID_SYS_MODULE_H
+#define QPID_SYS_MODULE_H
/*
*
@@ -21,11 +21,30 @@
* under the License.
*
*/
-
-#ifdef USE_APR_PLATFORM
-#include "apr/Module.h"
-#else
-#include "posix/Module.h"
-#endif
-#endif //ifndef _sys_Module_h
+#include "qpid/sys/Shlib.h"
+#include <boost/noncopyable.hpp>
+
+namespace qpid {
+namespace sys {
+
+template <class T> class Module : public AutoShlib, private boost::noncopyable
+{
+ public:
+ Module(const std::string& name) :
+ AutoShlib(name),
+ ptr(getSymbol<T*(*)()>("create")()) {}
+
+ T* get() { return ptr; }
+ T* operator->() { return ptr; }
+ ~Module() throw() {
+ getSymbol<void (*)(T*)>("destroy")(ptr);
+ }
+
+ private:
+ T* ptr;
+};
+
+}}
+
+#endif /*!QPID_SYS_MODULE_H*/