From: Reinhard Pfau Date: Tue, 24 Mar 2009 20:52:51 +0000 (+0100) Subject: added smart pointer utils X-Git-Tag: v0.3~73 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=32c42058d5103e2c6ce569e68fe693dbf1e913b6;p=libasyncio added smart pointer utils --- 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