From 32c42058d5103e2c6ce569e68fe693dbf1e913b6 Mon Sep 17 00:00:00 2001 From: Reinhard Pfau Date: Tue, 24 Mar 2009 21:52:51 +0100 Subject: [PATCH] added smart pointer utils --- utils/asyncio_pointer_func.hpp | 68 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-) create mode 100644 utils/asyncio_pointer_func.hpp diff --git a/utils/asyncio_pointer_func.hpp b/utils/asyncio_pointer_func.hpp new file mode 100644 index 0000000..00276c8 --- /dev/null +++ b/utils/asyncio_pointer_func.hpp @@ -0,0 +1,68 @@ +/** + * @file + * @brief some functions to deal with (smart) pointer + * + * @author Reinhard Pfau \ + * @copyright © Copyright 2009 by Intra2net AG + * @license LGPL + * @contact opensource@intra2net.com + * + */ + +#ifndef _ASYNCIO_POINTER_FUNC_HPP_ +#define _ASYNCIO_POINTER_FUNC_HPP_ + +#include +#include +#include +#ifdef HAVE_LIBI2NCOMMON +# include +#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 -- 1.7.1