SafetyProfileSequenceVar.h

Go to the documentation of this file.
00001 #ifndef dds_DCPS_SafetyProfileSequencVar_h
00002 #define dds_DCPS_SafetyProfileSequencVar_h
00003 
00004 
00005 namespace OpenDDS {
00006 namespace SafetyProfile {
00007 
00008   /**
00009    * @class SequenceVar
00010    *
00011    * @brief Parametrized implementation of var class for sequences.
00012    *
00013    */
00014   template <typename T>
00015   class SequenceVar {
00016   public:
00017     typedef typename T::subscript_type T_elem;
00018     typedef typename T::const_subscript_type T_const_elem;
00019 
00020     SequenceVar()
00021       : ptr_(0)
00022     {
00023     }
00024 
00025     SequenceVar(T* p)
00026       : ptr_(p)
00027     {
00028     }
00029 
00030     SequenceVar(const SequenceVar<T>& p)
00031       : ptr_(p.ptr_ ? new T(*p.ptr_) : 0)
00032     {
00033     }
00034 
00035     ~SequenceVar()
00036     {
00037       delete ptr_;
00038     }
00039 
00040 
00041     SequenceVar& operator=(T* p);
00042     SequenceVar& operator=(const SequenceVar<T>& p);
00043 
00044     T* operator->()
00045     {
00046       return ptr_;
00047     }
00048 
00049     const T* operator->() const
00050     {
00051       return ptr_;
00052     }
00053 
00054 
00055     typedef const T& _in_type;
00056     typedef T& _inout_type;
00057     typedef T*& _out_type;
00058     typedef T* _retn_type;
00059 
00060     _in_type in() const
00061     {
00062       return *ptr_;
00063     }
00064 
00065     _inout_type inout()
00066     {
00067       return *ptr_;
00068     }
00069 
00070     _out_type out();
00071     _retn_type _retn();
00072 
00073     _retn_type ptr() const
00074     {
00075       return ptr_;
00076     }
00077 
00078     operator _in_type() const
00079     {
00080       return in();
00081     }
00082 
00083     operator _inout_type()
00084     {
00085       return inout();
00086     }
00087 
00088     operator _out_type()
00089     {
00090       return out();
00091     }
00092 
00093 
00094     T_elem operator[](CORBA::ULong index)
00095     {
00096       return (*ptr_)[index];
00097     }
00098 
00099     T_const_elem operator[](CORBA::ULong index) const
00100     {
00101       return (*ptr_)[index];
00102     }
00103 
00104   private:
00105     T* ptr_;
00106   };
00107 
00108   template<typename T>
00109   inline
00110   SequenceVar<T>&
00111   SequenceVar<T>::operator=(T* p)
00112   {
00113     delete ptr_;
00114     ptr_ = p;
00115     return *this;
00116   }
00117 
00118   template<typename T>
00119   inline
00120   SequenceVar<T>&
00121   SequenceVar<T>::operator=(
00122       const SequenceVar<T>& p)
00123   {
00124     SequenceVar<T> tmp(p);
00125 
00126     T* old_ptr = ptr_;
00127     ptr_ = tmp.ptr_;
00128     tmp.ptr_ = old_ptr;
00129 
00130     return *this;
00131   }
00132 
00133   template<typename T>
00134   inline
00135   T*&
00136   SequenceVar<T>::out()
00137   {
00138     delete ptr_;
00139     ptr_ = 0;
00140     return ptr_;
00141   }
00142 
00143   template<typename T>
00144   inline
00145   T*
00146   SequenceVar<T>::_retn()
00147   {
00148     T* tmp = ptr_;
00149     ptr_ = 0;
00150     return tmp;
00151   }
00152 }
00153 }
00154 
00155 #endif /* dds_DCPS_SafetyProfileSequencVar_h */

Generated on Fri Feb 12 20:05:26 2016 for OpenDDS by  doxygen 1.4.7