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