OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | Public Attributes | List of all members
OpenDDS::DCPS::Serializer::ScopedAlignmentContext Struct Reference

#include <Serializer.h>

Collaboration diagram for OpenDDS::DCPS::Serializer::ScopedAlignmentContext:
Collaboration graph
[legend]

Public Member Functions

 ScopedAlignmentContext (Serializer &ser, size_t min_read=0)
 
virtual ~ScopedAlignmentContext ()
 
void restore (Serializer &ser) const
 

Public Attributes

Serializerser_
 
const size_t max_align_
 
const size_t start_rpos_
 
const size_t rblock_
 
const size_t min_read_
 
const size_t start_wpos_
 
const size_t wblock_
 

Detailed Description

Definition at line 752 of file Serializer.h.

Constructor & Destructor Documentation

◆ ScopedAlignmentContext()

OpenDDS::DCPS::Serializer::ScopedAlignmentContext::ScopedAlignmentContext ( Serializer ser,
size_t  min_read = 0 
)
explicit

Definition at line 397 of file Serializer.cpp.

References OpenDDS::DCPS::Serializer::reset_alignment(), and ser_.

398  : ser_(ser)
399  , max_align_(ser.encoding().max_align())
400  , start_rpos_(ser.rpos())
401  , rblock_(max_align_ ? (ptrdiff_t(ser.current_->rd_ptr()) - ser.align_rshift_) % max_align_ : 0)
402  , min_read_(min_read)
403  , start_wpos_(ser.wpos())
404  , wblock_(max_align_ ? (ptrdiff_t(ser.current_->wr_ptr()) - ser.align_wshift_) % max_align_ : 0)
405 {
407 }
void reset_alignment()
Reset alignment as if a new instance were created.
Definition: Serializer.cpp:443

◆ ~ScopedAlignmentContext()

virtual OpenDDS::DCPS::Serializer::ScopedAlignmentContext::~ScopedAlignmentContext ( )
inlinevirtual

Definition at line 754 of file Serializer.h.

Member Function Documentation

◆ restore()

void OpenDDS::DCPS::Serializer::ScopedAlignmentContext::restore ( Serializer ser) const

Definition at line 410 of file Serializer.cpp.

References OpenDDS::DCPS::Serializer::align_rshift_, OpenDDS::DCPS::Serializer::align_wshift_, OpenDDS::DCPS::Serializer::current_, max_align_, min_read_, OpenDDS::DCPS::Serializer::offset(), rblock_, ACE_Message_Block::rd_ptr(), OpenDDS::DCPS::Serializer::rpos(), OpenDDS::DCPS::Serializer::skip(), start_rpos_, start_wpos_, wblock_, OpenDDS::DCPS::Serializer::wpos(), and ACE_Message_Block::wr_ptr().

411 {
412  if (min_read_ != 0 && (ser.rpos() - start_rpos_) < min_read_) {
413  ser.skip(min_read_ - (ser.rpos() - start_rpos_));
414  }
415 
416  if (ser.current_ && max_align_) {
417  ser.align_rshift_ = offset(ser.current_->rd_ptr(), ser.rpos() - start_rpos_ + rblock_, max_align_);
418  ser.align_wshift_ = offset(ser.current_->wr_ptr(), ser.wpos() - start_wpos_ + wblock_, max_align_);
419  }
420 }
static unsigned char offset(char *index, size_t start, size_t align)
Definition: Serializer.inl:869

Member Data Documentation

◆ max_align_

const size_t OpenDDS::DCPS::Serializer::ScopedAlignmentContext::max_align_

Definition at line 759 of file Serializer.h.

Referenced by restore().

◆ min_read_

const size_t OpenDDS::DCPS::Serializer::ScopedAlignmentContext::min_read_

Definition at line 762 of file Serializer.h.

Referenced by restore().

◆ rblock_

const size_t OpenDDS::DCPS::Serializer::ScopedAlignmentContext::rblock_

Definition at line 761 of file Serializer.h.

Referenced by restore().

◆ ser_

Serializer& OpenDDS::DCPS::Serializer::ScopedAlignmentContext::ser_

Definition at line 758 of file Serializer.h.

Referenced by ScopedAlignmentContext().

◆ start_rpos_

const size_t OpenDDS::DCPS::Serializer::ScopedAlignmentContext::start_rpos_

Definition at line 760 of file Serializer.h.

Referenced by restore().

◆ start_wpos_

const size_t OpenDDS::DCPS::Serializer::ScopedAlignmentContext::start_wpos_

Definition at line 763 of file Serializer.h.

Referenced by restore().

◆ wblock_

const size_t OpenDDS::DCPS::Serializer::ScopedAlignmentContext::wblock_

Definition at line 764 of file Serializer.h.

Referenced by restore().


The documentation for this struct was generated from the following files: