--- /dev/null
+/**
+ * @file
+ * @brief some functions to deal with (smart) pointer
+ *
+ * @author Reinhard Pfau \<Reinhard.Pfau@gmx.de\>
+ * @copyright © 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