25 value = (value + by - 1) & ~(by - 1);
57 ACE_TEXT(
"(%P|%t) ERROR: Encoding::kind: Invalid Argument: %u\n"), value));
120 const size_t max_alignment =
max_align();
149 ACE_TEXT(
"Invalid Argument: %u\n"), kind));
175 return kind_ != KIND_INVALID;
243 const size_t len = current_->length();
244 const size_t remainder = (size - offset > len) ? size - offset - len : 0;
249 const size_t initial = size - offset - remainder;
256 ? swapcpy(dest + remainder, current_->rd_ptr(), initial)
257 : smemcpy(dest + offset, current_->rd_ptr(), initial);
258 current_->rd_ptr(initial);
290 if (current_->length() == 0) {
294 current_ = current_->cont();
301 return offset + initial;
309 while (size > offset) {
310 offset = doread(dest, size, swap, offset);
332 const size_t spc = current_->space();
333 const size_t remainder = (size - offset > spc) ? size - offset - spc : 0;
338 const size_t initial = size - offset - remainder;
344 ? swapcpy(current_->wr_ptr(), src + remainder, initial)
345 : smemcpy(current_->wr_ptr(), src + offset, initial);
346 current_->wr_ptr(initial);
378 if (current_->space() == 0) {
382 current_ = current_->cont();
389 return offset + initial;
397 while (size > offset) {
398 offset = dowrite(src, size, swap, offset);
439 return good_bit_ && current_ ? current_->total_length() : 0;
449 for (
size_t len = static_cast<size_t>(n * size); len;) {
454 const size_t cur_len = current_->length();
455 if (cur_len <= len) {
457 current_->rd_ptr(current_->wr_ptr());
460 current_->rd_ptr(len);
474 read_array(x, size, length, swap_bytes_);
481 if (!swap || size == 1) {
486 buffer_read(x, size * length,
false);
494 while (length-- > 0) {
495 buffer_read(x, size,
true);
504 write_array(x, size, length, swap_bytes_);
511 if (!swap || size == 1) {
515 buffer_write(x, size * length,
false);
525 while (length-- > 0) {
526 buffer_write(x, size,
true);
560 read_array(reinterpret_cast<char*>(x),
byte_cdr_size, length);
564 #if OPENDDS_HAS_EXPLICIT_INTS 568 read_array(reinterpret_cast<char*>(x),
int8_cdr_size, length);
681 write_array(reinterpret_cast<const char*>(x),
char8_cdr_size, length);
699 write_array(reinterpret_cast<const char*>(x),
byte_cdr_size, length);
703 #if OPENDDS_HAS_EXPLICIT_INTS 707 write_array(reinterpret_cast<const char*>(x),
int8_cdr_size, length);
714 write_array(reinterpret_cast<const char*>(x),
uint8_cdr_size, length);
725 write_array(reinterpret_cast<const char*>(x),
int16_cdr_size, length);
735 write_array(reinterpret_cast<const char*>(x),
uint16_cdr_size, length);
745 write_array(reinterpret_cast<const char*>(x),
int32_cdr_size, length);
755 write_array(reinterpret_cast<const char*>(x),
uint32_cdr_size, length);
766 write_array(reinterpret_cast<const char*>(x),
int64_cdr_size, length);
777 write_array(reinterpret_cast<const char*>(x),
uint64_cdr_size, length);
824 (al - ptrdiff_t(current_->rd_ptr()) + align_rshift_) % al;
826 return skip(static_cast<ACE_CDR::UShort>(len));
841 (al - ptrdiff_t(current_->wr_ptr()) + align_wshift_) % al;
847 const size_t cur_spc = current_->space();
848 if (cur_spc <= len) {
851 smemcpy(current_->wr_ptr(), ALIGN_PAD, cur_spc);
853 current_->wr_ptr(cur_spc);
858 smemcpy(current_->wr_ptr(), ALIGN_PAD, len);
860 current_->wr_ptr(len);
871 return static_cast<unsigned char>((ptrdiff_t(index) - start) % align);
878 const size_t thisblock =
879 max_align ? (ptrdiff_t(current_->rd_ptr()) - align_rshift_) %
max_align : 0;
881 current_ = current_->cont();
883 if (current_ && max_align) {
884 align_rshift_ = offset(current_->rd_ptr(), thisblock,
max_align);
892 const size_t thisblock =
893 max_align ? (ptrdiff_t(current_->wr_ptr()) - align_wshift_) %
max_align : 0;
895 current_ = current_->cont();
897 if (current_ && max_align) {
898 align_wshift_ = offset(current_->wr_ptr(), thisblock,
max_align);
916 if (*
this >> dheader) {
1055 s.
buffer_write(reinterpret_cast<const char*>(x), stringlen,
false);
1072 #if ACE_SIZEOF_WCHAR == 2 1073 s.
write_array(reinterpret_cast<const char*>(x), char16_cdr_size, length,
1076 for (
size_t i = 0; i < length && s.
good_bit(); ++i) {
1077 const ACE_UINT16 as_utf16 =
static_cast<ACE_UINT16
>(x[i]);
1078 if (as_utf16 != x[i]) {
1082 s.
buffer_write(reinterpret_cast<const char*>(&as_utf16), char16_cdr_size,
1093 #ifdef NONNATIVE_LONGDOUBLE 1126 #if ACE_SIZEOF_WCHAR == 2 1129 const ACE_UINT16 as_utf16 =
static_cast<ACE_UINT16
>(x.
val_);
1130 if (as_utf16 != x.
val_) {
1133 ACE_TEXT(
"operator<<(Serializer&, ACE_OutputCDR::from_wchar): ")
1134 ACE_TEXT(
"failure to convert UTF-32 to UTF-16.\n")));
1148 return s << x.c_str();
1152 operator<<(Serializer& s, Serializer::FromBoundedString<char> x)
1154 return (x.bound_ == 0 || x.str_.size() <= x.bound_) && s << x.str_;
1157 #ifdef DDS_HAS_WCHAR 1161 return s << x.c_str();
1165 operator<<(Serializer& s, Serializer::FromBoundedString<wchar_t> x)
1167 return (x.bound_ == 0 || x.str_.size() <= x.bound_) && s << x.str_;
1202 #if OPENDDS_HAS_EXPLICIT_INTS 1337 #ifdef NONNATIVE_LONGDOUBLE 1373 #if ACE_SIZEOF_WCHAR == 2 1377 ACE_UINT16 as_utf16;
1406 const size_t length = s.
read_string(const_cast<ACE_CDR::WChar*&>(x.
val_));
1414 #if OPENDDS_HAS_EXPLICIT_INTS 1438 x.assign(buf, length);
1456 #ifdef DDS_HAS_WCHAR 1465 x.assign(buf, length);
1615 #if OPENDDS_HAS_EXPLICIT_INTS 1674 #if OPENDDS_HAS_EXPLICIT_INTS 1676 void primitive_serialized_size_uint8(
const Encoding& ,
size_t& size,
1683 void primitive_serialized_size_int8(
const Encoding& ,
size_t& size,
1709 running_size += size;
1712 if (running_size != 0 && size != 1 && size != 2 && size != 4 && size != 8) {
1717 running_size += size;
1735 size += running_size;
1737 if (running_size != 0 && size != 1 && size != 2 && size != 4 && size != 8) {
1740 size += running_size;
1747 return construction_status_;
1753 construction_status_ = cs;
bool write_char_array(const ACE_CDR::Char *x, ACE_CDR::ULong length)
bool read_boolean_array(ACE_CDR::Boolean *x, ACE_CDR::ULong length)
bool read_delimiter(size_t &size)
const size_t boolean_cdr_size
void swap(MessageBlock &lhs, MessageBlock &rhs)
const ACE_CDR::WChar *& val_
void buffer_write(const char *src, size_t size, bool swap)
Write to the chain from a source buffer.
const size_t int8_cdr_size
const LogLevel::Value value
bool read_long_array(ACE_CDR::Long *x, ACE_CDR::ULong length)
const size_t uint64_cdr_size
OpenDDS_Dcps_Export void primitive_serialized_size_ulong(const Encoding &encoding, size_t &size, size_t count=1)
const size_t int64_cdr_size
Alignment alignment() const
bool skip(size_t n, int size=1)
bool write_ulonglong_array(const ACE_CDR::ULongLong *x, ACE_CDR::ULong length)
bool is_encapsulated() const
YARD is all original work While it may rely on standard YARD does not include code from other sources We have chosen to release our work as public domain code This means that YARD has been released outside the copyright system Feel free to use the code in any way you wish especially in an academic plagiarism has very little to do with copyright In an academic or in any situation where you are expected to give credit to other people s you will need to cite YARD as a source The author is Christopher and the appropriate date is December the release date for we can t make any promises regarding whether YARD will do what you or whether we will make any changes you ask for You are free to hire your own expert for that If you choose to distribute YARD you ll probably want to read up on the laws covering warranties in your state
Encoding::Alignment alignment() const
bool read_longdouble_array(ACE_CDR::LongDouble *x, ACE_CDR::ULong length)
const ACE_CDR::ULong bound_
OpenDDS_Dcps_Export void serialized_size_delimiter(const Encoding &encoding, size_t &size)
Add delimiter to the size of a serialized size if the encoding has them.
Endianness endianness() const
bool read_longlong_array(ACE_CDR::LongLong *x, ACE_CDR::ULong length)
OpenDDS_Dcps_Export void primitive_serialized_size_octet(const Encoding &encoding, size_t &size, size_t count=1)
const size_t float64_cdr_size
bool write_longlong_array(const ACE_CDR::LongLong *x, ACE_CDR::ULong length)
const size_t int16_cdr_size
bool read_octet_array(ACE_CDR::Octet *x, ACE_CDR::ULong length)
bool read_ushort_array(ACE_CDR::UShort *x, ACE_CDR::ULong length)
void serialized_size(const Encoding &encoding, size_t &size, const SequenceNumber &)
bool write_wchar_array(const ACE_CDR::WChar *x, ACE_CDR::ULong length)
const size_t uint32_cdr_size
bool read_ulonglong_array(ACE_CDR::ULongLong *x, ACE_CDR::ULong length)
size_t strlen(const char *s)
unsigned char align_rshift
bool read_short_array(ACE_CDR::Short *x, ACE_CDR::ULong length)
const size_t float32_cdr_size
bool write_octet_array(const ACE_CDR::Octet *x, ACE_CDR::ULong length)
bool write_short_array(const ACE_CDR::Short *x, ACE_CDR::ULong length)
bool skip_sequence_dheader_
OpenDDS_Dcps_Export void primitive_serialized_size_char(const Encoding &encoding, size_t &size, size_t count=1)
bool write_long_array(const ACE_CDR::Long *x, ACE_CDR::ULong length)
bool write_list_end_parameter_id()
void read_array(char *x, size_t size, ACE_CDR::ULong length)
Class to serialize and deserialize data for DDS.
ACE_CDR::Boolean operator<<(Serializer &serializer, CoherentChangeControl &value)
Marshal/Insertion into a buffer.
const size_t xcdr1_pid_alignment
size_t length() const
Number of bytes left to read in message block chain.
OpenDDS_Dcps_Export void primitive_serialized_size_wchar(const Encoding &encoding, size_t &size, size_t count=1)
const size_t char8_cdr_size
Endianness endianness() const
size_t doread(char *dest, size_t size, bool swap, size_t offset)
Implementation of the actual read from the chain.
size_t dowrite(const char *dest, size_t size, bool swap, size_t offset)
Implementation of the actual write to the chain.
bool align_r(size_t alignment)
const size_t uint8_cdr_size
bool read_ulong_array(ACE_CDR::ULong *x, ACE_CDR::ULong length)
bool skip_sequence_dheader() const
size_t read_string(ACE_CDR::Char *&dest, StrAllocate str_alloc=0, StrFree str_free=0)
bool read_char_array(ACE_CDR::Char *x, ACE_CDR::ULong length)
bool write_boolean_array(const ACE_CDR::Boolean *x, ACE_CDR::ULong length)
bool write_double_array(const ACE_CDR::Double *x, ACE_CDR::ULong length)
OpenDDS_Dcps_Export void align(size_t &value, size_t by)
Align "value" by "by" if it's not already.
const size_t int32_cdr_size
void align_cont_w()
Update alignment state when a cont() chain is followed during a write.
bool good_bit_
Indicates the current state of the stream abstraction.
#define ACE_CDR_LONG_DOUBLE_ASSIGNMENT(LHS, RHS)
OpenDDS_Dcps_Export void serialized_size_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
size_t max_align() const
Return the maximum alignment dictated by the alignment policy.
void align_cont_r()
Update alignment state when a cont() chain is followed during a read.
XcdrVersion xcdr_version() const
bool read_float_array(ACE_CDR::Float *x, ACE_CDR::ULong length)
ConstructionStatus get_construction_status() const
void swap_bytes(bool do_swap)
bool zero_init_padding() const
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
bool write_ulong_array(const ACE_CDR::ULong *x, ACE_CDR::ULong length)
const size_t char16_cdr_size
bool align_w(size_t alignment)
const Encoding & encoding() const
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
void set_construction_status(ConstructionStatus cs)
ACE_CDR::Boolean operator>>(Serializer &serializer, CoherentChangeControl &value)
const size_t uint16_cdr_size
void free_string(ACE_CDR::Char *str, StrFree str_free=0)
bool write_ushort_array(const ACE_CDR::UShort *x, ACE_CDR::ULong length)
static unsigned char offset(char *index, size_t start, size_t align)
void buffer_read(char *dest, size_t size, bool swap)
Read from the chain into a destination buffer.
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
void write_array(const char *x, size_t size, ACE_CDR::ULong length)
bool read_double_array(ACE_CDR::Double *x, ACE_CDR::ULong length)
const size_t byte_cdr_size
bool write_delimiter(size_t size)
The Internal API and Implementation of OpenDDS.
OpenDDS_Dcps_Export void serialized_size_list_end_parameter_id(const Encoding &encoding, size_t &size, size_t &running_size)
static const size_t serialized_size
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
bool write_float_array(const ACE_CDR::Float *x, ACE_CDR::ULong length)
const size_t float128_cdr_size
XcdrVersion xcdr_version_
bool read_wchar_array(ACE_CDR::WChar *x, ACE_CDR::ULong length)
void align(size_t &value, size_t by=(std::numeric_limits< size_t >::max)()) const
Align "value" to "by" and according to the stream's alignment.
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)
const ACE_CDR::Char *& val_
ACE_UINT16 options() const
bool write_longdouble_array(const ACE_CDR::LongDouble *x, ACE_CDR::ULong length)
const Encoding & encoding_