OpenDDS  Snapshot(2023/04/28-20:55)
Classes | Public Member Functions | Protected Attributes | List of all members
OpenDDS::XTypes::DynamicSample Class Reference

#include <DynamicSample.h>

Inheritance diagram for OpenDDS::XTypes::DynamicSample:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::XTypes::DynamicSample:
Collaboration graph
[legend]

Classes

struct  KeyLessThan
 

Public Member Functions

 DynamicSample ()
 
 DynamicSample (const DynamicSample &)
 
DynamicSampleoperator= (const DynamicSample &)
 
 DynamicSample (DDS::DynamicData_ptr data, Mutability mutability, Extent extent)
 
 DynamicSample (DDS::DynamicData_ptr data, Extent extent)
 
 DynamicSample (DDS::DynamicData_ptr data)
 
void set_key_only (bool k)
 
bool serialize (DCPS::Serializer &ser) const
 
bool deserialize (DCPS::Serializer &ser)
 
size_t serialized_size (const DCPS::Encoding &enc) const
 
bool compare (const DCPS::Sample &other) const
 
bool to_message_block (ACE_Message_Block &) const
 
bool from_message_block (const ACE_Message_Block &)
 
DCPS::Sample_rch copy (DCPS::Sample::Mutability mutability, DCPS::Sample::Extent extent) const
 
DDS::DynamicData_var get_dynamic_data (DDS::DynamicType_ptr) const
 
DDS::DynamicData_var dynamic_data () const
 
const void * native_data () const
 
bool eval (DCPS::FilterEvaluator &evaluator, const DDS::StringSeq &params) const
 
- Public Member Functions inherited from OpenDDS::DCPS::Sample
 Sample ()
 
 Sample (Mutability mutability, Extent extent)
 
virtual ~Sample ()
 
bool read_only () const
 
bool key_only () const
 
Sample_rch copy (Mutability mutability) const
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Protected Attributes

DDS::DynamicData_var data_
 
- Protected Attributes inherited from OpenDDS::DCPS::Sample
Mutability mutability_
 
Extent extent_
 

Additional Inherited Members

- Public Types inherited from OpenDDS::DCPS::Sample
enum  Mutability { Mutable, ReadOnly }
 
enum  Extent { Full, KeyOnly, NestedKeyOnly }
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 

Detailed Description

Definition at line 17 of file DynamicSample.h.

Constructor & Destructor Documentation

◆ DynamicSample() [1/5]

OpenDDS::XTypes::DynamicSample::DynamicSample ( )

Definition at line 25 of file DynamicSample.cpp.

26 {}

◆ DynamicSample() [2/5]

OpenDDS::XTypes::DynamicSample::DynamicSample ( const DynamicSample d)

Definition at line 28 of file DynamicSample.cpp.

29  : Sample(d.mutability_, d.extent_)
30  , data_(d.data_)
31 {}
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ DynamicSample() [3/5]

OpenDDS::XTypes::DynamicSample::DynamicSample ( DDS::DynamicData_ptr  data,
Mutability  mutability,
Extent  extent 
)
inline

Definition at line 23 of file DynamicSample.h.

References _duplicate().

25  : Sample(mutability, extent)
26  , data_(DDS::DynamicData::_duplicate(data))
27  {
28  }
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ DynamicSample() [4/5]

OpenDDS::XTypes::DynamicSample::DynamicSample ( DDS::DynamicData_ptr  data,
Extent  extent 
)
inline

Definition at line 30 of file DynamicSample.h.

References _duplicate().

31  : Sample(Sample::ReadOnly, extent)
32  , data_(DDS::DynamicData::_duplicate(data))
33  {
34  }
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ DynamicSample() [5/5]

OpenDDS::XTypes::DynamicSample::DynamicSample ( DDS::DynamicData_ptr  data)
inline

Definition at line 36 of file DynamicSample.h.

References _duplicate().

38  , data_(DDS::DynamicData::_duplicate(data))
39  {
40  }
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

Member Function Documentation

◆ compare()

bool OpenDDS::XTypes::DynamicSample::compare ( const DCPS::Sample other) const
virtual

Implements OpenDDS::DCPS::Sample.

Definition at line 96 of file DynamicSample.cpp.

References ACE_ERROR, data_, OpenDDS::XTypes::key_less_than(), LM_WARNING, OpenDDS::DCPS::log_level, OPENDDS_ASSERT, OPENDDS_END_VERSIONED_NAMESPACE_DECL, DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), and OpenDDS::DCPS::LogLevel::Warning.

Referenced by OpenDDS::XTypes::DynamicSample::KeyLessThan::operator()().

97 {
98  const DynamicSample* const other_same_kind = dynamic_cast<const DynamicSample*>(&other);
99  OPENDDS_ASSERT(other_same_kind);
100  bool is_less_than = false;
101  DDS::ReturnCode_t rc = key_less_than(is_less_than, data_, other_same_kind->data_);
102  if (rc != DDS::RETCODE_OK) {
103  if (log_level >= LogLevel::Warning) {
104  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicSample::compare: "
105  "key_less_than returned %C\n", retcode_to_string(rc)));
106  }
107  }
108  return is_less_than;
109 }
DDS::ReturnCode_t key_less_than(bool &result, DDS::DynamicData_ptr a, DDS::DynamicData_ptr b)
#define ACE_ERROR(X)
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72
OpenDDS_Dcps_Export LogLevel log_level
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
const ReturnCode_t RETCODE_OK
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ copy()

DCPS::Sample_rch OpenDDS::XTypes::DynamicSample::copy ( DCPS::Sample::Mutability  mutability,
DCPS::Sample::Extent  extent 
) const
inlinevirtual

Implements OpenDDS::DCPS::Sample.

Definition at line 63 of file DynamicSample.h.

64  {
65  DDS::DynamicData_var dd = data_->clone();
66  return DCPS::make_rch<DynamicSample>(dd, mutability, extent);
67  }
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ deserialize()

bool OpenDDS::XTypes::DynamicSample::deserialize ( DCPS::Serializer ser)
virtual

Implements OpenDDS::DCPS::Sample.

Definition at line 73 of file DynamicSample.cpp.

References ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY, data_, OpenDDS::DCPS::Serializer::encoding(), OpenDDS::DCPS::Sample::extent_, ACE_Allocator::instance(), OpenDDS::DCPS::Serializer::length(), ACE_Allocator::malloc(), ACE_Time_Value::max_time, ACE_Message_Block::MB_DATA, OpenDDS::DCPS::Serializer::read_octet_array(), ACE_Message_Block::wr_ptr(), and ACE_Time_Value::zero.

Referenced by OpenDDS::DCPS::operator>>().

74 {
75  // DynamicDataXcdrReadImpl uses a message block to read the data on demand,
76  // but it can't be the same message block that 'ser' already has. That one
77  // (or more than one if there's chaining) uses the allocators and locking
78  // strategy from the transport.
79  const ACE_CDR::ULong len = static_cast<ACE_CDR::ULong>(ser.length());
80  ACE_Allocator* const alloc = ACE_Allocator::instance();
81  const Message_Block_Ptr mb(new(alloc->malloc(sizeof(ACE_Message_Block)))
82  ACE_Message_Block(len, ACE_Message_Block::MB_DATA, 0, 0, alloc, 0,
83  ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY, ACE_Time_Value::zero,
84  ACE_Time_Value::max_time, alloc, alloc));
85  unsigned char* const out = reinterpret_cast<unsigned char*>(mb->wr_ptr());
86  if (!ser.read_octet_array(out, len)) {
87  return false;
88  }
89  mb->wr_ptr(len);
90 
91  const DDS::DynamicType_var type = data_->type();
92  data_ = new DynamicDataXcdrReadImpl(mb.get(), ser.encoding(), type, extent_);
93  return true;
94 }
static const ACE_Time_Value max_time
static ACE_Allocator * instance(void)
char * wr_ptr(void) const
ACE_UINT32 ULong
static const ACE_Time_Value zero
DDS::DynamicData_var data_
Definition: DynamicSample.h:99
virtual void * malloc(size_type nbytes)=0

◆ dynamic_data()

DDS::DynamicData_var OpenDDS::XTypes::DynamicSample::dynamic_data ( ) const
inline

◆ eval()

bool OpenDDS::XTypes::DynamicSample::eval ( DCPS::FilterEvaluator evaluator,
const DDS::StringSeq params 
) const
inlinevirtual

Implements OpenDDS::DCPS::Sample.

Definition at line 85 of file DynamicSample.h.

References OpenDDS::DCPS::FilterEvaluator::eval().

86  {
87  return evaluator.eval(*this, params);
88  }

◆ from_message_block()

bool OpenDDS::XTypes::DynamicSample::from_message_block ( const ACE_Message_Block )
inlinevirtual

Implements OpenDDS::DCPS::Sample.

Definition at line 56 of file DynamicSample.h.

References OPENDDS_ASSERT.

57  {
58  // Not needed
59  OPENDDS_ASSERT(false);
60  return false;
61  }
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72

◆ get_dynamic_data()

DDS::DynamicData_var OpenDDS::XTypes::DynamicSample::get_dynamic_data ( DDS::DynamicType_ptr  ) const
inlinevirtual

◆ native_data()

const void* OpenDDS::XTypes::DynamicSample::native_data ( ) const
inlinevirtual

Implements OpenDDS::DCPS::Sample.

Definition at line 79 of file DynamicSample.h.

80  {
81  return 0;
82  }

◆ operator=()

DynamicSample & OpenDDS::XTypes::DynamicSample::operator= ( const DynamicSample rhs)

Definition at line 33 of file DynamicSample.cpp.

References data_, OpenDDS::DCPS::Sample::extent_, and OpenDDS::DCPS::Sample::mutability_.

34 {
35  if (this != &rhs) {
36  mutability_ = rhs.mutability_;
37  extent_ = rhs.extent_;
38  data_ = rhs.data_;
39  }
40  return *this;
41 }
Mutability mutability_
Definition: Sample.h:104
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ serialize()

bool OpenDDS::XTypes::DynamicSample::serialize ( DCPS::Serializer ser) const
virtual

Implements OpenDDS::DCPS::Sample.

Definition at line 58 of file DynamicSample.cpp.

References ACE_ERROR, data_, OpenDDS::DCPS::Sample::key_only(), LM_NOTICE, OpenDDS::DCPS::log_level, and OpenDDS::DCPS::LogLevel::Notice.

59 {
60  const DynamicDataImpl* const ddi = dynamic_cast<DynamicDataImpl*>(data_.in());
61  if (!ddi) {
62  if (log_level >= LogLevel::Notice) {
63  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicSample::serialize: "
64  "DynamicData must be DynamicDataImpl, the type supplied by DynamicDataFactory\n"));
65  }
66  return false;
67  }
68  return key_only()
69  ? ser << DCPS::KeyOnly<const DynamicDataImpl>(*ddi)
70  : ser << *ddi;
71 }
#define ACE_ERROR(X)
bool key_only() const
Definition: Sample.h:75
OpenDDS_Dcps_Export LogLevel log_level
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ serialized_size()

size_t OpenDDS::XTypes::DynamicSample::serialized_size ( const DCPS::Encoding enc) const
virtual

Implements OpenDDS::DCPS::Sample.

Definition at line 43 of file DynamicSample.cpp.

References ACE_ERROR, data_, OpenDDS::DCPS::Sample::key_only(), LM_WARNING, OpenDDS::DCPS::log_level, OpenDDS::DCPS::serialized_size(), and OpenDDS::DCPS::LogLevel::Warning.

44 {
45  const DynamicDataImpl* const ddi = dynamic_cast<DynamicDataImpl*>(data_.in());
46  if (!ddi) {
48  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicSample::serialized_size: "
49  "DynamicData must be DynamicDataImpl, the type supplied by DynamicDataFactory\n"));
50  }
51  return 0;
52  }
53  return key_only()
54  ? DCPS::serialized_size(enc, DCPS::KeyOnly<const DynamicDataImpl>(*ddi))
55  : DCPS::serialized_size(enc, *ddi);
56 }
#define ACE_ERROR(X)
bool key_only() const
Definition: Sample.h:75
void serialized_size(const Encoding &encoding, size_t &size, const SequenceNumber &)
size_t serialized_size(const DCPS::Encoding &enc) const
OpenDDS_Dcps_Export LogLevel log_level
DDS::DynamicData_var data_
Definition: DynamicSample.h:99

◆ set_key_only()

void OpenDDS::XTypes::DynamicSample::set_key_only ( bool  k)
inline

◆ to_message_block()

bool OpenDDS::XTypes::DynamicSample::to_message_block ( ACE_Message_Block ) const
inlinevirtual

Implements OpenDDS::DCPS::Sample.

Definition at line 49 of file DynamicSample.h.

References OPENDDS_ASSERT.

50  {
51  // Not needed
52  OPENDDS_ASSERT(false);
53  return false;
54  }
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72

Member Data Documentation

◆ data_

DDS::DynamicData_var OpenDDS::XTypes::DynamicSample::data_
protected

Definition at line 99 of file DynamicSample.h.

Referenced by compare(), deserialize(), operator=(), serialize(), and serialized_size().


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