SSLIOP_OpenSSL_st_T.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // SSLIOP_OpenSSL_st_T.inl,v 1.5 2005/11/16 07:53:24 ossama Exp
00004 
00005 
00006 #include <openssl/crypto.h>
00007 
00008 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00009 
00010 template <typename T> ACE_INLINE T *
00011 TAO::SSLIOP::_duplicate (T * st)
00012 {
00013   // Shallow copy.
00014 
00015   // OpenSSL provides no structure-specific functions to increase the
00016   // reference count on the structure it defines, so we do it
00017   // manually.
00018   if (st != 0)
00019     CRYPTO_add (&(st->references),
00020                 1,
00021                 TAO::SSLIOP::OpenSSL_traits<T>::LOCK_ID);
00022 
00023   return st;
00024 }
00025 
00026 template <typename T> ACE_INLINE T *
00027 TAO::SSLIOP::copy (T const & st)
00028 {
00029   // Deep copy.
00030   return TAO::SSLIOP::OpenSSL_traits<T>::copy (st);
00031 }
00032 
00033 template <typename T> ACE_INLINE void
00034 TAO::SSLIOP::release (T * st)
00035 {
00036   TAO::SSLIOP::OpenSSL_traits<T>::release (st);
00037 }
00038 
00039 // -------------------------------------------------------------------
00040 
00041 template <typename T> ACE_INLINE
00042 TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (void)
00043   : st_ (0)
00044 {
00045 }
00046 
00047 template <typename T> ACE_INLINE
00048 TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (T * st)
00049   : st_ (st)
00050 {
00051 }
00052 
00053 template <typename T> ACE_INLINE
00054 TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (
00055   TAO::SSLIOP::OpenSSL_st_var<T> const & st)
00056   : st_ (TAO::SSLIOP::OpenSSL_traits<T>::_duplicate (st.ptr ()))
00057 {
00058 }
00059 
00060 template <typename T> ACE_INLINE
00061 TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (T const & st)
00062   : st_ (TAO::SSLIOP::OpenSSL_traits<T>::copy (st))
00063 {
00064 }
00065 
00066 template <typename T> ACE_INLINE
00067 TAO::SSLIOP::OpenSSL_st_var<T>::~OpenSSL_st_var (void)
00068 {
00069   TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
00070   //  TAO::SSLIOP::release (this->st_);
00071 }
00072 
00073 template <typename T> ACE_INLINE TAO::SSLIOP::OpenSSL_st_var<T> &
00074 TAO::SSLIOP::OpenSSL_st_var<T>::operator= (T * st)
00075 {
00076   TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
00077   this->st_ = st;
00078   return *this;
00079 }
00080 
00081 template <typename T> ACE_INLINE TAO::SSLIOP::OpenSSL_st_var<T> &
00082 TAO::SSLIOP::OpenSSL_st_var<T>::operator= (
00083   TAO::SSLIOP::OpenSSL_st_var<T> const & st)
00084 {
00085   if (this != &st)
00086     {
00087       TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
00088       this->st_ = TAO::SSLIOP::OpenSSL_traits<T>::_duplicate (st.ptr ());
00089     }
00090 
00091   return *this;
00092 }
00093 
00094 template <typename T> ACE_INLINE TAO::SSLIOP::OpenSSL_st_var<T> &
00095 TAO::SSLIOP::OpenSSL_st_var<T>::operator= (T const & st)
00096 {
00097   if (this->st_ != &st)
00098     {
00099       TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
00100       this->st_ = TAO::SSLIOP::OpenSSL_traits<T>::copy (st);
00101     }
00102 
00103   return *this;
00104 }
00105 
00106 template <typename T> ACE_INLINE T const *
00107 TAO::SSLIOP::OpenSSL_st_var<T>::operator-> (void) const
00108 {
00109   return this->st_;
00110 }
00111 
00112 template <typename T> ACE_INLINE T *
00113 TAO::SSLIOP::OpenSSL_st_var<T>::operator-> (void)
00114 {
00115   return this->st_;
00116 }
00117 
00118 template <typename T> ACE_INLINE
00119 TAO::SSLIOP::OpenSSL_st_var<T>::operator T const &() const
00120 {
00121   return *this->st_;
00122 }
00123 
00124 template <typename T> ACE_INLINE
00125 TAO::SSLIOP::OpenSSL_st_var<T>::operator T &()
00126 {
00127   return *this->st_;
00128 }
00129 
00130 template <typename T> ACE_INLINE T *
00131 TAO::SSLIOP::OpenSSL_st_var<T>::in (void) const
00132 {
00133   return this->st_;
00134 }
00135 
00136 template <typename T> ACE_INLINE T *&
00137 TAO::SSLIOP::OpenSSL_st_var<T>::inout (void)
00138 {
00139   return this->st_;
00140 }
00141 
00142 template <typename T> ACE_INLINE T *&
00143 TAO::SSLIOP::OpenSSL_st_var<T>::out (void)
00144 {
00145   TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
00146   this->st_ = 0;
00147   return this->st_;
00148 }
00149 
00150 template <typename T> ACE_INLINE T *
00151 TAO::SSLIOP::OpenSSL_st_var<T>::_retn (void)
00152 {
00153   // Yield ownership of the OpenSSL structure.
00154   T * st = this->st_;
00155   this->st_ = 0;
00156   return st;
00157 }
00158 
00159 template <typename T> ACE_INLINE T *
00160 TAO::SSLIOP::OpenSSL_st_var<T>::ptr (void) const
00161 {
00162   return this->st_;
00163 }
00164 
00165 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 13:54:14 2006 for TAO_SSLIOP by doxygen 1.3.6