メインページ | ネームスペース一覧 | クラス階層 | 構成 | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

RtcInPort.h

説明を見る。
00001 // -*- C++ -*-
00021 #ifndef __RtcInPort_h__
00022 #define __RtcInPort_h__
00023 
00024 #include "rtm/RtcInPortBase.h"
00025 #include "rtm/idl/RTCDataTypeSkel.h"
00026 #include <iostream>
00027 
00028 namespace RTM
00029 {
00056   template <class T> class InPortAny
00057         : public InPortBase
00058   {
00059   public:
00085         InPortAny(const char* name, T& value, int bufsize=64)
00086           : m_Buffer(bufsize), m_Value(value)
00087         {
00088           // Set PortProfile
00089           m_Profile.name = CORBA::string_dup(name);
00090           CORBA::Any var;
00091           var <<= m_Value;
00092           m_Profile.port_type = var.type();
00093           
00094           // Initializing ring buffer
00095           for (int i = 0 ; i <= m_Buffer.buff_length(); i++)
00096                 {
00097                   m_Buffer.put(value);
00098                 }
00099         };
00100 
00124         InPortAny(const char* name, int bufsize=64)
00125           : m_Buffer(bufsize), m_Value(m_Dummy)
00126         {
00127           // Set PortProfile
00128           m_Profile.name = CORBA::string_dup(name);
00129           CORBA::Any var;
00130           var <<= m_Value;
00131           m_Profile.port_type = var.type();
00132           
00133           // Initializing ring buffer
00134           for (int i = 0 ; i <= m_Buffer.buff_length(); i++)
00135                 {
00136                   m_Buffer.put(m_Value);
00137                 }
00138         };
00139         
00140         
00154         virtual ~InPortAny(){};
00155 
00169         virtual void put(const CORBA::Any& value)
00170           throw (RTM::InPort::Disconnected, CORBA::SystemException)
00171         {
00172           T* tmp;
00173 
00174           if (value >>= tmp)
00175                 m_Buffer.put(*tmp);
00176           return;
00177         }
00178         
00192         virtual void initBuffer(T& value)
00193         {
00194           for (int i = 0 ; i <= m_Buffer.buff_length(); i++)
00195                 {
00196                   m_Buffer.put(value);
00197                 }
00198         }
00199 
00200 
00217         virtual void read_pm()
00218         {
00219           m_Value = m_Buffer.get_new();
00220           return;
00221         };
00222         
00237         virtual T read()
00238         {
00239           m_Value = m_Buffer.get_new();
00240           return m_Value;
00241         };
00242         
00258         virtual bool operator>>(T& rhs)
00259         {
00260           rhs = m_Buffer.get_new();
00261           return true;
00262         };
00263 
00275         virtual bool isNew()
00276         {
00277           return m_Buffer.is_new();
00278         }
00279 
00280 
00292         virtual int getNewDataLen()
00293         {
00294           return m_Buffer.new_data_len();
00295         }
00296 
00297 
00309         virtual std::vector<T> getNewList()
00310         {
00311           return m_Buffer.get_new_list();
00312         }
00313         
00314 
00326         virtual std::vector<T> getNewListReverse()
00327         {
00328           return m_Buffer.get_new_rlist();
00329         }
00330         
00331 
00332   private:
00340         T& m_Value;
00341 
00349         T  m_Dummy;
00350 
00358         T* m_Tmp;
00359 
00367         RingBuffer<T> m_Buffer;
00368 
00369   };
00370   
00371 }; // End of namesepace RTM
00372 
00373 #endif // __RtcInPort_h__

OpenRTMに対してWed Apr 6 14:22:11 2005に生成されました。 doxygen 1.3.6