// $Id$ #include "ace/Swap.h" template ACE_INLINE T * TAO::Utils::Servant_Var:: _duplicate(T * p) { ACE_TRY_NEW_ENV { if (p != 0) { p->_add_ref (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_TRY_CHECK; } } ACE_CATCHALL { ACE_RE_THROW; } ACE_ENDTRY; return p; } template ACE_INLINE void TAO::Utils::Servant_Var::swap(Servant_Var & rhs) ACE_THROW_SPEC(()) { ACE_Swap::swap(this->ptr_, rhs.ptr_); } template ACE_INLINE TAO::Utils::Servant_Var:: Servant_Var(T * p) : ptr_(p) { } // If _add_ref throws, this object will not be completely constructed // so the destructor will not be called. template ACE_INLINE TAO::Utils::Servant_Var:: Servant_Var(Servant_Var const & rhs) : ptr_(Servant_Var::_duplicate(rhs.ptr_)) { } template ACE_INLINE TAO::Utils::Servant_Var & TAO::Utils::Servant_Var:: operator=(Servant_Var const & rhs) { TAO::Utils::Servant_Var tmp(rhs); this->swap(tmp); return *this; } template ACE_INLINE ACE_TYPENAME TAO::Utils::Servant_Var & TAO::Utils::Servant_Var:: operator=(T * p) { TAO::Utils::Servant_Var tmp(p); this->swap(tmp); return *this; } template ACE_INLINE TAO::Utils::Servant_Var::~Servant_Var () ACE_THROW_SPEC (()) { // Unfortunately, there is no throw spec on _remove_ref, so we // can't assume that it will not throw. If it does, then we are in // trouble. In any event, we can't let the exception escape our // destructor. ACE_TRY_NEW_ENV { if (ptr_ != 0) { ptr_->_remove_ref (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_TRY_CHECK; } } ACE_CATCHALL { // Forget the exception.. } ACE_ENDTRY; } #if !defined(ACE_LACKS_MEMBER_TEMPLATES) template template ACE_INLINE TAO::Utils::Servant_Var:: Servant_Var(Y * p) : ptr_(p) { } template template ACE_INLINE TAO::Utils::Servant_Var:: Servant_Var(Servant_Var const & rhs) : ptr_(Servant_Var::_duplicate(rhs.in())) { } template template ACE_INLINE ACE_TYPENAME TAO::Utils::Servant_Var & TAO::Utils::Servant_Var:: operator=(Servant_Var const & rhs) { TAO::Utils::Servant_Var tmp(rhs); this->swap(tmp); return *this; } template template ACE_INLINE ACE_TYPENAME TAO::Utils::Servant_Var & TAO::Utils::Servant_Var:: operator=(Y * p) { TAO::Utils::Servant_Var tmp(p); this->swap(tmp); return *this; } #endif /* ACE_LACKS_MEMBER_TEMPLATES */ template ACE_INLINE T const * TAO::Utils::Servant_Var:: operator->() const { return ptr_; } template ACE_INLINE T * TAO::Utils::Servant_Var:: operator->() { return ptr_; } template ACE_INLINE T const & TAO::Utils::Servant_Var:: operator*() const { return *ptr_; } template ACE_INLINE T & TAO::Utils::Servant_Var:: operator*() { return *ptr_; } template ACE_INLINE TAO::Utils::Servant_Var:: operator void const * () const { return ptr_; } template ACE_INLINE T * TAO::Utils::Servant_Var:: in() const { return ptr_; } template ACE_INLINE T *& TAO::Utils::Servant_Var:: inout() { return ptr_; } template ACE_INLINE T *& TAO::Utils::Servant_Var:: out() { TAO::Utils::Servant_Var tmp; this->swap(tmp); return ptr_; } template ACE_INLINE T * TAO::Utils::Servant_Var:: _retn() { T * rval = ptr_; ptr_ = 0; return rval; } template ACE_INLINE bool operator==(ACE_TYPENAME TAO::Utils::Servant_Var const & x, ACE_TYPENAME TAO::Utils::Servant_Var const & y) { return x.in() == y.in(); } // -*- C++ -*- // $Id$ template ACE_INLINE bool operator!=(ACE_TYPENAME TAO::Utils::Servant_Var const & x, ACE_TYPENAME TAO::Utils::Servant_Var const & y) { return x.in() != y.in(); }