Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

CorbaConsumer.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00020 /*
00021  * $Log: CorbaConsumer.h,v $
00022  * Revision 1.4  2007/01/12 14:29:18  n-ando
00023  * A trivial bug fix.
00024  *
00025  * Revision 1.3  2007/01/06 17:39:33  n-ando
00026  * The copy constructor and the substitution operator were added.
00027  *
00028  * Revision 1.2  2007/01/04 00:48:20  n-ando
00029  * - Class name has changed.
00030  * - operator->() was added.
00031  * - CorbaConsumer::releaseObject() was added.
00032  *
00033  * Revision 1.1  2006/11/21 08:32:26  n-ando
00034  * ConsumerBase class and Cosnumer class were added for proxy placeholder.
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; // object is nil
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 }; // namespace RTC
00353 #endif // Consumer_h

Generated on Mon Jan 15 12:15:34 2007 for OpenRTM by  doxygen 1.4.1