00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef ___HxCorbaBlob2d_tie_h__
00016 #define ___HxCorbaBlob2d_tie_h__
00017
00018 #include <HxCorbaBlob2d_skel.h>
00019
00020 #ifndef OB_INTEGER_VERSION
00021 # error No ORBacus version defined! Is <OB/CORBA.h> included?
00022 #endif
00023
00024 #ifndef OB_NO_VERSION_CHECK
00025 # if (OB_INTEGER_VERSION != 4010000L)
00026 # error ORBacus version mismatch!
00027 # endif
00028 #endif
00029
00030
00031
00032
00033 namespace POA_HxCorba
00034 {
00035
00036
00037
00038
00039 template<class T>
00040 class Blob2d_tie : virtual public Blob2d
00041 {
00042 T* ptr_;
00043 PortableServer::POA_ptr poa_;
00044 CORBA::Boolean rel_;
00045
00046 Blob2d_tie(const Blob2d_tie<T>&) { }
00047 void operator=(const Blob2d_tie<T>&) { }
00048
00049 public:
00050
00051 Blob2d_tie(T& t)
00052 : ptr_(&t), poa_(PortableServer::POA::_nil()), rel_(false)
00053 {
00054 }
00055
00056 Blob2d_tie(T& t, PortableServer::POA_ptr poa)
00057 : ptr_(&t), poa_(PortableServer::POA::_duplicate(poa)), rel_(false)
00058 {
00059 }
00060
00061 Blob2d_tie(T* p, CORBA::Boolean release = true)
00062 : ptr_(p), poa_(PortableServer::POA::_nil()), rel_(release)
00063 {
00064 }
00065
00066 Blob2d_tie(T* p, PortableServer::POA_ptr poa, CORBA::Boolean release = true)
00067 : ptr_(p), poa_(PortableServer::POA::_duplicate(poa)), rel_(release)
00068 {
00069 }
00070
00071 virtual
00072 ~Blob2d_tie()
00073 {
00074 if(rel_)
00075 delete ptr_;
00076
00077 CORBA::release(poa_);
00078 }
00079
00080 T*
00081 _tied_object()
00082 {
00083 return ptr_;
00084 }
00085
00086 void
00087 _tied_object(T& obj)
00088 {
00089 if(rel_)
00090 delete ptr_;
00091
00092 ptr_ = &obj;
00093 rel_ = false;
00094 }
00095
00096 void
00097 _tied_object(T* obj, CORBA::Boolean release = true)
00098 {
00099 if(rel_)
00100 delete ptr_;
00101
00102 ptr_ = obj;
00103 rel_ = release;
00104 }
00105
00106 CORBA::Boolean
00107 _is_owner()
00108 {
00109 return rel_;
00110 }
00111
00112 void
00113 _is_owner(CORBA::Boolean b)
00114 {
00115 rel_ = b;
00116 }
00117
00118 virtual CORBA::Long
00119 ident()
00120 throw(CORBA::SystemException)
00121 {
00122 return ptr_ -> ident();
00123 }
00124
00125 virtual HxCorba::ImageRep_ptr
00126 getInputImage()
00127 throw(CORBA::SystemException)
00128 {
00129 return ptr_ -> getInputImage();
00130 }
00131
00132 virtual HxCorba::ImageRep_ptr
00133 getLabeledImage()
00134 throw(CORBA::SystemException)
00135 {
00136 return ptr_ -> getLabeledImage();
00137 }
00138
00139 virtual CORBA::Long
00140 getLabel()
00141 throw(CORBA::SystemException)
00142 {
00143 return ptr_ -> getLabel();
00144 }
00145
00146 virtual CORBA::Long
00147 getContourX()
00148 throw(CORBA::SystemException)
00149 {
00150 return ptr_ -> getContourX();
00151 }
00152
00153 virtual CORBA::Long
00154 getContourY()
00155 throw(CORBA::SystemException)
00156 {
00157 return ptr_ -> getContourY();
00158 }
00159
00160 virtual CORBA::Long
00161 getContourLength()
00162 throw(CORBA::SystemException)
00163 {
00164 return ptr_ -> getContourLength();
00165 }
00166
00167 virtual HxCorba::ContourCodeSeq*
00168 getContourCodes()
00169 throw(CORBA::SystemException)
00170 {
00171 return ptr_ -> getContourCodes();
00172 }
00173
00174 virtual void
00175 fillRgb(HxCorba::RgbBuffer_ptr buf)
00176 throw(CORBA::SystemException)
00177 {
00178 ptr_ -> fillRgb(buf);
00179 }
00180
00181 virtual HxCorba::PixValue
00182 getFeature(const char* name)
00183 throw(CORBA::SystemException)
00184 {
00185 return ptr_ -> getFeature(name);
00186 }
00187
00188 PortableServer::POA_ptr _default_POA()
00189 {
00190 if(!CORBA::is_nil(poa_))
00191 return PortableServer::POA::_duplicate(poa_);
00192 else
00193 return Blob2d::_default_POA();
00194 }
00195 };
00196
00197 }
00198
00199 #endif