OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
OpenDDS::DCPS::TypeSupportImpl Class Referenceabstract

#include <TypeSupportImpl.h>

Inheritance diagram for OpenDDS::DCPS::TypeSupportImpl:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::TypeSupportImpl:
Collaboration graph
[legend]

Public Member Functions

 TypeSupportImpl ()
 
 TypeSupportImpl (DDS::DynamicType_ptr type)
 
virtual ~TypeSupportImpl ()
 
virtual const MetaStructgetMetaStructForType () const =0
 
virtual DDS::ReturnCode_t register_type (DDS::DomainParticipant_ptr participant, const char *type_name)
 
virtual DDS::ReturnCode_t unregister_type (DDS::DomainParticipant_ptr participant, const char *type_name)
 
virtual const char * name () const =0
 
virtual char * get_type_name ()
 
virtual DDS::DynamicType_ptr get_type () const
 
DDS::DynamicType_ptr get_type ()
 
virtual size_t key_count () const =0
 
virtual bool is_dcps_key (const char *fieldname) const =0
 
bool has_dcps_key ()
 
virtual SerializedSizeBound serialized_size_bound (const Encoding &encoding) const =0
 
virtual SerializedSizeBound key_only_serialized_size_bound (const Encoding &encoding) const =0
 
virtual Extensibility base_extensibility () const =0
 Returns the extensibility of just the topic type. More...
 
virtual Extensibility max_extensibility () const =0
 
virtual const XTypes::TypeIdentifiergetMinimalTypeIdentifier () const =0
 
virtual const XTypes::TypeMap & getMinimalTypeMap () const =0
 
virtual const XTypes::TypeIdentifiergetCompleteTypeIdentifier () const =0
 
virtual const XTypes::TypeMap & getCompleteTypeMap () const =0
 
void to_type_info (XTypes::TypeInformation &type_info) const
 
virtual const XTypes::TypeInformationpreset_type_info () const
 
void add_types (const XTypes::TypeLookupService_rch &tls) const
 
- Public Member Functions inherited from OpenDDS::DCPS::TypeSupport
::DDS::DataWriter create_datawriter ()
 
::DDS::DataReader create_datareader ()
 
::DDS::DataReader create_multitopic_datareader ()
 
::DDS::ReturnCode_t unregister_type (in ::DDS::DomainParticipant domain, in string type_name)
 
void representations_allowed_by_type (inout ::DDS::DataRepresentationIdSeq seq)
 Get allowed representations defined by IDL annotations. More...
 
- Public Member Functions inherited from DDS::TypeSupport
ReturnCode_t register_type (in DomainParticipant domain, in string type_name)
 
 OpenDDS::hidden_op_in_java ("return 0;") DynamicType get_type()
 
- Public Member Functions inherited from OpenDDS::DCPS::LocalObjectBase
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
virtual CORBA::ULong _refcount_value () const
 
- Public Member Functions inherited from CORBA::LocalObject
virtual ~LocalObject (void)
 
virtual CORBA::Boolean _non_existent (void)
 
virtual char * _repository_id (void)
 
virtual CORBA::InterfaceDef_ptr _get_interface (void)
 
virtual CORBA::Object_ptr _get_component (void)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::ExceptionList_ptr exclist, CORBA::ContextList_ptr ctxtlist, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual CORBA::Request_ptr _request (const char *operation)
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
virtual CORBA::ULong _hash (CORBA::ULong maximum)
 
virtual CORBA::Boolean _is_equivalent (CORBA::Object_ptr other_obj)
 
virtual CORBA::ORB_ptr _get_orb (void)
 
virtual TAO::ObjectKey_key (void)
 
- Public Member Functions inherited from CORBA::Object
virtual ~Object (void)
 
virtual TAO_Abstract_ServantBase_servant (void) const
 
virtual CORBA::Boolean _is_collocated (void) const
 
virtual CORBA::Boolean _is_local (void) const
 
 Object (TAO_Stub *p, CORBA::Boolean collocated=false, TAO_Abstract_ServantBase *servant=0, TAO_ORB_Core *orb_core=0)
 
 Object (IOP::IOR *ior, TAO_ORB_Core *orb_core)
 
virtual TAO_Stub_stubobj (void) const
 
virtual TAO_Stub_stubobj (void)
 
virtual void _proxy_broker (TAO::Object_Proxy_Broker *proxy_broker)
 
virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr)
 
CORBA::Boolean is_evaluated (void) const
 
TAO_ORB_Coreorb_core (void) const
 
IOP::IORsteal_ior (void)
 
const IOP::IORior (void) const
 
virtual bool can_convert_to_ior (void) const
 
virtual char * convert_to_ior (bool use_omg_ior_format, const char *ior_prefix) const
 
void _decr_refcount (void)
 
virtual CORBA::Boolean _is_a (const char *logical_type_id)
 
virtual const char * _interface_repository_id (void) const
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Protected Member Functions

void get_type_from_type_lookup_service ()
 
- Protected Member Functions inherited from CORBA::LocalObject
 LocalObject (void)
 
- Protected Member Functions inherited from CORBA::Object
 Object (int dummy=0)
 
TAO::Object_Proxy_Brokerproxy_broker () const
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 

Protected Attributes

DDS::DynamicType_var type_
 
- Protected Attributes inherited from CORBA::Object
ACE_Atomic_Op< TAO_SYNCH_MUTEX, unsigned long > refcount_
 

Private Member Functions

void to_type_info_i (XTypes::TypeIdentifierWithDependencies &ti_with_deps, const XTypes::TypeIdentifier &ti, const XTypes::TypeMap &type_map) const
 
void populate_dependencies_i (const XTypes::TypeLookupService_rch &tls, XTypes::EquivalenceKind ek) const
 

Private Attributes

XTypes::TypeLookupService_rch type_lookup_service_
 

Static Private Attributes

static const ACE_CDR::Long TYPE_INFO_DEPENDENT_COUNT_NOT_PROVIDED = -1
 

Additional Inherited Members

- Public Types inherited from OpenDDS::DCPS::LocalObject< TypeSupport >
typedef TypeSupport ::_ptr_type _ptr_type
 
typedef TypeSupport ::_var_type _var_type
 
- Public Types inherited from CORBA::LocalObject
typedef LocalObject_ptr _ptr_type
 
typedef LocalObject_var _var_type
 
typedef LocalObject_out _out_type
 
- Public Types inherited from CORBA::Object
typedef Object_ptr _ptr_type
 
typedef Object_var _var_type
 
typedef Object_out _out_type
 
- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< TypeSupport >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::LocalObject
static LocalObject_ptr _duplicate (LocalObject_ptr obj)
 
static LocalObject_ptr _nil (void)
 
static LocalObject_ptr _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::Object
static CORBA::Boolean marshal (const Object_ptr x, TAO_OutputCDR &cdr)
 
static void _tao_any_destructor (void *)
 
static CORBA::Boolean is_nil_i (CORBA::Object_ptr obj)
 
static void tao_object_initialize (Object *)
 
static CORBA::Object_ptr _duplicate (CORBA::Object_ptr obj)
 
static CORBA::Object_ptr _nil (void)
 
static CORBA::Object_ptr _narrow (CORBA::Object_ptr obj)
 

Detailed Description

Definition at line 70 of file TypeSupportImpl.h.

Constructor & Destructor Documentation

◆ TypeSupportImpl() [1/2]

OpenDDS::DCPS::TypeSupportImpl::TypeSupportImpl ( )
inline

Definition at line 73 of file TypeSupportImpl.h.

73 {}

◆ TypeSupportImpl() [2/2]

OpenDDS::DCPS::TypeSupportImpl::TypeSupportImpl ( DDS::DynamicType_ptr  type)
inlineexplicit

Definition at line 76 of file TypeSupportImpl.h.

References _duplicate(), and name.

77  : type_(DDS::DynamicType::_duplicate(type))
78  {
79  }

◆ ~TypeSupportImpl()

OpenDDS::DCPS::TypeSupportImpl::~TypeSupportImpl ( )
virtual

Definition at line 21 of file TypeSupportImpl.cpp.

22 {}

Member Function Documentation

◆ add_types()

void OpenDDS::DCPS::TypeSupportImpl::add_types ( const XTypes::TypeLookupService_rch tls) const

Definition at line 116 of file TypeSupportImpl.cpp.

References OpenDDS::XTypes::EK_COMPLETE, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::STUN::encoding(), OpenDDS::DCPS::Service_Participant::Encoding_Normal, OpenDDS::XTypes::get_typeobject_encoding(), getCompleteTypeMap(), getMinimalTypeMap(), OpenDDS::XTypes::makeTypeIdentifier(), populate_dependencies_i(), preset_type_info(), OpenDDS::DCPS::Encoding::skip_sequence_dheader(), and TheServiceParticipant.

Referenced by OpenDDS::DCPS::DataWriterImpl::enable(), OpenDDS::DCPS::DataReaderImpl::enable(), and get_type_from_type_lookup_service().

117 {
118  using namespace XTypes;
119  if (preset_type_info()) {
120  // In the case where TypeInformation was pre-set, the participant's TypeLookupService
121  // already has the types and dependencies based on responses to RPC requests.
122  return;
123  }
124  const TypeMap& minTypeMap = getMinimalTypeMap();
125  tls->add(minTypeMap.begin(), minTypeMap.end());
126  const TypeMap& comTypeMap = getCompleteTypeMap();
127  tls->add(comTypeMap.begin(), comTypeMap.end());
128 
129  if (TheServiceParticipant->type_object_encoding() != Service_Participant::Encoding_Normal) {
130  // In this mode we need to be able to recognize TypeIdentifiers received over the network
131  // by peers that may have encoded them incorrectly. Populate the TypeLookupService with
132  // additional entries that map the alternate (wrong) TypeIdentifiers to the same TypeObjects.
133  Encoding encoding = get_typeobject_encoding();
134  encoding.skip_sequence_dheader(true);
135  TypeMap altMinMap;
136  for (TypeMap::const_iterator iter = minTypeMap.begin(); iter != minTypeMap.end(); ++iter) {
137  const TypeObject& minTypeObject = iter->second;
138  const TypeIdentifier typeId = makeTypeIdentifier(minTypeObject, &encoding);
139  altMinMap[typeId] = minTypeObject;
140  }
141  tls->add(altMinMap.begin(), altMinMap.end());
142 
143  TypeMap altComMap;
144  for (TypeMap::const_iterator iter = comTypeMap.begin(); iter != comTypeMap.end(); ++iter) {
145  const TypeObject& comTypeObject = iter->second;
146  const TypeIdentifier typeId = makeTypeIdentifier(comTypeObject, &encoding);
147  altComMap[typeId] = comTypeObject;
148  }
149  tls->add(altComMap.begin(), altComMap.end());
150  }
153 }
const Encoding & get_typeobject_encoding()
Definition: TypeObject.cpp:27
virtual const XTypes::TypeMap & getCompleteTypeMap() const =0
virtual const XTypes::TypeInformation * preset_type_info() const
const EquivalenceKind EK_MINIMAL
Definition: TypeObject.h:205
void populate_dependencies_i(const XTypes::TypeLookupService_rch &tls, XTypes::EquivalenceKind ek) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
TypeIdentifier makeTypeIdentifier(const TypeObject &type_object, const DCPS::Encoding *encoding_option)
Definition: TypeObject.cpp:254
virtual const XTypes::TypeMap & getMinimalTypeMap() const =0
#define TheServiceParticipant
const EquivalenceKind EK_COMPLETE
Definition: TypeObject.h:206

◆ base_extensibility()

virtual Extensibility OpenDDS::DCPS::TypeSupportImpl::base_extensibility ( ) const
pure virtual

Returns the extensibility of just the topic type.

Implemented in OpenDDS::DCPS::TypeSupportImpl_T< NativeType >, and DDS::DynamicTypeSupport.

Referenced by OpenDDS::DCPS::DataWriterImpl::serialize_sample().

◆ get_type() [1/2]

virtual DDS::DynamicType_ptr OpenDDS::DCPS::TypeSupportImpl::get_type ( void  ) const
inlinevirtual

◆ get_type() [2/2]

DDS::DynamicType_ptr OpenDDS::DCPS::TypeSupportImpl::get_type ( void  )
inline

Definition at line 107 of file TypeSupportImpl.h.

References OpenDDS::XTypes::key_count().

108  {
109  return DDS::DynamicType::_duplicate(type_);
110  }

◆ get_type_from_type_lookup_service()

void OpenDDS::DCPS::TypeSupportImpl::get_type_from_type_lookup_service ( )
protected

Definition at line 187 of file TypeSupportImpl.cpp.

References add_types(), getCompleteTypeIdentifier(), getCompleteTypeMap(), getMinimalTypeIdentifier(), getMinimalTypeMap(), OpenDDS::DCPS::GUID_UNKNOWN, OPENDDS_END_VERSIONED_NAMESPACE_DECL, OpenDDS::XTypes::DynamicTypeImpl::set_complete_type_identifier(), OpenDDS::XTypes::DynamicTypeImpl::set_complete_type_map(), OpenDDS::XTypes::DynamicTypeImpl::set_minimal_type_identifier(), OpenDDS::XTypes::DynamicTypeImpl::set_minimal_type_map(), type_, and type_lookup_service_.

188 {
189  if (!type_) {
190  if (!type_lookup_service_) {
191  type_lookup_service_ = make_rch<XTypes::TypeLookupService>();
193  }
194 
195  const XTypes::TypeIdentifier& cti = getCompleteTypeIdentifier();
196  const XTypes::TypeMap& ctm = getCompleteTypeMap();
197  const XTypes::TypeIdentifier& mti = getMinimalTypeIdentifier();
198  const XTypes::TypeMap& mtm = getMinimalTypeMap();
199  XTypes::DynamicTypeImpl* dt = dynamic_cast<XTypes::DynamicTypeImpl*>(
200  type_lookup_service_->type_identifier_to_dynamic(cti, GUID_UNKNOWN));
201  if (dt) {
202  dt->set_complete_type_identifier(cti);
203  dt->set_complete_type_map(ctm);
204  dt->set_minimal_type_identifier(mti);
205  dt->set_minimal_type_map(mtm);
206  }
207  type_ = dt;
208  }
209 }
virtual const XTypes::TypeMap & getCompleteTypeMap() const =0
XTypes::TypeLookupService_rch type_lookup_service_
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
void add_types(const XTypes::TypeLookupService_rch &tls) const
virtual const XTypes::TypeIdentifier & getMinimalTypeIdentifier() const =0
virtual const XTypes::TypeMap & getMinimalTypeMap() const =0
virtual const XTypes::TypeIdentifier & getCompleteTypeIdentifier() const =0

◆ get_type_name()

char * OpenDDS::DCPS::TypeSupportImpl::get_type_name ( )
virtual

NOTE: This one implements the IDL TypeSupport method so it returns a CORBA String that the caller must take ownership of.

Implements DDS::TypeSupport.

Definition at line 45 of file TypeSupportImpl.cpp.

References TAO::String_var< charT >::_retn(), ACE_ERROR, OpenDDS::XTypes::EK_COMPLETE, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::XTypes::equivalence_hash_to_string(), OpenDDS::DCPS::LogLevel::Error, OpenDDS::XTypes::TypeIdentifier::kind(), LM_ERROR, OpenDDS::DCPS::log_level, and name().

46 {
47  CORBA::String_var type = name();
48  return type._retn();
49 }
virtual const char * name() const =0
character_type * _retn(void)

◆ getCompleteTypeIdentifier()

virtual const XTypes::TypeIdentifier& OpenDDS::DCPS::TypeSupportImpl::getCompleteTypeIdentifier ( ) const
pure virtual

◆ getCompleteTypeMap()

virtual const XTypes::TypeMap& OpenDDS::DCPS::TypeSupportImpl::getCompleteTypeMap ( ) const
pure virtual

◆ getMetaStructForType()

virtual const MetaStruct& OpenDDS::DCPS::TypeSupportImpl::getMetaStructForType ( ) const
pure virtual

◆ getMinimalTypeIdentifier()

virtual const XTypes::TypeIdentifier& OpenDDS::DCPS::TypeSupportImpl::getMinimalTypeIdentifier ( ) const
pure virtual

◆ getMinimalTypeMap()

virtual const XTypes::TypeMap& OpenDDS::DCPS::TypeSupportImpl::getMinimalTypeMap ( ) const
pure virtual

◆ has_dcps_key()

bool OpenDDS::DCPS::TypeSupportImpl::has_dcps_key ( )
inline

◆ is_dcps_key()

virtual bool OpenDDS::DCPS::TypeSupportImpl::is_dcps_key ( const char *  fieldname) const
pure virtual

◆ key_count()

virtual size_t OpenDDS::DCPS::TypeSupportImpl::key_count ( ) const
pure virtual

◆ key_only_serialized_size_bound()

virtual SerializedSizeBound OpenDDS::DCPS::TypeSupportImpl::key_only_serialized_size_bound ( const Encoding encoding) const
pure virtual

◆ max_extensibility()

virtual Extensibility OpenDDS::DCPS::TypeSupportImpl::max_extensibility ( ) const
pure virtual

Between the topic type and its nested types, return the extensibility that is furthest right in (final, appenable, mutable).

Implemented in OpenDDS::DCPS::TypeSupportImpl_T< NativeType >, and DDS::DynamicTypeSupport.

Referenced by OpenDDS::DCPS::DataWriterImpl::setup_serialization().

◆ name()

virtual const char* OpenDDS::DCPS::TypeSupportImpl::name ( ) const
pure virtual

◆ populate_dependencies_i()

void OpenDDS::DCPS::TypeSupportImpl::populate_dependencies_i ( const XTypes::TypeLookupService_rch tls,
XTypes::EquivalenceKind  ek 
) const
private

Definition at line 155 of file TypeSupportImpl.cpp.

References OpenDDS::XTypes::Sequence< T >::append(), OpenDDS::XTypes::compute_dependencies(), OpenDDS::XTypes::EK_COMPLETE, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::XTypes::get_typeobject_encoding(), getCompleteTypeIdentifier(), getCompleteTypeMap(), getMinimalTypeIdentifier(), getMinimalTypeMap(), OpenDDS::XTypes::has_type_object(), name(), OpenDDS::DCPS::OPENDDS_SET(), and OpenDDS::DCPS::serialized_size().

Referenced by add_types().

157 {
158  if (ek != XTypes::EK_MINIMAL && ek != XTypes::EK_COMPLETE) {
159  return;
160  }
161 
162  OPENDDS_SET(XTypes::TypeIdentifier) dependencies;
163  const XTypes::TypeIdentifier& type_id = ek == XTypes::EK_MINIMAL ?
165  const XTypes::TypeMap& type_map = ek == XTypes::EK_MINIMAL ?
167 
168  XTypes::compute_dependencies(type_map, type_id, dependencies);
169 
170  XTypes::TypeIdentifierWithSizeSeq deps_with_size;
171  OPENDDS_SET(XTypes::TypeIdentifier)::const_iterator it = dependencies.begin();
172  for (; it != dependencies.end(); ++it) {
173  XTypes::TypeMap::const_iterator iter = type_map.find(*it);
174  if (iter != type_map.end()) {
175  const size_t tobj_size = serialized_size(XTypes::get_typeobject_encoding(), iter->second);
176  XTypes::TypeIdentifierWithSize ti_with_size(*it, static_cast<ACE_CDR::ULong>(tobj_size));
177  deps_with_size.append(ti_with_size);
178  } else if (XTypes::has_type_object(*it)) {
179  log_ti_not_found("populate_dependencies_i", name(), *it);
180  }
181  }
182  tls->add_type_dependencies(type_id, deps_with_size);
183 }
typedef OPENDDS_SET(NetworkAddress) AddrSet
const Encoding & get_typeobject_encoding()
Definition: TypeObject.cpp:27
virtual const char * name() const =0
virtual const XTypes::TypeMap & getCompleteTypeMap() const =0
const EquivalenceKind EK_MINIMAL
Definition: TypeObject.h:205
bool has_type_object(const TypeIdentifier &ti)
Definition: TypeObject.cpp:461
void serialized_size(const Encoding &encoding, size_t &size, const SequenceNumber &)
void compute_dependencies(const TypeMap &type_map, const TypeIdentifier &type_identifier, OPENDDS_SET(TypeIdentifier)&dependencies)
virtual const XTypes::TypeIdentifier & getMinimalTypeIdentifier() const =0
Sequence< TypeIdentifierWithSize > TypeIdentifierWithSizeSeq
Definition: TypeObject.h:3354
virtual const XTypes::TypeMap & getMinimalTypeMap() const =0
virtual const XTypes::TypeIdentifier & getCompleteTypeIdentifier() const =0
const EquivalenceKind EK_COMPLETE
Definition: TypeObject.h:206

◆ preset_type_info()

virtual const XTypes::TypeInformation* OpenDDS::DCPS::TypeSupportImpl::preset_type_info ( ) const
inlinevirtual

Reimplemented in DDS::DynamicTypeSupport.

Definition at line 136 of file TypeSupportImpl.h.

Referenced by add_types(), and to_type_info().

137  {
138  return 0;
139  }

◆ register_type()

DDS::ReturnCode_t OpenDDS::DCPS::TypeSupportImpl::register_type ( DDS::DomainParticipant_ptr  participant,
const char *  type_name 
)
virtual

Definition at line 25 of file TypeSupportImpl.cpp.

References name(), and Registered_Data_Types.

27 {
28  const char* const type =
29  (!type_name || !type_name[0]) ? name() : type_name;
30  return Registered_Data_Types->register_type(participant, type, this);
31 }
virtual const char * name() const =0
#define Registered_Data_Types

◆ serialized_size_bound()

virtual SerializedSizeBound OpenDDS::DCPS::TypeSupportImpl::serialized_size_bound ( const Encoding encoding) const
pure virtual

◆ to_type_info()

void OpenDDS::DCPS::TypeSupportImpl::to_type_info ( XTypes::TypeInformation type_info) const

Definition at line 97 of file TypeSupportImpl.cpp.

References OpenDDS::XTypes::TypeInformation::complete, getCompleteTypeIdentifier(), getCompleteTypeMap(), getMinimalTypeIdentifier(), getMinimalTypeMap(), OpenDDS::XTypes::TypeIdentifier::kind(), OpenDDS::XTypes::TypeInformation::minimal, preset_type_info(), OpenDDS::XTypes::TK_NONE, and to_type_info_i().

Referenced by OpenDDS::DCPS::DataWriterImpl::enable(), and OpenDDS::DCPS::DataReaderImpl::enable().

98 {
99  const XTypes::TypeInformation* const preset = preset_type_info();
100  if (preset) {
101  type_info = *preset;
102  return;
103  }
104 
106 
107  // Properly populate the complete member if complete TypeObjects are generated.
108  const XTypes::TypeIdentifier& complete_ti = getCompleteTypeIdentifier();
109  if (complete_ti.kind() != XTypes::TK_NONE) {
110  to_type_info_i(type_info.complete, complete_ti, getCompleteTypeMap());
111  } else {
112  type_info.complete = XTypes::TypeIdentifierWithDependencies();
113  }
114 }
void to_type_info_i(XTypes::TypeIdentifierWithDependencies &ti_with_deps, const XTypes::TypeIdentifier &ti, const XTypes::TypeMap &type_map) const
virtual const XTypes::TypeMap & getCompleteTypeMap() const =0
virtual const XTypes::TypeInformation * preset_type_info() const
const TypeKind TK_NONE
Definition: TypeObject.h:213
virtual const XTypes::TypeIdentifier & getMinimalTypeIdentifier() const =0
virtual const XTypes::TypeMap & getMinimalTypeMap() const =0
virtual const XTypes::TypeIdentifier & getCompleteTypeIdentifier() const =0

◆ to_type_info_i()

void OpenDDS::DCPS::TypeSupportImpl::to_type_info_i ( XTypes::TypeIdentifierWithDependencies ti_with_deps,
const XTypes::TypeIdentifier ti,
const XTypes::TypeMap &  type_map 
) const
private

Definition at line 70 of file TypeSupportImpl.cpp.

References OpenDDS::XTypes::TypeIdentifierWithDependencies::dependent_typeid_count, OpenDDS::STUN::encoding(), OpenDDS::DCPS::Service_Participant::Encoding_WriteOldFormat, OpenDDS::XTypes::get_typeobject_encoding(), OpenDDS::XTypes::makeTypeIdentifier(), name(), OpenDDS::DCPS::serialized_size(), OpenDDS::DCPS::Encoding::skip_sequence_dheader(), TheServiceParticipant, OpenDDS::XTypes::TypeIdentifierWithSize::type_id, TYPE_INFO_DEPENDENT_COUNT_NOT_PROVIDED, OpenDDS::XTypes::TypeIdentifierWithDependencies::typeid_with_size, and OpenDDS::XTypes::TypeIdentifierWithSize::typeobject_serialized_size.

Referenced by to_type_info().

73 {
74  const XTypes::TypeMap::const_iterator pos = type_map.find(ti);
75 
76  if (pos == type_map.end()) {
77  log_ti_not_found("to_type_info_i", name(), ti);
78  ti_with_deps.typeid_with_size.type_id = XTypes::TypeIdentifier();
79  ti_with_deps.typeid_with_size.typeobject_serialized_size = 0;
80  } else if (TheServiceParticipant->type_object_encoding() == Service_Participant::Encoding_WriteOldFormat) {
82  encoding.skip_sequence_dheader(true);
83  const XTypes::TypeObject& to = pos->second;
84  ti_with_deps.typeid_with_size.type_id = makeTypeIdentifier(to, &encoding);
85  const size_t sz = serialized_size(encoding, to);
86  ti_with_deps.typeid_with_size.typeobject_serialized_size = static_cast<unsigned>(sz);
87  } else {
88  ti_with_deps.typeid_with_size.type_id = ti;
89  const XTypes::TypeObject& to = pos->second;
90  const size_t sz = serialized_size(XTypes::get_typeobject_encoding(), to);
91  ti_with_deps.typeid_with_size.typeobject_serialized_size = static_cast<unsigned>(sz);
92  }
93 
94  ti_with_deps.dependent_typeid_count = TYPE_INFO_DEPENDENT_COUNT_NOT_PROVIDED;
95 }
const Encoding & get_typeobject_encoding()
Definition: TypeObject.cpp:27
virtual const char * name() const =0
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
TypeIdentifier makeTypeIdentifier(const TypeObject &type_object, const DCPS::Encoding *encoding_option)
Definition: TypeObject.cpp:254
void serialized_size(const Encoding &encoding, size_t &size, const SequenceNumber &)
static const ACE_CDR::Long TYPE_INFO_DEPENDENT_COUNT_NOT_PROVIDED
#define TheServiceParticipant

◆ unregister_type()

DDS::ReturnCode_t OpenDDS::DCPS::TypeSupportImpl::unregister_type ( DDS::DomainParticipant_ptr  participant,
const char *  type_name 
)
virtual

Definition at line 34 of file TypeSupportImpl.cpp.

References Registered_Data_Types, and DDS::RETCODE_BAD_PARAMETER.

36 {
37  if (type_name == 0 || type_name[0] == '\0') {
39  } else {
40  return Registered_Data_Types->unregister_type(participant, type_name, this);
41  }
42 }
const ReturnCode_t RETCODE_BAD_PARAMETER
#define Registered_Data_Types

Member Data Documentation

◆ type_

DDS::DynamicType_var OpenDDS::DCPS::TypeSupportImpl::type_
protected

Definition at line 147 of file TypeSupportImpl.h.

Referenced by get_type_from_type_lookup_service().

◆ TYPE_INFO_DEPENDENT_COUNT_NOT_PROVIDED

const ACE_CDR::Long OpenDDS::DCPS::TypeSupportImpl::TYPE_INFO_DEPENDENT_COUNT_NOT_PROVIDED = -1
staticprivate

Definition at line 151 of file TypeSupportImpl.h.

Referenced by to_type_info_i().

◆ type_lookup_service_

XTypes::TypeLookupService_rch OpenDDS::DCPS::TypeSupportImpl::type_lookup_service_
private

Definition at line 161 of file TypeSupportImpl.h.

Referenced by get_type_from_type_lookup_service().


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