added smart pointer utils
authorReinhard Pfau <Reinhard.Pfau@gmx.de>
Tue, 24 Mar 2009 20:52:51 +0000 (21:52 +0100)
committerReinhard Pfau <Reinhard.Pfau@gmx.de>
Tue, 24 Mar 2009 20:52:51 +0000 (21:52 +0100)
utils/asyncio_pointer_func.hpp [new file with mode: 0644]

diff --git a/utils/asyncio_pointer_func.hpp b/utils/asyncio_pointer_func.hpp
new file mode 100644 (file)
index 0000000..00276c8
--- /dev/null
@@ -0,0 +1,68 @@
+/**
+ * @file
+ * @brief some functions to deal with (smart) pointer
+ *
+ * @author Reinhard Pfau \<Reinhard.Pfau@gmx.de\>
+ * @copyright &copy; Copyright 2009 by Intra2net AG
+ * @license LGPL
+ * @contact opensource@intra2net.com
+ *
+ */
+
+#ifndef _ASYNCIO_POINTER_FUNC_HPP_
+#define _ASYNCIO_POINTER_FUNC_HPP_
+
+#include <asyncio_config.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#ifdef HAVE_LIBI2NCOMMON
+#  include <pointer_func.hpp>
+#endif
+
+namespace AsyncIo
+{
+namespace Utils
+{
+
+#ifdef HAVE_LIBI2NCOMMON
+
+// NOTE: this typedef is needed by I2N code; please keep it!
+
+typedef I2n::SharedBase SharedBase
+  
+#else
+
+class SharedBase
+: public boost::enable_shared_from_this< SharedBase >
+{
+  public:
+    typedef boost::shared_ptr< SharedBase > PtrType;
+
+  public:
+    SharedBase() {}
+    virtual ~SharedBase() {}
+
+    template< class D >
+    boost::shared_ptr< D > get_ptr_as()
+    {
+      try
+      {
+        return boost::shared_dynamic_cast< D >( shared_from_this() );
+      }
+      catch( boost::bad_weak_ptr& e )
+      {
+        // we ignore this error.
+      }
+      return boost::shared_ptr< D >();
+    }
+    
+}; // end of SharedBase
+
+#endif
+
+
+} // end of namespace Utils
+} // end of namespace AsyncIo
+
+
+#endif