00001
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef Consumer_h
00043 #define Consumer_h
00044 #include <iostream>
00045 #ifdef ORB_IS_MICO
00046 #include <CORBA.h>
00047 #endif
00048 #ifdef ORB_IS_OMNIORB
00049 #include <omniORB4/CORBA.h>
00050 #endif
00051 #ifdef ORB_IS_ORBACUS
00052 #include <OB/CORBA.h>
00053 #endif
00054 #ifdef ORB_IS_ORBIT2
00055 #include <orbitcpp/orb-cpp/orbitcpp.h>
00056 #endif
00057 #ifdef ORB_IS_ORBIX
00058 #include <CORBA.h>
00059 #endif
00060 #ifdef ORB_IS_TAO
00061 #include <tao/corba.h>
00062 #endif
00063
00064 namespace RTC
00065 {
00075 class CorbaConsumerBase
00076 {
00077 public:
00085 CorbaConsumerBase(){};
00086
00094 CorbaConsumerBase(const CorbaConsumerBase& x)
00095 {
00096 m_objref = x.m_objref;
00097 }
00098
00099 CorbaConsumerBase& operator=(const CorbaConsumerBase& x)
00100 {
00101 m_objref = x.m_objref;
00102 return *this;
00103 }
00104
00112 virtual ~CorbaConsumerBase(){};
00113
00114
00137 virtual bool setObject(CORBA::Object_ptr obj)
00138 {
00139 if (CORBA::is_nil(obj))
00140 {
00141 return false;
00142 }
00143 m_objref = CORBA::Object::_duplicate(obj);
00144 return true;
00145 }
00146
00167 virtual CORBA::Object_ptr getObject()
00168 {
00169 return m_objref;
00170 }
00171
00172 virtual void releaseObject()
00173 {
00174 m_objref = CORBA::Object::_nil();
00175 }
00176
00177 protected:
00178 CORBA::Object_var m_objref;
00179 };
00180
00181
00182
00222 template <class ObjectType,
00223 typename ObjectTypePtr = typename ObjectType::_ptr_type,
00224 typename ObjectTypeVar = typename ObjectType::_var_type>
00225 class CorbaConsumer
00226 : public CorbaConsumerBase
00227 {
00228 public:
00236 CorbaConsumer(){};
00237
00238 CorbaConsumer(const CorbaConsumer& x)
00239 {
00240 m_var = x.m_var;
00241 }
00242
00243 CorbaConsumer& operator=(const CorbaConsumer& x)
00244 {
00245 m_var = x.m_var;
00246 }
00247
00255 virtual ~CorbaConsumer()
00256 {
00257 };
00258
00278 virtual bool setObject(CORBA::Object_ptr obj)
00279 {
00280 if (CorbaConsumerBase::setObject(obj))
00281 {
00282 m_var = ObjectType::_duplicate(ObjectType::_narrow(m_objref));
00283 if (!CORBA::is_nil(m_var))
00284 return true;
00285 }
00286 return false;
00287 }
00288
00289
00314 inline ObjectTypePtr _ptr()
00315 {
00316 return m_var;
00317 }
00318
00343 inline ObjectTypePtr operator->()
00344 {
00345 return m_var;
00346 }
00347
00348 virtual void releaseObject()
00349 {
00350 CorbaConsumerBase::releaseObject();
00351 m_var = ObjectType::_nil();
00352 }
00353
00354 protected:
00355 ObjectTypeVar m_var;
00356
00357 };
00358 };
00359 #endif // Consumer_h