00001 // -*- C++ -*- 00020 #ifndef Consumer_h 00021 #define Consumer_h 00022 #include <iostream> 00023 #ifdef ORB_IS_MICO 00024 #include <CORBA.h> 00025 #endif 00026 #ifdef ORB_IS_OMNIORB 00027 #include <omniORB4/CORBA.h> 00028 #endif 00029 #ifdef ORB_IS_ORBACUS 00030 #include <OB/CORBA.h> 00031 #endif 00032 #ifdef ORB_IS_ORBIT2 00033 #include <orbitcpp/orb-cpp/orbitcpp.h> 00034 #endif 00035 #ifdef ORB_IS_ORBIX 00036 #include <CORBA.h> 00037 #endif 00038 #ifdef ORB_IS_TAO 00039 #include <tao/corba.h> 00040 #endif 00041 00056 namespace RTC 00057 { 00081 class CorbaConsumerBase 00082 { 00083 public: 00095 CorbaConsumerBase(){}; 00096 00112 CorbaConsumerBase(const CorbaConsumerBase& x) 00113 { 00114 m_objref = x.m_objref; 00115 } 00116 00136 CorbaConsumerBase& operator=(const CorbaConsumerBase& x) 00137 { 00138 m_objref = x.m_objref; 00139 return *this; 00140 } 00141 00153 virtual ~CorbaConsumerBase(){}; 00154 00180 virtual bool setObject(CORBA::Object_ptr obj) 00181 { 00182 if (CORBA::is_nil(obj)) 00183 { 00184 return false; 00185 } 00186 m_objref = CORBA::Object::_duplicate(obj); 00187 return true; 00188 } 00189 00211 virtual CORBA::Object_ptr getObject() 00212 { 00213 return m_objref; 00214 } 00215 00233 virtual void releaseObject() 00234 { 00235 m_objref = CORBA::Object::_nil(); 00236 } 00237 00238 protected: 00246 CORBA::Object_var m_objref; 00247 }; 00248 00292 template <class ObjectType, 00293 typename ObjectTypePtr = typename ObjectType::_ptr_type, 00294 typename ObjectTypeVar = typename ObjectType::_var_type> 00295 class CorbaConsumer 00296 : public CorbaConsumerBase 00297 { 00298 public: 00310 CorbaConsumer(){}; 00311 00327 CorbaConsumer(const CorbaConsumer& x) 00328 { 00329 m_var = x.m_var; 00330 } 00331 00351 CorbaConsumer& operator=(const CorbaConsumer& x) 00352 { 00353 m_var = x.m_var; 00354 } 00355 00367 virtual ~CorbaConsumer() 00368 { 00369 }; 00370 00398 virtual bool setObject(CORBA::Object_ptr obj) 00399 { 00400 if (CorbaConsumerBase::setObject(obj)) 00401 { 00402 m_var = ObjectType::_duplicate(ObjectType::_narrow(m_objref)); 00403 if (!CORBA::is_nil(m_var)) 00404 return true; 00405 } 00406 return false; // object is nil 00407 } 00408 00433 inline ObjectTypePtr _ptr() 00434 { 00435 return m_var; 00436 } 00437 00462 inline ObjectTypePtr operator->() 00463 { 00464 return m_var; 00465 } 00466 00484 virtual void releaseObject() 00485 { 00486 CorbaConsumerBase::releaseObject(); 00487 m_var = ObjectType::_nil(); 00488 } 00489 00490 protected: 00498 ObjectTypeVar m_var; 00499 }; 00500 }; // namespace RTC 00501 #endif // Consumer_h