00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkFEMP_h
00018 #define __itkFEMP_h
00019
00020 namespace itk {
00021 namespace fem {
00022
00023
00024
00025
00045 template<class T>
00046 class FEMP
00047 {
00048 public:
00049
00055 FEMP() : m_Data(0)
00056 {
00057 }
00058
00063 FEMP(const FEMP& x)
00064 {
00065 if (x.m_Data) { m_Data=static_cast<T*>(&*x.m_Data->Clone()); }
00066 else { m_Data=0; }
00067 }
00068
00075 explicit FEMP(typename T::Pointer x) : m_Data(x)
00076 {
00077 }
00078
00082 ~FEMP()
00083 {
00084 #ifndef FEM_USE_SMART_POINTERS
00085 delete m_Data;
00086 #endif
00087 }
00088
00092 const FEMP& operator= (const FEMP &rhs);
00093
00097 typename T::Pointer operator-> () const { return m_Data; }
00098
00103 operator T * () const
00104 {
00105 return m_Data;
00106 }
00107
00112 bool IsNULL() const
00113 {
00114 return (m_Data==0);
00115 }
00116
00117 private:
00118
00122 typename T::Pointer m_Data;
00123
00124 };
00125
00126
00127
00128
00129 template<class T>
00130 const FEMP<T>& FEMP<T>::operator= (const FEMP &rhs)
00131 {
00132
00134 if (&rhs!=this)
00135 {
00139 #ifndef FEM_USE_SMART_POINTERS
00140 delete m_Data;
00141 #else
00142 m_Data=0;
00143 #endif
00144
00149 if (rhs.m_Data) { m_Data=static_cast<T*>(&*rhs.m_Data->Clone()); }
00150 else { m_Data=0; }
00151
00152 }
00153 return *this;
00154 }
00155
00156
00157
00158
00159 }}
00160
00161 #endif // #ifndef __itkFEMP_h