00001
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef Consumer_h
00039 #define Consumer_h
00040 #include <iostream>
00041 #ifdef ORB_IS_MICO
00042 #include <CORBA.h>
00043 #endif
00044 #ifdef ORB_IS_OMNIORB
00045 #include <omniORB4/CORBA.h>
00046 #endif
00047 #ifdef ORB_IS_ORBACUS
00048 #include <OB/CORBA.h>
00049 #endif
00050 #ifdef ORB_IS_ORBIT2
00051 #include <orbitcpp/orb-cpp/orbitcpp.h>
00052 #endif
00053 #ifdef ORB_IS_ORBIX
00054 #include <CORBA.h>
00055 #endif
00056 #ifdef ORB_IS_TAO
00057 #include <tao/corba.h>
00058 #endif
00059
00060 namespace RTC
00061 {
00071 class CorbaConsumerBase
00072 {
00073 public:
00081 CorbaConsumerBase(){};
00082
00090 CorbaConsumerBase(const CorbaConsumerBase& x)
00091 {
00092 m_objref = x.m_objref;
00093 }
00094
00095 CorbaConsumerBase& operator=(const CorbaConsumerBase& x)
00096 {
00097 m_objref = x.m_objref;
00098 return *this;
00099 }
00100
00108 virtual ~CorbaConsumerBase(){};
00109
00110
00133 virtual bool setObject(CORBA::Object_ptr obj)
00134 {
00135 if (CORBA::is_nil(obj))
00136 {
00137 return false;
00138 }
00139 m_objref = obj;
00140 return true;
00141 }
00142
00163 virtual CORBA::Object_ptr getObject()
00164 {
00165 return m_objref;
00166 }
00167
00168 virtual void releaseObject()
00169 {
00170 m_objref = CORBA::Object::_nil();
00171 }
00172
00173 protected:
00174 CORBA::Object_var m_objref;
00175 };
00176
00177
00178
00218 template <class ObjectType,
00219 class ObjectTypePtr = class ObjectType::_ptr_type,
00220 class ObjectTypeVar = class ObjectType::_var_type>
00221 class CorbaConsumer
00222 : public CorbaConsumerBase
00223 {
00224 public:
00232 CorbaConsumer(){};
00233
00234 CorbaConsumer(const CorbaConsumer& x)
00235 {
00236 m_var = x.m_var;
00237 }
00238
00239 CorbaConsumer& operator=(const CorbaConsumer& x)
00240 {
00241 m_var = x.m_var;
00242 }
00243
00251 virtual ~CorbaConsumer(){};
00252
00272 virtual bool setObject(CORBA::Object_ptr obj)
00273 {
00274 if (CorbaConsumerBase::setObject(obj))
00275 {
00276 m_var = ObjectType::_narrow(m_objref);
00277 if (!CORBA::is_nil(m_var))
00278 return true;
00279 }
00280 return false;
00281 }
00282
00283
00308 inline ObjectTypePtr _ptr()
00309 {
00310 return m_var;
00311 }
00312
00337 inline ObjectTypePtr operator->()
00338 {
00339 return m_var;
00340 }
00341
00342 virtual void releaseObject()
00343 {
00344 CorbaConsumerBase::releaseObject();
00345 m_var = ObjectType::_nil();
00346 }
00347
00348 protected:
00349 ObjectTypeVar m_var;
00350
00351 };
00352 };
00353 #endif // Consumer_h