OpenRTM-aist 2.0.2
Loading...
Searching...
No Matches
CORBA_CdrMemoryStream.h
Go to the documentation of this file.
1// -*- C++ -*-
20#ifndef RTC_CORBA_CDRMEMORYSTREAM_H
21#define RTC_CORBA_CDRMEMORYSTREAM_H
22
23#include <rtm/RTC.h>
24#include <rtm/idl/DataPort_OpenRTMSkel.h>
26
27
28
43namespace RTC
44{
66 {
67 public:
83
105 template<class ExDataType>
106 bool serializeCDR(const ExDataType& data)
107 {
108#ifdef ORB_IS_ORBEXPRESS
109 try
110 {
111 m_cdr.rewind();
112 m_cdr.is_little_endian(m_endian);
113 m_cdr << data;
114 return true;
115 }
116 catch (...)
117 {
118 return false;
119 }
120#elif defined(ORB_IS_TAO)
121 try
122 {
123 m_cdr.reset();
124 m_cdr << data;
125 return true;
126 }
127 catch (...)
128 {
129 return false;
130 }
131#else
132 try
133 {
134 m_cdr.rewindPtrs();
135 m_cdr.setByteSwapFlag(m_endian);
136 data >>= m_cdr;
137 return true;
138 }
139 catch (...)
140 {
141 return false;
142 }
143#endif
144 }
145
165 template<class ExDataType>
166 bool deserializeCDR(ExDataType& data)
167 {
168#ifdef ORB_IS_ORBEXPRESS
169 try
170 {
171 m_cdr >> data;
172 return true;
173 }
174 catch (...)
175 {
176 return false;
177 }
178#elif defined(ORB_IS_TAO)
179 try
180 {
181 TAO_InputCDR tao_cdr = TAO_InputCDR(m_cdr);
182 tao_cdr >> data;
183 return true;
184 }
185 catch (...)
186 {
187 return false;
188 }
189#else
190 try
191 {
192 data <<= m_cdr;
193 return true;
194 }
195 catch (...)
196 {
197 return false;
198 }
199#endif
200 }
201
219 void setEndian(bool little_endian);
220
238 const unsigned char* getBuffer();
256 unsigned long getCdrDataLength() const;
257
275#ifdef ORB_IS_ORBEXPRESS
276 CORBA::Stream& getCdr();
277#elif defined(ORB_IS_TAO)
278 TAO_OutputCDR& getCdr();
279#else
280 cdrMemoryStream& getCdr();
281#endif
282
302 void writeCdrData(const unsigned char* buffer, unsigned long length);
303
323 void readCdrData(unsigned char* buffer, unsigned long length) const;
324
339 {
340#ifdef ORB_IS_ORBEXPRESS
341 m_cdr.copy(rhs.m_cdr);
342#elif defined(ORB_IS_TAO)
343 for (const ACE_Message_Block *i = rhs.m_cdr.begin(); i != nullptr; i = i->cont())
344 {
345 m_cdr.write_octet_array_mb(i);
346 }
347#else
348 m_cdr = rhs.m_cdr;
349#endif
350 }
351
352
369 {
370#ifdef ORB_IS_ORBEXPRESS
371 m_cdr.copy(rhs.m_cdr);
372 return *this;
373#elif defined(ORB_IS_TAO)
374 for (const ACE_Message_Block *i = rhs.m_cdr.begin(); i != nullptr; i = i->cont())
375 {
376 m_cdr.write_octet_array_mb(i);
377 }
378 return *this;
379#else
380 m_cdr = rhs.m_cdr;
381 return *this;
382#endif
383 }
384
385 protected:
386#ifdef ORB_IS_ORBEXPRESS
387 CORBA::Stream m_cdr;
388#elif defined(ORB_IS_TAO)
389 TAO_OutputCDR m_cdr;
390#else
391 cdrMemoryStream m_cdr;
392#endif
393 bool m_endian{true};
394 };
414 template <class DataType>
415 class CORBA_CdrSerializer : public ByteDataStream<DataType>
416 {
417 public:
433
449 ~CORBA_CdrSerializer() override = default;
450
464 void init(const coil::Properties& /*prop*/) override
465 {
466 }
483 void writeData(const unsigned char* buffer, unsigned long length) override
484 {
485 m_cdr.writeCdrData(buffer, length);
486 }
487
504 void readData(unsigned char* buffer, unsigned long length) const override
505 {
506 m_cdr.readCdrData(buffer, length);
507 }
508
522 unsigned long getDataLength() const override
523 {
524 return m_cdr.getCdrDataLength();
525 }
526
542 bool serialize(const DataType& data) override
543 {
544 return m_cdr.serializeCDR(data);
545 }
546
560 bool deserialize(DataType& data) override
561 {
562 return m_cdr.deserializeCDR(data);
563 }
564
579 {
580 m_cdr = rhs.m_cdr;
581 }
582
599 {
600 m_cdr = rhs.m_cdr;
601 return *this;
602 }
603
617 void isLittleEndian(bool little_endian) override
618 {
619 m_cdr.setEndian(little_endian);
620 }
621 protected:
623
624
625 };
626
627
628
629
630
631} // namespace RTC
632
633
634
635
636
637
649template <class DataType>
654
655
656
657
658
659#endif // RTC_CORBA_CDRMEMORYSTREAM_H
Data Stream Buffer Base class.
void CdrMemoryStreamInit()
Definition CORBA_CdrMemoryStream.h:650
RTComponent header.
Definition ByteDataStreamBase.h:200
Definition CORBA_CdrMemoryStream.h:66
cdrMemoryStream m_cdr
Definition CORBA_CdrMemoryStream.h:391
void writeCdrData(const unsigned char *buffer, unsigned long length)
CORBA_CdrMemoryStream & operator=(const CORBA_CdrMemoryStream &rhs)
Definition CORBA_CdrMemoryStream.h:368
unsigned long getCdrDataLength() const
const unsigned char * getBuffer()
void readCdrData(unsigned char *buffer, unsigned long length) const
bool m_endian
Definition CORBA_CdrMemoryStream.h:393
bool serializeCDR(const ExDataType &data)
Definition CORBA_CdrMemoryStream.h:106
cdrMemoryStream & getCdr()
void setEndian(bool little_endian)
CORBA_CdrMemoryStream()
Constructor.
bool deserializeCDR(ExDataType &data)
Definition CORBA_CdrMemoryStream.h:166
CORBA_CdrMemoryStream(const CORBA_CdrMemoryStream &rhs)
Definition CORBA_CdrMemoryStream.h:338
Definition CORBA_CdrMemoryStream.h:416
~CORBA_CdrSerializer() override=default
Virtual destractor.
void isLittleEndian(bool little_endian) override
Definition CORBA_CdrMemoryStream.h:617
CORBA_CdrMemoryStream m_cdr
Definition CORBA_CdrMemoryStream.h:622
bool serialize(const DataType &data) override
Definition CORBA_CdrMemoryStream.h:542
bool deserialize(DataType &data) override
Definition CORBA_CdrMemoryStream.h:560
CORBA_CdrSerializer()=default
Constructor.
CORBA_CdrSerializer< DataType > & operator=(const CORBA_CdrSerializer< DataType > &rhs)
Definition CORBA_CdrMemoryStream.h:598
unsigned long getDataLength() const override
Definition CORBA_CdrMemoryStream.h:522
void init(const coil::Properties &) override
Definition CORBA_CdrMemoryStream.h:464
void readData(unsigned char *buffer, unsigned long length) const override
Definition CORBA_CdrMemoryStream.h:504
void writeData(const unsigned char *buffer, unsigned long length) override
Definition CORBA_CdrMemoryStream.h:483
RT-Component.
void addSerializer(const std::string &marshalingtype)
Definition ByteDataStreamBase.h:314