CorbaConsumer.h

説明を見る。
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

OpenRTMに対してThu May 29 15:03:26 2008に生成されました。  doxygen 1.5.3