OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Private Member Functions | Private Attributes | List of all members
OpenDDS::XTypes::TypeLookupService Class Reference

#include <TypeLookupService.h>

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

Public Member Functions

 TypeLookupService ()
 
 ~TypeLookupService ()
 
const TypeObjectget_type_object (const TypeIdentifier &type_id) const
 For TypeAssignability. More...
 
void add (const TypeIdentifier &ti, const TypeObject &tobj)
 
void get_type_objects (const TypeIdentifierSeq &type_ids, TypeIdentifierTypeObjectPairSeq &types) const
 For TypeLookup_getTypes. More...
 
void add_type_objects_to_cache (const TypeIdentifierTypeObjectPairSeq &types)
 
typedef OPENDDS_MAP (TypeIdentifier, DDS::DynamicType_var) DynamicTypeMap
 
typedef OPENDDS_MAP (DCPS::GUID_t, DynamicTypeMap) GuidTypeMap
 
DDS::DynamicType_ptr complete_to_dynamic (const CompleteTypeObject &cto, const DCPS::GUID_t &guid)
 
void remove_guid_from_dynamic_map (const DCPS::GUID_t &guid)
 
bool has_complete (const TypeIdentifier &ti) const
 
DDS::DynamicType_ptr type_identifier_to_dynamic (const TypeIdentifier &ti, const DCPS::GUID_t &guid)
 
bool get_type_dependencies (const TypeIdentifier &type_id, TypeIdentifierWithSizeSeq &dependencies) const
 For TypeLookup_getTypeDependencies. More...
 
void get_type_dependencies (const TypeIdentifierSeq &type_ids, TypeIdentifierWithSizeSeq &dependencies) const
 
void add_type_dependencies (const TypeIdentifier &type_id, const TypeIdentifierWithSizeSeq &dependencies)
 
void add (TypeMap::const_iterator begin, TypeMap::const_iterator end)
 For adding local endpoint types. More...
 
bool type_object_in_cache (const TypeIdentifier &ti) const
 
bool extensibility (TypeFlag extensibility_mask, const TypeIdentifier &ti) const
 
void cache_type_info (const DDS::BuiltinTopicKey_t &key, const TypeInformation &type_info)
 For caching and retrieving TypeInformation of remote endpoints. More...
 
const TypeInformationget_type_info (const DDS::BuiltinTopicKey_t &key) const
 
void update_type_identifier_map (const TypeIdentifierPairSeq &tid_pairs)
 
bool complete_to_minimal_type_object (const TypeObject &cto, TypeObject &mto) 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
 

Private Member Functions

const TypeObjectget_type_object_i (const TypeIdentifier &type_id) const
 
void get_type_dependencies_i (const TypeIdentifierSeq &type_ids, TypeIdentifierWithSizeSeq &dependencies) const
 
typedef OPENDDS_MAP (TypeIdentifier, TypeIdentifierWithSizeSeq) TypeIdentifierWithSizeSeqMap
 For dependencies of local types. More...
 
typedef OPENDDS_MAP (TypeIdentifier, TypeIdentifier) TypeIdentifierMap
 Mapping from complete to minimal TypeIdentifiers of dependencies of remote types. More...
 
bool get_minimal_type_identifier (const TypeIdentifier &ct, TypeIdentifier &mt) const
 
bool set_type_object_defaults (TypeObject &to)
 
bool complete_to_minimal_struct (const CompleteStructType &ct, MinimalStructType &mt) const
 
bool complete_to_minimal_union (const CompleteUnionType &ct, MinimalUnionType &mt) const
 
bool complete_to_minimal_annotation (const CompleteAnnotationType &ct, MinimalAnnotationType &mt) const
 
bool complete_to_minimal_alias (const CompleteAliasType &ct, MinimalAliasType &mt) const
 
bool complete_to_minimal_sequence (const CompleteSequenceType &ct, MinimalSequenceType &mt) const
 
bool complete_to_minimal_array (const CompleteArrayType &ct, MinimalArrayType &mt) const
 
bool complete_to_minimal_map (const CompleteMapType &ct, MinimalMapType &mt) const
 
bool complete_to_minimal_enumerated (const CompleteEnumeratedType &ct, MinimalEnumeratedType &mt) const
 
bool complete_to_minimal_bitmask (const CompleteBitmaskType &ct, MinimalBitmaskType &mt) const
 
bool complete_to_minimal_bitset (const CompleteBitsetType &ct, MinimalBitsetType &mt) const
 
DDS::MemberDescriptorcomplete_struct_member_to_member_descriptor (const CompleteStructMember &cm, const DCPS::GUID_t &guid)
 
DDS::MemberDescriptorcomplete_union_member_to_member_descriptor (const CompleteUnionMember &cm, const DCPS::GUID_t &guid)
 
DDS::MemberDescriptorcomplete_annotation_member_to_member_descriptor (const CompleteAnnotationParameter &cm, const DCPS::GUID_t &guid)
 
void complete_to_dynamic_i (DynamicTypeImpl *dt, const CompleteTypeObject &cto, const DCPS::GUID_t &guid)
 
typedef OPENDDS_MAP_CMP (DDS::BuiltinTopicKey_t, TypeInformation, DCPS::BuiltinTopicKey_tKeyLessThan) TypeInformationMap
 Map from BuiltinTopicKey_t of remote endpoint to its TypeInformation. More...
 

Private Attributes

TypeMap type_map_
 Contains both minimal and complete type mapping. More...
 
TypeIdentifierWithSizeSeqMap type_dependencies_map_
 
ACE_Thread_Mutex mutex_
 
TypeObject to_empty_
 
TypeIdentifierMap complete_to_minimal_ti_map_
 
GuidTypeMap gt_map_
 
TypeInformationMap type_info_map_
 
TypeInformation type_info_empty_
 

Additional Inherited Members

- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 

Detailed Description

Definition at line 29 of file TypeLookupService.h.

Constructor & Destructor Documentation

◆ TypeLookupService()

OpenDDS::XTypes::TypeLookupService::TypeLookupService ( )

Definition at line 37 of file TypeLookupService.cpp.

References OpenDDS::XTypes::TK_NONE.

◆ ~TypeLookupService()

OpenDDS::XTypes::TypeLookupService::~TypeLookupService ( )

Definition at line 46 of file TypeLookupService.cpp.

47 {
48 #ifndef OPENDDS_SAFETY_PROFILE
49  for (GuidTypeMap::const_iterator pos = gt_map_.begin(), limit = gt_map_.end(); pos != limit; ++pos) {
50  for (DynamicTypeMap::const_iterator pos2 = pos->second.begin(), limit2 = pos->second.end(); pos2 != limit2; ++pos2) {
51  pos2->second->clear();
52  }
53  }
54 #endif
55 }

Member Function Documentation

◆ add() [1/2]

void OpenDDS::XTypes::TypeLookupService::add ( const TypeIdentifier ti,
const TypeObject tobj 
)

Definition at line 149 of file TypeLookupService.cpp.

References ACE_GUARD.

150 {
152  TypeMap::const_iterator pos = type_map_.find(ti);
153  if (pos == type_map_.end()) {
154  type_map_.insert(std::make_pair(ti, tobj));
155  }
156 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
TypeMap type_map_
Contains both minimal and complete type mapping.

◆ add() [2/2]

void OpenDDS::XTypes::TypeLookupService::add ( TypeMap::const_iterator  begin,
TypeMap::const_iterator  end 
)

For adding local endpoint types.

Definition at line 143 of file TypeLookupService.cpp.

References ACE_GUARD.

144 {
146  type_map_.insert(begin, end);
147 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
TypeMap type_map_
Contains both minimal and complete type mapping.

◆ add_type_dependencies()

void OpenDDS::XTypes::TypeLookupService::add_type_dependencies ( const TypeIdentifier type_id,
const TypeIdentifierWithSizeSeq dependencies 
)

Definition at line 1102 of file TypeLookupService.cpp.

References ACE_GUARD.

1104 {
1106  if (type_dependencies_map_.find(type_id) == type_dependencies_map_.end()) {
1107  type_dependencies_map_.insert(std::make_pair(type_id, dependencies));
1108  }
1109 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
TypeIdentifierWithSizeSeqMap type_dependencies_map_

◆ add_type_objects_to_cache()

void OpenDDS::XTypes::TypeLookupService::add_type_objects_to_cache ( const TypeIdentifierTypeObjectPairSeq types)

Definition at line 129 of file TypeLookupService.cpp.

References ACE_GUARD, and OpenDDS::XTypes::Sequence< T >::length().

130 {
132  for (unsigned i = 0; i < types.length(); ++i) {
133  const TypeMap::iterator pos = type_map_.find(types[i].type_identifier);
134  if (pos == type_map_.end()) {
135  TypeObject to = types[i].type_object;
136  if (set_type_object_defaults(to)) {
137  type_map_.insert(std::make_pair(types[i].type_identifier, to));
138  }
139  }
140  }
141 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
TypeMap type_map_
Contains both minimal and complete type mapping.
bool set_type_object_defaults(TypeObject &to)

◆ cache_type_info()

void OpenDDS::XTypes::TypeLookupService::cache_type_info ( const DDS::BuiltinTopicKey_t key,
const TypeInformation type_info 
)

For caching and retrieving TypeInformation of remote endpoints.

Definition at line 166 of file TypeLookupService.cpp.

References ACE_GUARD.

168 {
170  if (type_info_map_.find(key) == type_info_map_.end()) {
171  type_info_map_.insert(std::make_pair(key, type_info));
172  }
173 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)

◆ complete_annotation_member_to_member_descriptor()

DDS::MemberDescriptor * OpenDDS::XTypes::TypeLookupService::complete_annotation_member_to_member_descriptor ( const CompleteAnnotationParameter cm,
const DCPS::GUID_t guid 
)
private

Definition at line 650 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteAnnotationParameter::common, DDS::DISCARD, OpenDDS::XTypes::CommonAnnotationParameter::member_type_id, and OpenDDS::XTypes::CompleteAnnotationParameter::name.

652 {
653  DDS::MemberDescriptor_var md = new MemberDescriptorImpl();
654  md->name(cm.name.c_str());
655  DDS::DynamicType_var dt = type_identifier_to_dynamic(cm.common.member_type_id, guid);
656  md->type(dt);
657  md->try_construct_kind(DDS::DISCARD);
658  md->is_key(false);
659  md->is_optional(false);
660  md->is_must_understand(false);
661  md->is_shared(false);
662  md->is_default_label(false);
663  return md._retn();
664 }
DDS::DynamicType_ptr type_identifier_to_dynamic(const TypeIdentifier &ti, const DCPS::GUID_t &guid)

◆ complete_struct_member_to_member_descriptor()

DDS::MemberDescriptor * OpenDDS::XTypes::TypeLookupService::complete_struct_member_to_member_descriptor ( const CompleteStructMember cm,
const DCPS::GUID_t guid 
)
private

Definition at line 608 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteStructMember::common, OpenDDS::XTypes::CompleteStructMember::detail, OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL::handle_tryconstruct_flags(), OpenDDS::XTypes::IS_EXTERNAL, OpenDDS::XTypes::IS_KEY, OpenDDS::XTypes::IS_MUST_UNDERSTAND, OpenDDS::XTypes::IS_OPTIONAL, OpenDDS::XTypes::CommonStructMember::member_flags, OpenDDS::XTypes::CommonStructMember::member_id, OpenDDS::XTypes::CommonStructMember::member_type_id, and OpenDDS::XTypes::CompleteMemberDetail::name.

610 {
611  DDS::MemberDescriptor_var md = new MemberDescriptorImpl();
612  md->name(cm.detail.name.c_str());
613  md->id(cm.common.member_id);
614  DDS::DynamicType_var dt = type_identifier_to_dynamic(cm.common.member_type_id, guid);
615  md->type(dt);
617  md->is_key(cm.common.member_flags & IS_KEY);
618  md->is_optional(cm.common.member_flags & IS_OPTIONAL);
619  md->is_must_understand(cm.common.member_flags & IS_MUST_UNDERSTAND);
620  md->is_shared(cm.common.member_flags & IS_EXTERNAL);
621  md->is_default_label(false);
622  return md._retn();
623 }
const MemberFlag IS_OPTIONAL
Definition: TypeObject.h:373
DDS::DynamicType_ptr type_identifier_to_dynamic(const TypeIdentifier &ti, const DCPS::GUID_t &guid)
const MemberFlag IS_MUST_UNDERSTAND
Definition: TypeObject.h:374
const MemberFlag IS_EXTERNAL
Definition: TypeObject.h:371
const MemberFlag IS_KEY
Definition: TypeObject.h:375
void handle_tryconstruct_flags(DDS::MemberDescriptor *md, MemberFlag mf)

◆ complete_to_dynamic()

DDS::DynamicType_ptr OpenDDS::XTypes::TypeLookupService::complete_to_dynamic ( const CompleteTypeObject cto,
const DCPS::GUID_t guid 
)

Definition at line 666 of file TypeLookupService.cpp.

References DDS::APPENDABLE, DDS::FINAL, OpenDDS::XTypes::IS_APPENDABLE, OpenDDS::XTypes::IS_MUTABLE, and DDS::MUTABLE.

667 {
668  DynamicTypeImpl* dt = new DynamicTypeImpl();
669  DDS::DynamicType_var dt_var = dt;
670  complete_to_dynamic_i(dt, cto, guid);
671  return dt_var._retn();
672 }
void complete_to_dynamic_i(DynamicTypeImpl *dt, const CompleteTypeObject &cto, const DCPS::GUID_t &guid)

◆ complete_to_dynamic_i()

void OpenDDS::XTypes::TypeLookupService::complete_to_dynamic_i ( DynamicTypeImpl dt,
const CompleteTypeObject cto,
const DCPS::GUID_t guid 
)
private

Definition at line 689 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteTypeObject::alias_type, OpenDDS::XTypes::CompleteAnnotationHeader::annotation_name, OpenDDS::XTypes::CompleteTypeObject::annotation_type, DDS::APPENDABLE, OpenDDS::XTypes::CompleteTypeObject::array_type, OpenDDS::XTypes::CompleteStructHeader::base_type, OpenDDS::XTypes::CommonEnumeratedHeader::bit_bound, OpenDDS::XTypes::CompleteBitmaskType::bitmask_flags, OpenDDS::XTypes::CompleteTypeObject::bitmask_type, OpenDDS::XTypes::CompleteTypeObject::bitset_type, OpenDDS::XTypes::CompleteAliasType::body, OpenDDS::XTypes::CommonCollectionHeader::bound, OpenDDS::XTypes::CommonArrayHeader::bound_seq, OpenDDS::XTypes::CompleteDiscriminatorMember::common, OpenDDS::XTypes::CompleteAliasBody::common, OpenDDS::XTypes::CompleteCollectionElement::common, OpenDDS::XTypes::CompleteCollectionHeader::common, OpenDDS::XTypes::CompleteArrayHeader::common, OpenDDS::XTypes::CompleteEnumeratedHeader::common, OpenDDS::XTypes::CompleteStructHeader::detail, OpenDDS::XTypes::CompleteUnionHeader::detail, OpenDDS::XTypes::CompleteAliasHeader::detail, OpenDDS::XTypes::CompleteCollectionHeader::detail, OpenDDS::XTypes::CompleteArrayHeader::detail, OpenDDS::XTypes::CompleteEnumeratedHeader::detail, OpenDDS::XTypes::CompleteBitsetHeader::detail, OpenDDS::XTypes::CompleteUnionType::discriminator, OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::CompleteSequenceType::element, OpenDDS::XTypes::CompleteArrayType::element, OpenDDS::XTypes::CompleteMapType::element, OpenDDS::XTypes::CompleteEnumeratedType::enum_flags, OpenDDS::XTypes::CompleteTypeObject::enumerated_type, OpenDDS::XTypes::CompleteBitmaskType::flag_seq, OpenDDS::XTypes::CompleteStructType::header, OpenDDS::XTypes::CompleteUnionType::header, OpenDDS::XTypes::CompleteAnnotationType::header, OpenDDS::XTypes::CompleteAliasType::header, OpenDDS::XTypes::CompleteSequenceType::header, OpenDDS::XTypes::CompleteArrayType::header, OpenDDS::XTypes::CompleteMapType::header, OpenDDS::XTypes::CompleteEnumeratedType::header, OpenDDS::XTypes::CompleteBitmaskType::header, OpenDDS::XTypes::CompleteBitsetType::header, OpenDDS::XTypes::DynamicTypeImpl::insert_dynamic_member(), OpenDDS::XTypes::IS_DEFAULT, OpenDDS::XTypes::IS_KEY, OpenDDS::XTypes::IS_NESTED, OpenDDS::XTypes::CompleteMapType::key, OpenDDS::XTypes::TypeIdentifier::kind(), OpenDDS::XTypes::CompleteTypeObject::kind, OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::CompleteEnumeratedType::literal_seq, OpenDDS::XTypes::CompleteTypeObject::map_type, OpenDDS::XTypes::CommonDiscriminatorMember::member_flags, OpenDDS::XTypes::CompleteStructType::member_seq, OpenDDS::XTypes::CompleteUnionType::member_seq, OpenDDS::XTypes::CompleteAnnotationType::member_seq, OpenDDS::XTypes::CommonAliasBody::related_type, OpenDDS::XTypes::CompleteTypeObject::sequence_type, OpenDDS::XTypes::DynamicTypeMemberImpl::set_descriptor(), OpenDDS::XTypes::DynamicTypeImpl::set_descriptor(), OpenDDS::XTypes::CompleteStructType::struct_flags, OpenDDS::XTypes::CompleteTypeObject::struct_type, OpenDDS::XTypes::TK_ALIAS, OpenDDS::XTypes::TK_ANNOTATION, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BITSET, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_NONE, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::CommonCollectionElement::type, OpenDDS::XTypes::CommonDiscriminatorMember::type_id, OpenDDS::XTypes::CompleteTypeDetail::type_name, OpenDDS::XTypes::TypeFlagMinimalMask, OpenDDS::XTypes::CompleteUnionType::union_flags, and OpenDDS::XTypes::CompleteTypeObject::union_type.

692 {
693  DDS::TypeDescriptor_var td = new TypeDescriptorImpl();
694  switch (cto.kind) {
695  case TK_ALIAS: {
696  td->kind(TK_ALIAS);
697  td->name(cto.alias_type.header.detail.type_name.c_str());
698  const DDS::DynamicType_var temp = type_identifier_to_dynamic(cto.alias_type.body.common.related_type, guid);
699  td->base_type(temp);
700  // The spec says that Alias DynamicTypes should have DynamicTypeMembers, but that leads to redundancy
701  }
702  break;
703  case TK_ENUM:
704  td->kind(TK_ENUM);
705  td->name(cto.enumerated_type.header.detail.type_name.c_str());
707  td->extensibility_kind(DDS::APPENDABLE);
708  } else {
709  td->extensibility_kind(type_flags_to_extensibility(cto.enumerated_type.enum_flags));
710  }
711  td->bound().length(1);
712  td->bound()[0] = cto.enumerated_type.header.common.bit_bound;
713  for (ACE_CDR::ULong i = 0; i < cto.enumerated_type.literal_seq.length(); ++i) {
715  DDS::DynamicTypeMember_var dtm_var = dtm;
717  DDS::MemberDescriptor_var md_var = md;
718  md->name(cto.enumerated_type.literal_seq[i].detail.name.c_str());
719  // Use Id to convey the value of the enumerator.
720  md->id(cto.enumerated_type.literal_seq[i].common.value);
721  md->type(dt);
722  md->is_default_label(cto.enumerated_type.literal_seq[i].common.flags & IS_DEFAULT);
723  md->index(i);
724  dtm->set_descriptor(md);
725  dt->insert_dynamic_member(dtm);
726  }
727  break;
728  case TK_BITMASK: {
729  td->kind(TK_BITMASK);
730  td->name(cto.bitmask_type.header.detail.type_name.c_str());
731  td->extensibility_kind(type_flags_to_extensibility(cto.bitmask_type.bitmask_flags));
732  td->bound().length(1);
733  td->bound()[0] = cto.bitmask_type.header.common.bit_bound;
734  const DDS::DynamicType_var temp = type_identifier_to_dynamic(TypeIdentifier(TK_BOOLEAN), guid);
735  td->element_type(temp);
736  for (ACE_CDR::ULong i = 0; i < cto.bitmask_type.flag_seq.length(); ++i) {
738  DDS::DynamicTypeMember_var dtm_var = dtm;
740  DDS::MemberDescriptor_var md_var = md;
741  md->name(cto.bitmask_type.flag_seq[i].detail.name.c_str());
742  const DDS::DynamicType_var temp = type_identifier_to_dynamic(TypeIdentifier(TK_BOOLEAN), guid);
743  md->type(temp);
744  md->index(i);
745  dtm->set_descriptor(md);
746  dt->insert_dynamic_member(dtm);
747  }
748  }
749  break;
750  case TK_ANNOTATION:
751  td->kind(TK_ANNOTATION);
752  td->name(cto.annotation_type.header.annotation_name.c_str());
753  for (ACE_CDR::ULong i = 0; i < cto.annotation_type.member_seq.length(); ++i) {
754  DDS::MemberDescriptor_var md = complete_annotation_member_to_member_descriptor(cto.annotation_type.member_seq[i], guid);
755  md->index(i);
756  md->id(i);
758  DDS::DynamicTypeMember_var dtm_var = dtm;
759  dtm->set_descriptor(md);
760  dt->insert_dynamic_member(dtm);
761  }
762  break;
763  case TK_STRUCTURE: {
764  td->kind(TK_STRUCTURE);
765  td->name(cto.struct_type.header.detail.type_name.c_str());
766  if (cto.struct_type.header.base_type.kind() != TK_NONE) {
767  const DDS::DynamicType_var base = type_identifier_to_dynamic(cto.struct_type.header.base_type, guid);
768  td->base_type(base);
769  }
770  td->extensibility_kind(type_flags_to_extensibility(cto.struct_type.struct_flags));
771  td->is_nested(cto.struct_type.struct_flags & IS_NESTED);
772  for (ACE_CDR::ULong i = 0; i < cto.struct_type.member_seq.length(); ++i) {
774  DDS::DynamicTypeMember_var dtm_var = dtm;
775  DDS::MemberDescriptor_var md = complete_struct_member_to_member_descriptor(cto.struct_type.member_seq[i], guid);
776  md->index(i);
777  dtm->set_descriptor(md);
778  dt->insert_dynamic_member(dtm);
779  }
780  }
781  break;
782  case TK_UNION: {
783  td->kind(TK_UNION);
784  td->name(cto.union_type.header.detail.type_name.c_str());
785  td->extensibility_kind(type_flags_to_extensibility(cto.union_type.union_flags));
786  td->is_nested(cto.union_type.union_flags & IS_NESTED);
787 
788  const DDS::DynamicType_var disc_type =
790  td->discriminator_type(disc_type);
791  DDS::MemberDescriptor_var disc_md = new MemberDescriptorImpl();
792  disc_md->name("discriminator");
793  disc_md->is_key(cto.union_type.discriminator.common.member_flags & IS_KEY);
794  disc_md->type(disc_type);
795  disc_md->id(DISCRIMINATOR_ID);
796  disc_md->index(DISCRIMINATOR_ID);
798  DDS::DynamicTypeMember_var disc_dtm_var = disc_dtm;
799  disc_dtm->set_descriptor(disc_md);
800  dt->insert_dynamic_member(disc_dtm);
801 
802  for (ACE_CDR::ULong i = 0; i < cto.union_type.member_seq.length(); ++i) {
803  DDS::MemberDescriptor_var md = complete_union_member_to_member_descriptor(cto.union_type.member_seq[i], guid);
804  md->index(i);
806  DDS::DynamicTypeMember_var dtm_var = dtm;
807  dtm->set_descriptor(md);
808  dt->insert_dynamic_member(dtm);
809  }
810  }
811  break;
812  case TK_BITSET:
813  td->kind(TK_BITSET);
814  td->name(cto.bitset_type.header.detail.type_name.c_str());
815  break;
816  case TK_SEQUENCE: {
817  td->kind(TK_SEQUENCE);
818  if (cto.sequence_type.header.detail) {
819  td->name(cto.sequence_type.header.detail.value().type_name.c_str());
820  }
821  td->bound().length(1);
822  td->bound()[0] = cto.sequence_type.header.common.bound;
823  const DDS::DynamicType_var temp = type_identifier_to_dynamic(cto.sequence_type.element.common.type, guid);
824  td->element_type(temp);
825  }
826  break;
827  case TK_ARRAY: {
828  td->kind(TK_ARRAY);
829  td->name(cto.array_type.header.detail.type_name.c_str());
830  // FUTURE: Have the TypeObject code use DDS::BoundSeq
831  DDS::BoundSeq bounds;
832  bounds.length(cto.array_type.header.common.bound_seq.length());
833  for (unsigned int idx = 0; idx != bounds.length(); ++idx) {
834  bounds[idx] = cto.array_type.header.common.bound_seq[idx];
835  }
836  td->bound(bounds);
837  const DDS::DynamicType_var temp = type_identifier_to_dynamic(cto.array_type.element.common.type, guid);
838  td->element_type(temp);
839  }
840  break;
841  case TK_MAP: {
842  td->kind(TK_MAP);
843  if (cto.map_type.header.detail) {
844  td->name(cto.map_type.header.detail.value().type_name.c_str());
845  }
846  td->bound().length(1);
847  td->bound()[0] = cto.map_type.header.common.bound;
848  const DDS::DynamicType_var el_temp = type_identifier_to_dynamic(cto.map_type.element.common.type, guid);
849  td->element_type(el_temp);
850  const DDS::DynamicType_var key_temp = type_identifier_to_dynamic(cto.map_type.key.common.type, guid);
851  td->key_element_type(key_temp);
852  }
853  break;
854  }
855  dt->set_descriptor(td);
856 }
DDS::MemberDescriptor * complete_union_member_to_member_descriptor(const CompleteUnionMember &cm, const DCPS::GUID_t &guid)
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
void set_descriptor(DDS::TypeDescriptor *descriptor)
const TypeKind TK_ALIAS
Definition: TypeObject.h:235
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
DDS::DynamicType_ptr type_identifier_to_dynamic(const TypeIdentifier &ti, const DCPS::GUID_t &guid)
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
ACE_CDR::Octet kind() const
Definition: TypeObject.h:748
void insert_dynamic_member(DDS::DynamicTypeMember_ptr dtm)
CompleteStructMemberSeq member_seq
Definition: TypeObject.h:1477
const TypeKind TK_NONE
Definition: TypeObject.h:213
CompleteAnnotationHeader header
Definition: TypeObject.h:1897
CompleteUnionMemberSeq member_seq
Definition: TypeObject.h:1747
sequence< unsigned long > BoundSeq
const MemberFlag IS_DEFAULT
Definition: TypeObject.h:376
DDS::MemberDescriptor * complete_annotation_member_to_member_descriptor(const CompleteAnnotationParameter &cm, const DCPS::GUID_t &guid)
CompleteSequenceType sequence_type
Definition: TypeObject.h:2982
const TypeFlag TypeFlagMinimalMask
Definition: TypeObject.h:417
CompleteCollectionHeader header
Definition: TypeObject.h:2437
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
CompleteEnumeratedLiteralSeq literal_seq
Definition: TypeObject.h:2638
CompleteBitmaskType bitmask_type
Definition: TypeObject.h:2986
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
CompleteCollectionElement element
Definition: TypeObject.h:2439
const MemberFlag IS_KEY
Definition: TypeObject.h:375
CompleteEnumeratedHeader header
Definition: TypeObject.h:2637
ACE_UINT32 ULong
CompleteAnnotationParameterSeq member_seq
Definition: TypeObject.h:1898
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
CompleteDiscriminatorMember discriminator
Definition: TypeObject.h:1746
const TypeKind TK_ENUM
Definition: TypeObject.h:238
CompleteCollectionHeader header
Definition: TypeObject.h:2253
CompleteEnumeratedType enumerated_type
Definition: TypeObject.h:2985
CompleteCollectionElement element
Definition: TypeObject.h:2254
CompleteAnnotationType annotation_type
Definition: TypeObject.h:2978
DDS::ReturnCode_t set_descriptor(DDS::MemberDescriptor *descriptor)
const TypeKind TK_UNION
Definition: TypeObject.h:244
CompleteCollectionElement element
Definition: TypeObject.h:2377
const TypeKind TK_BITSET
Definition: TypeObject.h:245
DDS::MemberDescriptor * complete_struct_member_to_member_descriptor(const CompleteStructMember &cm, const DCPS::GUID_t &guid)
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
CompleteCollectionElement key
Definition: TypeObject.h:2438
const TypeKind TK_MAP
Definition: TypeObject.h:250
Optional< CompleteTypeDetail > detail
Definition: TypeObject.h:2210
const TypeFlag IS_NESTED
Definition: TypeObject.h:404

◆ complete_to_minimal_alias()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_alias ( const CompleteAliasType ct,
MinimalAliasType mt 
) const
private

Definition at line 486 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteAliasType::alias_flags, OpenDDS::XTypes::MinimalAliasType::alias_flags, OpenDDS::XTypes::CompleteAliasType::body, OpenDDS::XTypes::MinimalAliasType::body, OpenDDS::XTypes::CompleteAliasBody::common, OpenDDS::XTypes::MinimalAliasBody::common, OpenDDS::XTypes::CommonAliasBody::related_flags, and OpenDDS::XTypes::CommonAliasBody::related_type.

488 {
489  mt.alias_flags = ct.alias_flags;
492  mt.body.common.related_type)) {
493  return false;
494  }
495  return true;
496 }
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const

◆ complete_to_minimal_annotation()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_annotation ( const CompleteAnnotationType ct,
MinimalAnnotationType mt 
) const
private

Definition at line 468 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteAnnotationType::annotation_flag, OpenDDS::XTypes::MinimalAnnotationType::annotation_flag, OpenDDS::XTypes::hash_member_name(), OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::CompleteAnnotationType::member_seq, and OpenDDS::XTypes::MinimalAnnotationType::member_seq.

470 {
473 
474  for (ACE_CDR::ULong i = 0; i < ct.member_seq.length(); ++i) {
475  mt.member_seq[i].common.member_flags = ct.member_seq[i].common.member_flags;
476  if (!get_minimal_type_identifier(ct.member_seq[i].common.member_type_id,
477  mt.member_seq[i].common.member_type_id)) {
478  return false;
479  }
480  hash_member_name(mt.member_seq[i].name_hash, ct.member_seq[i].name);
481  mt.member_seq[i].default_value = ct.member_seq[i].default_value;
482  }
483  return true;
484 }
void hash_member_name(NameHash &name_hash, const OPENDDS_STRING &name)
Definition: TypeObject.cpp:400
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
MinimalAnnotationParameterSeq member_seq
Definition: TypeObject.h:1918
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
ACE_UINT32 ULong
CompleteAnnotationParameterSeq member_seq
Definition: TypeObject.h:1898

◆ complete_to_minimal_array()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_array ( const CompleteArrayType ct,
MinimalArrayType mt 
) const
private

Definition at line 510 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteArrayType::collection_flag, OpenDDS::XTypes::MinimalArrayType::collection_flag, OpenDDS::XTypes::CompleteCollectionElement::common, OpenDDS::XTypes::MinimalCollectionElement::common, OpenDDS::XTypes::CompleteArrayHeader::common, OpenDDS::XTypes::MinimalArrayHeader::common, OpenDDS::XTypes::CompleteArrayType::element, OpenDDS::XTypes::MinimalArrayType::element, OpenDDS::XTypes::CommonCollectionElement::element_flags, OpenDDS::XTypes::CompleteArrayType::header, OpenDDS::XTypes::MinimalArrayType::header, and OpenDDS::XTypes::CommonCollectionElement::type.

512 {
514  mt.header.common = ct.header.common;
517  return false;
518  }
519  return true;
520 }
CollectionTypeFlag collection_flag
Definition: TypeObject.h:2375
MinimalCollectionElement element
Definition: TypeObject.h:2407
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
CollectionTypeFlag collection_flag
Definition: TypeObject.h:2405
CompleteCollectionElement element
Definition: TypeObject.h:2377

◆ complete_to_minimal_bitmask()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_bitmask ( const CompleteBitmaskType ct,
MinimalBitmaskType mt 
) const
private

Definition at line 551 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteBitmaskType::bitmask_flags, OpenDDS::XTypes::MinimalBitmaskType::bitmask_flags, OpenDDS::XTypes::CompleteEnumeratedHeader::common, OpenDDS::XTypes::MinimalEnumeratedHeader::common, OpenDDS::XTypes::CompleteBitmaskType::flag_seq, OpenDDS::XTypes::MinimalBitmaskType::flag_seq, OpenDDS::XTypes::hash_member_name(), OpenDDS::XTypes::CompleteBitmaskType::header, OpenDDS::XTypes::MinimalBitmaskType::header, and OpenDDS::XTypes::Sequence< T >::length().

553 {
555  mt.header.common = ct.header.common;
556  mt.flag_seq.length(ct.flag_seq.length());
557  for (ACE_CDR::ULong i = 0; i < ct.flag_seq.length(); ++i) {
558  mt.flag_seq[i].common = ct.flag_seq[i].common;
559  hash_member_name(mt.flag_seq[i].detail.name_hash, ct.flag_seq[i].detail.name);
560  }
561  return true;
562 }
void hash_member_name(NameHash &name_hash, const OPENDDS_STRING &name)
Definition: TypeObject.cpp:400
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
ACE_UINT32 ULong

◆ complete_to_minimal_bitset()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_bitset ( const CompleteBitsetType ct,
MinimalBitsetType mt 
) const
private

Definition at line 564 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteBitsetType::bitset_flags, OpenDDS::XTypes::MinimalBitsetType::bitset_flags, OpenDDS::XTypes::CompleteBitsetType::field_seq, OpenDDS::XTypes::MinimalBitsetType::field_seq, OpenDDS::XTypes::hash_member_name(), and OpenDDS::XTypes::Sequence< T >::length().

566 {
567  mt.bitset_flags = ct.bitset_flags;
568  mt.field_seq.length(ct.field_seq.length());
569  for (ACE_CDR::ULong i = 0; i < ct.field_seq.length(); ++i) {
570  mt.field_seq[i].common = ct.field_seq[i].common;
571  hash_member_name(mt.field_seq[i].name_hash, ct.field_seq[i].detail.name);
572  }
573  return true;
574 }
void hash_member_name(NameHash &name_hash, const OPENDDS_STRING &name)
Definition: TypeObject.cpp:400
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
ACE_UINT32 ULong

◆ complete_to_minimal_enumerated()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_enumerated ( const CompleteEnumeratedType ct,
MinimalEnumeratedType mt 
) const
private

Definition at line 538 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteEnumeratedHeader::common, OpenDDS::XTypes::MinimalEnumeratedHeader::common, OpenDDS::XTypes::CompleteEnumeratedType::enum_flags, OpenDDS::XTypes::MinimalEnumeratedType::enum_flags, OpenDDS::XTypes::hash_member_name(), OpenDDS::XTypes::CompleteEnumeratedType::header, OpenDDS::XTypes::MinimalEnumeratedType::header, OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::CompleteEnumeratedType::literal_seq, and OpenDDS::XTypes::MinimalEnumeratedType::literal_seq.

540 {
541  mt.enum_flags = ct.enum_flags;
542  mt.header.common = ct.header.common;
544  for (ACE_CDR::ULong i = 0; i < ct.literal_seq.length(); ++i) {
545  mt.literal_seq[i].common = ct.literal_seq[i].common;
546  hash_member_name(mt.literal_seq[i].detail.name_hash, ct.literal_seq[i].detail.name);
547  }
548  return true;
549 }
void hash_member_name(NameHash &name_hash, const OPENDDS_STRING &name)
Definition: TypeObject.cpp:400
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
CompleteEnumeratedLiteralSeq literal_seq
Definition: TypeObject.h:2638
CompleteEnumeratedHeader header
Definition: TypeObject.h:2637
ACE_UINT32 ULong
MinimalEnumeratedHeader header
Definition: TypeObject.h:2666
MinimalEnumeratedLiteralSeq literal_seq
Definition: TypeObject.h:2667

◆ complete_to_minimal_map()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_map ( const CompleteMapType ct,
MinimalMapType mt 
) const
private

Definition at line 522 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteMapType::collection_flag, OpenDDS::XTypes::MinimalMapType::collection_flag, OpenDDS::XTypes::CompleteCollectionElement::common, OpenDDS::XTypes::MinimalCollectionElement::common, OpenDDS::XTypes::CompleteCollectionHeader::common, OpenDDS::XTypes::MinimalCollectionHeader::common, OpenDDS::XTypes::CompleteMapType::element, OpenDDS::XTypes::MinimalMapType::element, OpenDDS::XTypes::CommonCollectionElement::element_flags, OpenDDS::XTypes::CompleteMapType::header, OpenDDS::XTypes::MinimalMapType::header, OpenDDS::XTypes::CompleteMapType::key, OpenDDS::XTypes::MinimalMapType::key, and OpenDDS::XTypes::CommonCollectionElement::type.

524 {
526  mt.header.common = ct.header.common;
529  return false;
530  }
533  return false;
534  }
535  return true;
536 }
CollectionTypeFlag collection_flag
Definition: TypeObject.h:2457
CollectionTypeFlag collection_flag
Definition: TypeObject.h:2436
MinimalCollectionHeader header
Definition: TypeObject.h:2458
MinimalCollectionElement key
Definition: TypeObject.h:2459
CompleteCollectionHeader header
Definition: TypeObject.h:2437
CompleteCollectionElement element
Definition: TypeObject.h:2439
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
MinimalCollectionElement element
Definition: TypeObject.h:2460
CompleteCollectionElement key
Definition: TypeObject.h:2438

◆ complete_to_minimal_sequence()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_sequence ( const CompleteSequenceType ct,
MinimalSequenceType mt 
) const
private

Definition at line 498 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteSequenceType::collection_flag, OpenDDS::XTypes::MinimalSequenceType::collection_flag, OpenDDS::XTypes::CompleteCollectionElement::common, OpenDDS::XTypes::MinimalCollectionElement::common, OpenDDS::XTypes::CompleteCollectionHeader::common, OpenDDS::XTypes::MinimalCollectionHeader::common, OpenDDS::XTypes::CompleteSequenceType::element, OpenDDS::XTypes::MinimalSequenceType::element, OpenDDS::XTypes::CommonCollectionElement::element_flags, OpenDDS::XTypes::CompleteSequenceType::header, OpenDDS::XTypes::MinimalSequenceType::header, and OpenDDS::XTypes::CommonCollectionElement::type.

500 {
502  mt.header.common = ct.header.common;
505  return false;
506  }
507  return true;
508 }
MinimalCollectionHeader header
Definition: TypeObject.h:2283
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
MinimalCollectionElement element
Definition: TypeObject.h:2284
CompleteCollectionHeader header
Definition: TypeObject.h:2253
CompleteCollectionElement element
Definition: TypeObject.h:2254

◆ complete_to_minimal_struct()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_struct ( const CompleteStructType ct,
MinimalStructType mt 
) const
private

Definition at line 423 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteStructHeader::base_type, OpenDDS::XTypes::MinimalStructHeader::base_type, OpenDDS::XTypes::hash_member_name(), OpenDDS::XTypes::CompleteStructType::header, OpenDDS::XTypes::MinimalStructType::header, OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::CompleteStructType::member_seq, OpenDDS::XTypes::MinimalStructType::member_seq, OpenDDS::XTypes::CompleteStructType::struct_flags, and OpenDDS::XTypes::MinimalStructType::struct_flags.

425 {
426  mt.struct_flags = ct.struct_flags;
428  return false;
429  }
431 
432  for (ACE_CDR::ULong i = 0; i < ct.member_seq.length(); ++i) {
433  mt.member_seq[i].common.member_id = ct.member_seq[i].common.member_id;
434  mt.member_seq[i].common.member_flags = ct.member_seq[i].common.member_flags;
435  if (!get_minimal_type_identifier(ct.member_seq[i].common.member_type_id,
436  mt.member_seq[i].common.member_type_id)) {
437  return false;
438  }
439  hash_member_name(mt.member_seq[i].detail.name_hash, ct.member_seq[i].detail.name);
440  }
441  return true;
442 }
void hash_member_name(NameHash &name_hash, const OPENDDS_STRING &name)
Definition: TypeObject.cpp:400
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
CompleteStructMemberSeq member_seq
Definition: TypeObject.h:1477
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
ACE_UINT32 ULong
MinimalStructMemberSeq member_seq
Definition: TypeObject.h:1505

◆ complete_to_minimal_type_object()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_type_object ( const TypeObject cto,
TypeObject mto 
) const

For converting between complete to minimal TypeObject of remote types

Definition at line 576 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteTypeObject::alias_type, OpenDDS::XTypes::MinimalTypeObject::alias_type, OpenDDS::XTypes::CompleteTypeObject::annotation_type, OpenDDS::XTypes::MinimalTypeObject::annotation_type, OpenDDS::XTypes::CompleteTypeObject::array_type, OpenDDS::XTypes::MinimalTypeObject::array_type, OpenDDS::XTypes::CompleteTypeObject::bitmask_type, OpenDDS::XTypes::MinimalTypeObject::bitmask_type, OpenDDS::XTypes::CompleteTypeObject::bitset_type, OpenDDS::XTypes::MinimalTypeObject::bitset_type, OpenDDS::XTypes::TypeObject::complete, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::XTypes::CompleteTypeObject::enumerated_type, OpenDDS::XTypes::MinimalTypeObject::enumerated_type, OpenDDS::XTypes::CompleteTypeObject::kind, OpenDDS::XTypes::MinimalTypeObject::kind, OpenDDS::XTypes::TypeObject::kind, OpenDDS::XTypes::CompleteTypeObject::map_type, OpenDDS::XTypes::MinimalTypeObject::map_type, OpenDDS::XTypes::TypeObject::minimal, OpenDDS::XTypes::CompleteTypeObject::sequence_type, OpenDDS::XTypes::MinimalTypeObject::sequence_type, OpenDDS::XTypes::CompleteTypeObject::struct_type, OpenDDS::XTypes::MinimalTypeObject::struct_type, OpenDDS::XTypes::TK_ALIAS, OpenDDS::XTypes::TK_ANNOTATION, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BITSET, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::CompleteTypeObject::union_type, and OpenDDS::XTypes::MinimalTypeObject::union_type.

577 {
578  mto.kind = EK_MINIMAL;
579  mto.minimal.kind = cto.complete.kind;
580 
581  switch (cto.complete.kind) {
582  case TK_ALIAS:
584  case TK_ANNOTATION:
586  case TK_STRUCTURE:
588  case TK_UNION:
590  case TK_BITSET:
592  case TK_SEQUENCE:
594  case TK_ARRAY:
596  case TK_MAP:
598  case TK_ENUM:
600  case TK_BITMASK:
602  default:
603  return false;
604  }
605 }
bool complete_to_minimal_annotation(const CompleteAnnotationType &ct, MinimalAnnotationType &mt) const
CompleteTypeObject complete
Definition: TypeObject.h:3243
bool complete_to_minimal_bitset(const CompleteBitsetType &ct, MinimalBitsetType &mt) const
bool complete_to_minimal_map(const CompleteMapType &ct, MinimalMapType &mt) const
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
bool complete_to_minimal_struct(const CompleteStructType &ct, MinimalStructType &mt) const
const EquivalenceKind EK_MINIMAL
Definition: TypeObject.h:205
const TypeKind TK_ALIAS
Definition: TypeObject.h:235
bool complete_to_minimal_bitmask(const CompleteBitmaskType &ct, MinimalBitmaskType &mt) const
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
bool complete_to_minimal_alias(const CompleteAliasType &ct, MinimalAliasType &mt) const
MinimalEnumeratedType enumerated_type
Definition: TypeObject.h:3135
MinimalSequenceType sequence_type
Definition: TypeObject.h:3132
bool complete_to_minimal_array(const CompleteArrayType &ct, MinimalArrayType &mt) const
CompleteSequenceType sequence_type
Definition: TypeObject.h:2982
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
CompleteBitmaskType bitmask_type
Definition: TypeObject.h:2986
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_ENUM
Definition: TypeObject.h:238
MinimalTypeObject minimal
Definition: TypeObject.h:3244
CompleteEnumeratedType enumerated_type
Definition: TypeObject.h:2985
bool complete_to_minimal_union(const CompleteUnionType &ct, MinimalUnionType &mt) const
CompleteAnnotationType annotation_type
Definition: TypeObject.h:2978
const TypeKind TK_UNION
Definition: TypeObject.h:244
const TypeKind TK_BITSET
Definition: TypeObject.h:245
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
MinimalAnnotationType annotation_type
Definition: TypeObject.h:3128
bool complete_to_minimal_enumerated(const CompleteEnumeratedType &ct, MinimalEnumeratedType &mt) const
bool complete_to_minimal_sequence(const CompleteSequenceType &ct, MinimalSequenceType &mt) const
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ complete_to_minimal_union()

bool OpenDDS::XTypes::TypeLookupService::complete_to_minimal_union ( const CompleteUnionType ct,
MinimalUnionType mt 
) const
private

Definition at line 444 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteDiscriminatorMember::common, OpenDDS::XTypes::MinimalDiscriminatorMember::common, OpenDDS::XTypes::CompleteUnionType::discriminator, OpenDDS::XTypes::MinimalUnionType::discriminator, OpenDDS::XTypes::hash_member_name(), OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::CommonDiscriminatorMember::member_flags, OpenDDS::XTypes::CompleteUnionType::member_seq, OpenDDS::XTypes::MinimalUnionType::member_seq, OpenDDS::XTypes::CommonDiscriminatorMember::type_id, OpenDDS::XTypes::CompleteUnionType::union_flags, and OpenDDS::XTypes::MinimalUnionType::union_flags.

446 {
447  mt.union_flags = ct.union_flags;
451  return false;
452  }
454 
455  for (ACE_CDR::ULong i = 0; i < ct.member_seq.length(); ++i) {
456  mt.member_seq[i].common.member_id = ct.member_seq[i].common.member_id;
457  mt.member_seq[i].common.member_flags = ct.member_seq[i].common.member_flags;
458  if (!get_minimal_type_identifier(ct.member_seq[i].common.type_id,
459  mt.member_seq[i].common.type_id)) {
460  return false;
461  }
462  mt.member_seq[i].common.label_seq = ct.member_seq[i].common.label_seq;
463  hash_member_name(mt.member_seq[i].detail.name_hash, ct.member_seq[i].detail.name);
464  }
465  return true;
466 }
void hash_member_name(NameHash &name_hash, const OPENDDS_STRING &name)
Definition: TypeObject.cpp:400
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
CompleteUnionMemberSeq member_seq
Definition: TypeObject.h:1747
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
ACE_UINT32 ULong
MinimalDiscriminatorMember discriminator
Definition: TypeObject.h:1777
CompleteDiscriminatorMember discriminator
Definition: TypeObject.h:1746
MinimalUnionMemberSeq member_seq
Definition: TypeObject.h:1778

◆ complete_union_member_to_member_descriptor()

DDS::MemberDescriptor * OpenDDS::XTypes::TypeLookupService::complete_union_member_to_member_descriptor ( const CompleteUnionMember cm,
const DCPS::GUID_t guid 
)
private

Definition at line 625 of file TypeLookupService.cpp.

References OpenDDS::XTypes::CompleteUnionMember::common, OpenDDS::XTypes::CompleteUnionMember::detail, OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL::handle_tryconstruct_flags(), OpenDDS::XTypes::IS_DEFAULT, OpenDDS::XTypes::IS_EXTERNAL, OpenDDS::XTypes::CommonUnionMember::label_seq, OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::CommonUnionMember::member_flags, OpenDDS::XTypes::CommonUnionMember::member_id, OpenDDS::XTypes::CompleteMemberDetail::name, and OpenDDS::XTypes::CommonUnionMember::type_id.

627 {
628  DDS::MemberDescriptor_var md = new MemberDescriptorImpl();
629  md->name(cm.detail.name.c_str());
630  md->id(cm.common.member_id);
631  DDS::DynamicType_var dt = type_identifier_to_dynamic(cm.common.type_id, guid);
632  md->type(dt);
633  // Make a copy.
634  // FUTURE: Have the TypeObject code use DDS::UnionCaseLabelSeq
635  DDS::UnionCaseLabelSeq labels;
636  labels.length(cm.common.label_seq.length());
637  for (unsigned int idx = 0; idx != labels.length(); ++idx) {
638  labels[idx] = cm.common.label_seq[idx];
639  }
640  md->label(labels);
642  md->is_key(false);
643  md->is_optional(false);
644  md->is_must_understand(false);
645  md->is_shared(cm.common.member_flags & IS_EXTERNAL);
646  md->is_default_label(cm.common.member_flags & IS_DEFAULT);
647  return md._retn();
648 }
DDS::DynamicType_ptr type_identifier_to_dynamic(const TypeIdentifier &ti, const DCPS::GUID_t &guid)
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
const MemberFlag IS_DEFAULT
Definition: TypeObject.h:376
const MemberFlag IS_EXTERNAL
Definition: TypeObject.h:371
void handle_tryconstruct_flags(DDS::MemberDescriptor *md, MemberFlag mf)

◆ extensibility()

bool OpenDDS::XTypes::TypeLookupService::extensibility ( TypeFlag  extensibility_mask,
const TypeIdentifier ti 
) const

Definition at line 1117 of file TypeLookupService.cpp.

References ACE_GUARD_RETURN, OpenDDS::XTypes::Sequence< T >::append(), OpenDDS::XTypes::TypeObject::complete, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::XTypes::CompleteTypeObject::kind, OpenDDS::XTypes::MinimalTypeObject::kind, OpenDDS::XTypes::TypeObject::kind, OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::TypeObject::minimal, OpenDDS::XTypes::CompleteStructType::struct_flags, OpenDDS::XTypes::MinimalStructType::struct_flags, OpenDDS::XTypes::CompleteTypeObject::struct_type, OpenDDS::XTypes::MinimalTypeObject::struct_type, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::CompleteUnionType::union_flags, OpenDDS::XTypes::MinimalUnionType::union_flags, OpenDDS::XTypes::CompleteTypeObject::union_type, and OpenDDS::XTypes::MinimalTypeObject::union_type.

1118 {
1120  bool result = false;
1121  const TypeObject& to = get_type_object_i(type_id);
1122  TypeKind tk = to.kind == EK_MINIMAL ? to.minimal.kind : to.complete.kind;
1123 
1124  if (TK_UNION == tk) {
1125  result = to.kind == EK_MINIMAL ?
1126  (to.minimal.union_type.union_flags & extensibility_mask) :
1127  (to.complete.union_type.union_flags & extensibility_mask);
1128  } else if (TK_STRUCTURE == tk) {
1129  result = to.kind == EK_MINIMAL ?
1130  (to.minimal.struct_type.struct_flags & extensibility_mask) :
1131  (to.complete.struct_type.struct_flags & extensibility_mask);
1132  }
1133 
1134  if (result) {
1135  return true;
1136  }
1137 
1138  TypeIdentifierWithSizeSeq dependencies;
1139  TypeIdentifierSeq type_ids;
1140  type_ids.append(type_id);
1141  get_type_dependencies_i(type_ids, dependencies);
1142 
1143  for (unsigned i = 0; i < dependencies.length(); ++i) {
1144  const TypeObject& dep_to = get_type_object_i(dependencies[i].type_id);
1145  tk = dep_to.kind == EK_MINIMAL ? dep_to.minimal.kind : dep_to.complete.kind;
1146 
1147  if (TK_UNION == tk) {
1148  result = dep_to.kind == EK_MINIMAL ?
1149  (dep_to.minimal.union_type.union_flags & extensibility_mask) :
1150  (dep_to.complete.union_type.union_flags & extensibility_mask);
1151  } else if (TK_STRUCTURE == tk) {
1152  result = dep_to.kind == EK_MINIMAL ?
1153  (dep_to.minimal.struct_type.struct_flags & extensibility_mask) :
1154  (dep_to.complete.struct_type.struct_flags & extensibility_mask);
1155  }
1156  if (result) {
1157  return true;
1158  }
1159  }
1160  return false;
1161 }
CompleteTypeObject complete
Definition: TypeObject.h:3243
const EquivalenceKind EK_MINIMAL
Definition: TypeObject.h:205
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
void get_type_dependencies_i(const TypeIdentifierSeq &type_ids, TypeIdentifierWithSizeSeq &dependencies) const
const TypeObject & get_type_object_i(const TypeIdentifier &type_id) const
Sequence & append(const T &member)
Definition: TypeObject.h:155
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
MinimalTypeObject minimal
Definition: TypeObject.h:3244
const TypeKind TK_UNION
Definition: TypeObject.h:244
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210

◆ get_minimal_type_identifier()

bool OpenDDS::XTypes::TypeLookupService::get_minimal_type_identifier ( const TypeIdentifier ct,
TypeIdentifier mt 
) const
private

Definition at line 185 of file TypeLookupService.cpp.

References ACE_ERROR, ACE_TEXT(), OpenDDS::XTypes::EK_COMPLETE, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::XTypes::equivalence_hash_to_string(), OpenDDS::XTypes::is_fully_descriptive(), OpenDDS::XTypes::is_plain_collection(), OpenDDS::XTypes::TypeIdentifier::kind(), LM_ERROR, OpenDDS::XTypes::TI_PLAIN_ARRAY_LARGE, OpenDDS::XTypes::TI_PLAIN_ARRAY_SMALL, OpenDDS::XTypes::TI_PLAIN_MAP_LARGE, OpenDDS::XTypes::TI_PLAIN_MAP_SMALL, OpenDDS::XTypes::TI_PLAIN_SEQUENCE_LARGE, OpenDDS::XTypes::TI_PLAIN_SEQUENCE_SMALL, OpenDDS::XTypes::TI_STRONGLY_CONNECTED_COMPONENT, and OpenDDS::XTypes::TK_NONE.

186 {
187  if (ct.kind() == TK_NONE || is_fully_descriptive(ct)) {
188  mt = ct;
189  return true;
190  }
191 
192  // Non-fully descriptive plain collection is a special case where we have to
193  // get the minimal TypeIdentifier of the element type to create the TypeIdentifier
194  // of the minimal collection type.
195  if (is_plain_collection(ct)) {
196  mt = ct;
197  TypeIdentifier complete_elem_ti, minimal_elem_ti;
198  switch (mt.kind()) {
200  mt.seq_sdefn().header.equiv_kind = EK_MINIMAL;
201  complete_elem_ti = *ct.seq_sdefn().element_identifier;
202  break;
204  mt.seq_ldefn().header.equiv_kind = EK_MINIMAL;
205  complete_elem_ti = *ct.seq_ldefn().element_identifier;
206  break;
208  mt.array_sdefn().header.equiv_kind = EK_MINIMAL;
209  complete_elem_ti = *ct.array_sdefn().element_identifier;
210  break;
212  mt.array_ldefn().header.equiv_kind = EK_MINIMAL;
213  complete_elem_ti = *ct.array_ldefn().element_identifier;
214  break;
215  case TI_PLAIN_MAP_SMALL:
216  mt.map_sdefn().header.equiv_kind = EK_MINIMAL;
217  complete_elem_ti = *ct.map_sdefn().element_identifier;
218  break;
219  case TI_PLAIN_MAP_LARGE:
220  mt.map_ldefn().header.equiv_kind = EK_MINIMAL;
221  complete_elem_ti = *ct.map_ldefn().element_identifier;
222  break;
223  }
224  get_minimal_type_identifier(complete_elem_ti, minimal_elem_ti);
225 
226  switch (mt.kind()) {
228  mt.seq_sdefn().element_identifier = minimal_elem_ti;
229  break;
231  mt.seq_ldefn().element_identifier = minimal_elem_ti;
232  break;
234  mt.array_sdefn().element_identifier = minimal_elem_ti;
235  break;
237  mt.array_ldefn().element_identifier = minimal_elem_ti;
238  break;
239  case TI_PLAIN_MAP_SMALL:
240  {
241  mt.map_sdefn().element_identifier = minimal_elem_ti;
242  TypeIdentifier minimal_key_ti;
243  get_minimal_type_identifier(*ct.map_sdefn().key_identifier, minimal_key_ti);
244  mt.map_sdefn().key_identifier = minimal_key_ti;
245  break;
246  }
247  case TI_PLAIN_MAP_LARGE:
248  {
249  mt.map_ldefn().element_identifier = minimal_elem_ti;
250  TypeIdentifier minimal_key_ti;
251  get_minimal_type_identifier(*ct.map_ldefn().key_identifier, minimal_key_ti);
252  mt.map_ldefn().key_identifier = minimal_key_ti;
253  break;
254  }
255  }
256 
257  return true;
258  }
259 
260  // Mapping for the remaining type kinds should be provided by the remote endpoint.
261  const TypeIdentifierMap::const_iterator pos = complete_to_minimal_ti_map_.find(ct);
262  if (pos == complete_to_minimal_ti_map_.end()) {
263  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) TypeLookupService::get_minimal_type_identifier: ")
264  ACE_TEXT("complete TypeIdentifier not found.\n")));
265  if (ct.kind() == EK_COMPLETE) {
266  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) TypeLookupService::get_minimal_type_identifier: ")
267  ACE_TEXT(" Kind: EK_COMPLETE. Hash: (%C)\n"),
268  equivalence_hash_to_string(ct.equivalence_hash()).c_str()));
269  } else if (ct.kind() == TI_STRONGLY_CONNECTED_COMPONENT) {
270  const EquivalenceKind ek = ct.sc_component_id().sc_component_id.kind;
271  if (ek == EK_MINIMAL) {
272  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) TypeLookupService::get_minimal_type_identifier: ")
273  ACE_TEXT("Expect EK_COMPLETE but received EK_MINIMAL.\n")));
274  }
275  const DCPS::String ek_str = ek == EK_COMPLETE ? "EK_COMPLETE" : "EK_MINIMAL";
276  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) TypeLookupService::get_minimal_type_identifier: ")
277  ACE_TEXT("Kind: TI_STRONGLY_CONNECTED_COMPONENT. ")
278  ACE_TEXT("Equivalence kind: %C. Hash: (%C). Scc length: %d. Scc index: %d\n"),
279  ek_str.c_str(),
280  equivalence_hash_to_string(ct.sc_component_id().sc_component_id.hash).c_str(),
281  ct.sc_component_id().scc_length,
282  ct.sc_component_id().scc_index));
283  }
284 
285  mt = TypeIdentifier(TK_NONE);
286  return false;
287  }
288  mt = pos->second;
289  return true;
290 }
#define ACE_ERROR(X)
const TypeIdentifierKind TI_STRONGLY_CONNECTED_COMPONENT
Definition: TypeObject.h:269
const EquivalenceKind EK_MINIMAL
Definition: TypeObject.h:205
const TypeIdentifierKind TI_PLAIN_ARRAY_LARGE
Definition: TypeObject.h:264
bool is_plain_collection(const TypeIdentifier &ti)
Definition: TypeObject.cpp:447
const TypeIdentifierKind TI_PLAIN_SEQUENCE_LARGE
Definition: TypeObject.h:261
ACE_CDR::Octet kind() const
Definition: TypeObject.h:748
const TypeKind TK_NONE
Definition: TypeObject.h:213
const TypeIdentifierKind TI_PLAIN_ARRAY_SMALL
Definition: TypeObject.h:263
TypeIdentifierMap complete_to_minimal_ti_map_
const TypeIdentifierKind TI_PLAIN_MAP_LARGE
Definition: TypeObject.h:267
DCPS::String equivalence_hash_to_string(const EquivalenceHash &equivalence_hash)
Definition: TypeObject.cpp:33
const TypeIdentifierKind TI_PLAIN_MAP_SMALL
Definition: TypeObject.h:266
bool is_fully_descriptive(const TypeIdentifier &ti)
Definition: TypeObject.cpp:408
bool get_minimal_type_identifier(const TypeIdentifier &ct, TypeIdentifier &mt) const
ACE_TEXT("TCP_Factory")
ACE_CDR::Octet EquivalenceKind
Definition: TypeObject.h:204
std::string String
const TypeIdentifierKind TI_PLAIN_SEQUENCE_SMALL
Definition: TypeObject.h:260
const EquivalenceKind EK_COMPLETE
Definition: TypeObject.h:206

◆ get_type_dependencies() [1/2]

bool OpenDDS::XTypes::TypeLookupService::get_type_dependencies ( const TypeIdentifier type_id,
TypeIdentifierWithSizeSeq dependencies 
) const

For TypeLookup_getTypeDependencies.

Definition at line 84 of file TypeLookupService.cpp.

References ACE_GUARD_RETURN.

86 {
88  const TypeIdentifierWithSizeSeqMap::const_iterator it = type_dependencies_map_.find(type_id);
89  if (it != type_dependencies_map_.end()) {
90  dependencies = it->second;
91  return true;
92  }
93  return false;
94 }
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
TypeIdentifierWithSizeSeqMap type_dependencies_map_

◆ get_type_dependencies() [2/2]

void OpenDDS::XTypes::TypeLookupService::get_type_dependencies ( const TypeIdentifierSeq type_ids,
TypeIdentifierWithSizeSeq dependencies 
) const

Definition at line 96 of file TypeLookupService.cpp.

References ACE_GUARD.

98 {
100  get_type_dependencies_i(type_ids, dependencies);
101 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
void get_type_dependencies_i(const TypeIdentifierSeq &type_ids, TypeIdentifierWithSizeSeq &dependencies) const

◆ get_type_dependencies_i()

void OpenDDS::XTypes::TypeLookupService::get_type_dependencies_i ( const TypeIdentifierSeq type_ids,
TypeIdentifierWithSizeSeq dependencies 
) const
private

Definition at line 103 of file TypeLookupService.cpp.

References OpenDDS::XTypes::get_typeobject_encoding(), OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::OPENDDS_SET(), and OpenDDS::DCPS::serialized_size().

105 {
107  for (unsigned i = 0; i < type_ids.length(); ++i) {
108  const TypeIdentifierWithSizeSeqMap::const_iterator it = type_dependencies_map_.find(type_ids[i]);
109  if (it != type_dependencies_map_.end()) {
110  for (unsigned j = 0; j < it->second.length(); ++j) {
111  tmp.insert(it->second[j].type_id);
112  }
113  }
114  }
115 
116  // All dependent TypeIdentifiers are expected to have an entry in the TypeObject cache.
117  dependencies.length(static_cast<unsigned>(tmp.size()));
118  OPENDDS_SET(TypeIdentifier)::const_iterator iter = tmp.begin();
119  for (unsigned i = 0; iter != tmp.end(); ++i, ++iter) {
120  const TypeMap::const_iterator tobj_it = type_map_.find(*iter);
121  if (tobj_it != type_map_.end()) {
122  dependencies[i].type_id = *iter;
123  const size_t sz = DCPS::serialized_size(get_typeobject_encoding(), tobj_it->second);
124  dependencies[i].typeobject_serialized_size = static_cast<unsigned>(sz);
125  }
126  }
127 }
const Encoding & get_typeobject_encoding()
Definition: TypeObject.cpp:27
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
void serialized_size(const Encoding &encoding, size_t &size, const SequenceNumber &)
typedef OPENDDS_SET(DynamicTypePtrPair) DynamicTypePtrPairSeen
TypeMap type_map_
Contains both minimal and complete type mapping.
TypeIdentifierWithSizeSeqMap type_dependencies_map_

◆ get_type_info()

const TypeInformation & OpenDDS::XTypes::TypeLookupService::get_type_info ( const DDS::BuiltinTopicKey_t key) const

Definition at line 175 of file TypeLookupService.cpp.

References ACE_GUARD_RETURN.

176 {
178  const TypeInformationMap::const_iterator it = type_info_map_.find(key);
179  if (it != type_info_map_.end()) {
180  return it->second;
181  }
182  return type_info_empty_;
183 }
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ get_type_object()

const TypeObject & OpenDDS::XTypes::TypeLookupService::get_type_object ( const TypeIdentifier type_id) const

For TypeAssignability.

Definition at line 69 of file TypeLookupService.cpp.

References ACE_GUARD_RETURN.

70 {
72  return get_type_object_i(type_id);
73 }
const TypeObject & get_type_object_i(const TypeIdentifier &type_id) const
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ get_type_object_i()

const TypeObject & OpenDDS::XTypes::TypeLookupService::get_type_object_i ( const TypeIdentifier type_id) const
private

Definition at line 75 of file TypeLookupService.cpp.

76 {
77  const TypeMap::const_iterator pos = type_map_.find(type_id);
78  if (pos != type_map_.end()) {
79  return pos->second;
80  }
81  return to_empty_;
82 }
TypeMap type_map_
Contains both minimal and complete type mapping.

◆ get_type_objects()

void OpenDDS::XTypes::TypeLookupService::get_type_objects ( const TypeIdentifierSeq type_ids,
TypeIdentifierTypeObjectPairSeq types 
) const

For TypeLookup_getTypes.

Definition at line 57 of file TypeLookupService.cpp.

References ACE_GUARD, OpenDDS::XTypes::Sequence< T >::append(), and OpenDDS::XTypes::Sequence< T >::length().

59 {
61  for (unsigned i = 0; i < type_ids.length(); ++i) {
62  TypeMap::const_iterator pos = type_map_.find(type_ids[i]);
63  if (pos != type_map_.end()) {
64  types.append(TypeIdentifierTypeObjectPair(pos->first, pos->second));
65  }
66  }
67 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
Sequence & append(const T &member)
Definition: TypeObject.h:155
TypeMap type_map_
Contains both minimal and complete type mapping.

◆ has_complete()

bool OpenDDS::XTypes::TypeLookupService::has_complete ( const TypeIdentifier ti) const

Definition at line 1180 of file TypeLookupService.cpp.

References ACE_GUARD_RETURN, OpenDDS::XTypes::EK_COMPLETE, OpenDDS::XTypes::TypeIdentifier::kind(), and OPENDDS_END_VERSIONED_NAMESPACE_DECL.

1181 {
1183  return ti.kind() == EK_COMPLETE && type_map_.count(ti);
1184 }
ACE_CDR::Octet kind() const
Definition: TypeObject.h:748
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
TypeMap type_map_
Contains both minimal and complete type mapping.
const EquivalenceKind EK_COMPLETE
Definition: TypeObject.h:206

◆ OPENDDS_MAP() [1/4]

typedef OpenDDS::XTypes::TypeLookupService::OPENDDS_MAP ( TypeIdentifier  ,
DDS::DynamicType_var   
)

◆ OPENDDS_MAP() [2/4]

typedef OpenDDS::XTypes::TypeLookupService::OPENDDS_MAP ( DCPS::GUID_t  ,
DynamicTypeMap   
)

◆ OPENDDS_MAP() [3/4]

typedef OpenDDS::XTypes::TypeLookupService::OPENDDS_MAP ( TypeIdentifier  ,
TypeIdentifierWithSizeSeq   
)
private

For dependencies of local types.

◆ OPENDDS_MAP() [4/4]

typedef OpenDDS::XTypes::TypeLookupService::OPENDDS_MAP ( TypeIdentifier  ,
TypeIdentifier   
)
private

Mapping from complete to minimal TypeIdentifiers of dependencies of remote types.

◆ OPENDDS_MAP_CMP()

typedef OpenDDS::XTypes::TypeLookupService::OPENDDS_MAP_CMP ( DDS::BuiltinTopicKey_t  ,
TypeInformation  ,
DCPS::BuiltinTopicKey_tKeyLessThan   
)
private

Map from BuiltinTopicKey_t of remote endpoint to its TypeInformation.

◆ remove_guid_from_dynamic_map()

void OpenDDS::XTypes::TypeLookupService::remove_guid_from_dynamic_map ( const DCPS::GUID_t guid)

Definition at line 1164 of file TypeLookupService.cpp.

References ACE_DEBUG, OpenDDS::DCPS::DCPS_debug_level, LM_DEBUG, and OpenDDS::DCPS::to_string().

1165 {
1167  const GuidTypeMap::iterator g_found = gt_map_.find(guid);
1168  if (g_found != gt_map_.end()) {
1169  for (DynamicTypeMap::const_iterator pos2 = g_found->second.begin(), limit2 = g_found->second.end(); pos2 != limit2; ++pos2) {
1170  pos2->second->clear();
1171  }
1172  gt_map_.erase(g_found);
1173  if (DCPS::DCPS_debug_level >= 4) {
1174  ACE_DEBUG((LM_DEBUG, "(%P|%t) TypeLookupService::remove_guid_from_dynamic_map: ",
1175  "Alerted to removal of %C, removing GUID from GuidTypeMap.\n", DCPS::to_string(guid).c_str()));
1176  }
1177  }
1178 }
#define ACE_DEBUG(X)
const char * to_string(MessageId value)
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30

◆ set_type_object_defaults()

bool OpenDDS::XTypes::TypeLookupService::set_type_object_defaults ( TypeObject to)
private

Definition at line 292 of file TypeLookupService.cpp.

References ACE_ERROR, OpenDDS::XTypes::CompleteBitmaskType::bitmask_flags, OpenDDS::XTypes::MinimalBitmaskType::bitmask_flags, OpenDDS::XTypes::CompleteTypeObject::bitmask_type, OpenDDS::XTypes::MinimalTypeObject::bitmask_type, OpenDDS::XTypes::TypeObject::complete, OpenDDS::XTypes::CompleteEnumeratedType::enum_flags, OpenDDS::XTypes::MinimalEnumeratedType::enum_flags, OpenDDS::XTypes::CompleteTypeObject::enumerated_type, OpenDDS::XTypes::MinimalTypeObject::enumerated_type, OpenDDS::DCPS::LogLevel::Error, OpenDDS::XTypes::IS_APPENDABLE, OpenDDS::XTypes::IS_FINAL, OpenDDS::XTypes::IS_MUTABLE, OpenDDS::XTypes::CompleteTypeObject::kind, OpenDDS::XTypes::MinimalTypeObject::kind, LM_ERROR, LM_WARNING, OpenDDS::DCPS::log_level, OpenDDS::XTypes::TypeObject::minimal, OpenDDS::XTypes::CompleteStructType::struct_flags, OpenDDS::XTypes::MinimalStructType::struct_flags, OpenDDS::XTypes::CompleteTypeObject::struct_type, OpenDDS::XTypes::MinimalTypeObject::struct_type, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::TypeFlagMinimalMask, OpenDDS::XTypes::CompleteUnionType::union_flags, OpenDDS::XTypes::MinimalUnionType::union_flags, OpenDDS::XTypes::CompleteTypeObject::union_type, OpenDDS::XTypes::MinimalTypeObject::union_type, and OpenDDS::DCPS::LogLevel::Warning.

293 {
294  switch (to.minimal.kind) {
295  case TK_STRUCTURE:
296  {
298  if (!(flags == IS_FINAL || flags == IS_APPENDABLE || flags == IS_MUTABLE)) {
300  ACE_ERROR((LM_ERROR,
301  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
302  "Invalid extensibility kind in TK_STRUCTURE\n"));
303  }
304  return false;
305  }
306  }
307  break;
308  case TK_UNION:
309  {
311  if (!(flags == IS_FINAL || flags == IS_APPENDABLE || flags == IS_MUTABLE)) {
313  ACE_ERROR((LM_ERROR,
314  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
315  "Invalid extensibility kind in TK_UNION\n"));
316  }
317  return false;
318  }
319  }
320  break;
321  case TK_ENUM:
322  {
324  // flags == 0 is for backwards compatibility.
325  if (!(flags == 0 || flags == IS_FINAL || flags == IS_APPENDABLE)) {
327  ACE_ERROR((LM_ERROR,
328  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
329  "Invalid extensibility kind in TK_ENUM\n"));
330  }
331  return false;
332  }
333  if (flags == 0 && DCPS::log_level >= DCPS::LogLevel::Warning) {
334  ACE_ERROR((LM_WARNING,
335  "(%P|%t) WARNING: TypeLookupService::set_type_object_defaults: "
336  "Zero extensibility flags in TK_ENUM\n"));
337  }
338  }
339  break;
340  case TK_BITMASK:
341  {
343  if (!(flags == IS_FINAL || flags == IS_APPENDABLE)) {
345  ACE_ERROR((LM_ERROR,
346  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
347  "Invalid extensibility kind in TK_BITMASK\n"));
348  }
349  return false;
350  }
351  }
352  break;
353  default:
354  break;
355  }
356 
357  switch (to.complete.kind) {
358  case TK_STRUCTURE:
359  {
361  if (!(flags == IS_FINAL || flags == IS_APPENDABLE || flags == IS_MUTABLE)) {
363  ACE_ERROR((LM_ERROR,
364  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
365  "Invalid extensibility kind in TK_STRUCTURE\n"));
366  }
367  return false;
368  }
369  }
370  break;
371  case TK_UNION:
372  {
374  if (!(flags == IS_FINAL || flags == IS_APPENDABLE || flags == IS_MUTABLE)) {
376  ACE_ERROR((LM_ERROR,
377  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
378  "Invalid extensibility kind in TK_UNION\n"));
379  }
380  return false;
381  }
382  }
383  break;
384  case TK_ENUM:
385  {
387  // flags == 0 is for backwards compatibility.
388  if (!(flags == 0 || flags == IS_FINAL || flags == IS_APPENDABLE)) {
390  ACE_ERROR((LM_ERROR,
391  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
392  "Invalid extensibility kind in TK_ENUM\n"));
393  }
394  return false;
395  }
396  if (flags == 0 && DCPS::log_level >= DCPS::LogLevel::Warning) {
397  ACE_ERROR((LM_WARNING,
398  "(%P|%t) WARNING: TypeLookupService::set_type_object_defaults: "
399  "Zero extensibility flags in TK_ENUM\n"));
400  }
401  }
402  break;
403  case TK_BITMASK:
404  {
406  if (!(flags == IS_FINAL || flags == IS_APPENDABLE)) {
408  ACE_ERROR((LM_ERROR,
409  "(%P|%t) ERROR: TypeLookupService::set_type_object_defaults: "
410  "Invalid extensibility kind in TK_BITMASK\n"));
411  }
412  return false;
413  }
414  }
415  break;
416  default:
417  break;
418  }
419 
420  return true;
421 }
OpenDDS_Dcps_Export LogLevel log_level
CompleteTypeObject complete
Definition: TypeObject.h:3243
#define ACE_ERROR(X)
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
const TypeFlag IS_FINAL
Definition: TypeObject.h:400
MinimalEnumeratedType enumerated_type
Definition: TypeObject.h:3135
const TypeFlag IS_APPENDABLE
Definition: TypeObject.h:401
const TypeFlag IS_MUTABLE
Definition: TypeObject.h:402
const TypeFlag TypeFlagMinimalMask
Definition: TypeObject.h:417
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
CompleteBitmaskType bitmask_type
Definition: TypeObject.h:2986
const TypeKind TK_ENUM
Definition: TypeObject.h:238
MinimalTypeObject minimal
Definition: TypeObject.h:3244
CompleteEnumeratedType enumerated_type
Definition: TypeObject.h:2985
const TypeKind TK_UNION
Definition: TypeObject.h:244
ACE_CDR::UShort TypeFlag
Definition: TypeObject.h:399

◆ type_identifier_to_dynamic()

DDS::DynamicType_ptr OpenDDS::XTypes::TypeLookupService::type_identifier_to_dynamic ( const TypeIdentifier ti,
const DCPS::GUID_t guid 
)

Definition at line 858 of file TypeLookupService.cpp.

References ACE_DEBUG, ACE_ERROR, ACE_TEXT(), OpenDDS::XTypes::TypeObject::complete, OpenDDS::DCPS::DCPS_debug_level, OpenDDS::XTypes::EK_COMPLETE, OpenDDS::XTypes::EK_MINIMAL, OpenDDS::XTypes::TypeIdentifier::kind(), OpenDDS::XTypes::TypeObject::kind, LM_ERROR, LM_WARNING, OpenDDS::XTypes::DynamicTypeImpl::set_descriptor(), OpenDDS::XTypes::TI_PLAIN_ARRAY_LARGE, OpenDDS::XTypes::TI_PLAIN_ARRAY_SMALL, OpenDDS::XTypes::TI_PLAIN_MAP_LARGE, OpenDDS::XTypes::TI_PLAIN_MAP_SMALL, OpenDDS::XTypes::TI_PLAIN_SEQUENCE_LARGE, OpenDDS::XTypes::TI_PLAIN_SEQUENCE_SMALL, OpenDDS::XTypes::TI_STRING16_LARGE, OpenDDS::XTypes::TI_STRING16_SMALL, OpenDDS::XTypes::TI_STRING8_LARGE, OpenDDS::XTypes::TI_STRING8_SMALL, OpenDDS::XTypes::TI_STRONGLY_CONNECTED_COMPONENT, OpenDDS::XTypes::TK_ANNOTATION, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT32, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_NONE, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

859 {
860  if (ti.kind() == TK_NONE) {
861  if (DCPS::DCPS_debug_level >= 1) {
862  ACE_DEBUG((LM_WARNING, ACE_TEXT("(%P|%t) TypeLookupService::type_identifier_to_dynamic -")
863  ACE_TEXT(" Encountered TK_NONE: returning nil Dynamic Type\n")));
864  }
865  return 0;
866  }
867  DynamicTypeImpl* dt = new DynamicTypeImpl();
868  DDS::DynamicType_var dt_var = dt;
869  DDS::TypeDescriptor_var td = new TypeDescriptorImpl();
870  {
872  const GuidTypeMap::iterator guid_found = gt_map_.find(guid);
873  if (guid_found != gt_map_.end()) {
874  const DynamicTypeMap::const_iterator ti_found = guid_found->second.find(ti);
875  if (ti_found != guid_found->second.end()) {
876  return DDS::DynamicType::_duplicate(ti_found->second);
877  } else {
878  guid_found->second.insert(std::make_pair(ti, dt_var));
879  }
880  } else {
881  DynamicTypeMap dt_map;
882  dt_map.insert(std::make_pair(ti, dt_var));
883  gt_map_.insert(std::make_pair(guid, dt_map));
884  }
885  }
886 
887  switch (ti.kind()) {
888  case TK_BOOLEAN:
889  td->kind(TK_BOOLEAN);
890  td->name("Boolean");
891  dt->set_descriptor(td);
892  break;
893  case TK_BYTE:
894  td->kind(TK_BYTE);
895  td->name("Byte");
896  dt->set_descriptor(td);
897  break;
898  case TK_INT16:
899  td->kind(TK_INT16);
900  td->name("Int16");
901  dt->set_descriptor(td);
902  break;
903  case TK_INT32:
904  td->kind(TK_INT32);
905  td->name("Int32");
906  dt->set_descriptor(td);
907  break;
908  case TK_INT64:
909  td->kind(TK_INT64);
910  td->name("Int64");
911  dt->set_descriptor(td);
912  break;
913  case TK_UINT16:
914  td->kind(TK_UINT16);
915  td->name("UInt16");
916  dt->set_descriptor(td);
917  break;
918  case TK_UINT32:
919  td->kind(TK_UINT32);
920  td->name("UInt32");
921  dt->set_descriptor(td);
922  break;
923  case TK_UINT64:
924  td->kind(TK_UINT64);
925  td->name("UInt64");
926  dt->set_descriptor(td);
927  break;
928  case TK_FLOAT32:
929  td->kind(TK_FLOAT32);
930  td->name("Float32");
931  dt->set_descriptor(td);
932  break;
933  case TK_FLOAT64:
934  td->kind(TK_FLOAT64);
935  td->name("Float64");
936  dt->set_descriptor(td);
937  break;
938  case TK_FLOAT128:
939  td->kind(TK_FLOAT128);
940  td->name("Float128");
941  dt->set_descriptor(td);
942  break;
943  case TK_INT8:
944  td->kind(TK_INT8);
945  td->name("Int8");
946  dt->set_descriptor(td);
947  break;
948  case TK_UINT8:
949  td->kind(TK_UINT8);
950  td->name("UInt8");
951  dt->set_descriptor(td);
952  break;
953  case TK_CHAR8:
954  td->kind(TK_CHAR8);
955  td->name("Char8");
956  dt->set_descriptor(td);
957  break;
958  case TK_CHAR16:
959  td->kind(TK_CHAR16);
960  td->name("Char16");
961  dt->set_descriptor(td);
962  break;
963  case TI_STRING8_SMALL: {
964  td->kind(TK_STRING8);
965  td->name("String8");
966  td->bound().length(1);
967  td->bound()[0] = ti.string_sdefn().bound;
968  const DDS::DynamicType_var temp = type_identifier_to_dynamic(TypeIdentifier(TK_CHAR8), guid);
969  td->element_type(temp);
970  dt->set_descriptor(td);
971  }
972  break;
973  case TI_STRING8_LARGE: {
974  td->kind(TK_STRING8);
975  td->name("String8");
976  td->bound().length(1);
977  td->bound()[0] = ti.string_ldefn().bound;
978  const DDS::DynamicType_var temp = type_identifier_to_dynamic(TypeIdentifier(TK_CHAR8), guid);
979  td->element_type(temp);
980  dt->set_descriptor(td);
981  }
982  break;
983  case TI_STRING16_SMALL: {
984  td->kind(TK_STRING16);
985  td->name("WString16");
986  td->bound().length(1);
987  td->bound()[0] = ti.string_sdefn().bound;
988  const DDS::DynamicType_var temp = type_identifier_to_dynamic(TypeIdentifier(TK_CHAR16), guid);
989  td->element_type(temp);
990  dt->set_descriptor(td);
991  }
992  break;
993  case TI_STRING16_LARGE: {
994  td->kind(TK_STRING16);
995  td->name("WString16");
996  td->bound().length(1);
997  td->bound()[0] = ti.string_ldefn().bound;
998  const DDS::DynamicType_var temp = type_identifier_to_dynamic(TypeIdentifier(TK_CHAR16), guid);
999  td->element_type(temp);
1000  dt->set_descriptor(td);
1001  }
1002  break;
1003  case TI_PLAIN_SEQUENCE_SMALL: {
1004  td->kind(TK_SEQUENCE);
1005  td->name("Sequence");
1006  td->bound().length(1);
1007  td->bound()[0] = ti.seq_sdefn().bound;
1008  const DDS::DynamicType_var temp = type_identifier_to_dynamic(*ti.seq_sdefn().element_identifier, guid);
1009  td->element_type(temp);
1010  dt->set_descriptor(td);
1011  }
1012  break;
1013  case TI_PLAIN_SEQUENCE_LARGE: {
1014  td->kind(TK_SEQUENCE);
1015  td->name("Sequence");
1016  td->bound().length(1);
1017  td->bound()[0] = ti.seq_ldefn().bound;
1018  const DDS::DynamicType_var temp = type_identifier_to_dynamic(*ti.seq_ldefn().element_identifier, guid);
1019  td->element_type(temp);
1020  dt->set_descriptor(td);
1021  }
1022  break;
1023  case TI_PLAIN_ARRAY_SMALL: {
1024  td->kind(TK_ARRAY);
1025  td->name("Array");
1026  td->bound().length(ti.array_sdefn().array_bound_seq.length());
1027  for (ACE_CDR::ULong i = 0; i< td->bound().length(); ++i) {
1028  td->bound()[i] = ti.array_sdefn().array_bound_seq[i];
1029  }
1030  const DDS::DynamicType_var temp = type_identifier_to_dynamic(*ti.array_sdefn().element_identifier, guid);
1031  td->element_type(temp);
1032  dt->set_descriptor(td);
1033  }
1034  break;
1035  case TI_PLAIN_ARRAY_LARGE: {
1036  td->kind(TK_ARRAY);
1037  td->name("Array");
1038  DDS::BoundSeq bounds;
1039  bounds.length(ti.array_ldefn().array_bound_seq.length());
1040  for (unsigned int idx = 0; idx != bounds.length(); ++idx) {
1041  bounds[idx] = ti.array_ldefn().array_bound_seq[idx];
1042  }
1043  td->bound(bounds);
1044  const DDS::DynamicType_var temp = type_identifier_to_dynamic(*ti.array_ldefn().element_identifier, guid);
1045  td->element_type(temp);
1046  dt->set_descriptor(td);
1047  }
1048  break;
1049  case TI_PLAIN_MAP_SMALL: {
1050  td->kind(TK_MAP);
1051  td->name("Map");
1052  td->bound().length(1);
1053  td->bound()[0] = ti.map_sdefn().bound;
1054  const DDS::DynamicType_var el_temp = type_identifier_to_dynamic(*ti.map_sdefn().element_identifier, guid);
1055  td->element_type(el_temp);
1056  const DDS::DynamicType_var key_temp = type_identifier_to_dynamic(*ti.map_sdefn().key_identifier, guid);
1057  td->key_element_type(key_temp);
1058  dt->set_descriptor(td);
1059  }
1060  break;
1061  case TI_PLAIN_MAP_LARGE: {
1062  td->kind(TK_MAP);
1063  td->name("Map");
1064  td->bound().length(1);
1065  td->bound()[0] = ti.map_ldefn().bound;
1066  const DDS::DynamicType_var el_temp = type_identifier_to_dynamic(*ti.map_ldefn().element_identifier, guid);
1067  td->element_type(el_temp);
1068  const DDS::DynamicType_var key_temp = type_identifier_to_dynamic(*ti.map_ldefn().key_identifier, guid);
1069  td->key_element_type(key_temp);
1070  dt->set_descriptor(td);
1071  }
1072  break;
1074  case EK_COMPLETE:
1075  {
1076  const TypeObject& to = get_type_object_i(ti);
1077  if (to.kind == TK_NONE) {
1078  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) TypeLookupService::type_identifier_to_dynamic -")
1079  ACE_TEXT(" get_type_object_i returned TK_NONE\n")));
1080  } else {
1081  complete_to_dynamic_i(dt, to.complete, guid);
1082  }
1083  }
1084  break;
1085  case EK_MINIMAL:
1086  if (DCPS::DCPS_debug_level >= 1) {
1087  ACE_DEBUG((LM_WARNING, ACE_TEXT("(%P|%t) TypeLookupService::type_identifier_to_dynamic -")
1088  ACE_TEXT(" Encountered EK_MINIMAL: returning nil Dynamic Type\n")));
1089  }
1090  break;
1091  case TK_ANNOTATION:
1092  td->kind(TK_ANNOTATION);
1093  td->name("Annotation");
1094  dt->set_descriptor(td);
1095  break;
1096  }
1097 
1098  return dt_var._retn();
1099 }
#define ACE_DEBUG(X)
CompleteTypeObject complete
Definition: TypeObject.h:3243
#define ACE_ERROR(X)
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeIdentifierKind TI_STRONGLY_CONNECTED_COMPONENT
Definition: TypeObject.h:269
const TypeIdentifierKind TI_STRING16_LARGE
Definition: TypeObject.h:258
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeIdentifierKind TI_STRING8_LARGE
Definition: TypeObject.h:256
const EquivalenceKind EK_MINIMAL
Definition: TypeObject.h:205
void set_descriptor(DDS::TypeDescriptor *descriptor)
const TypeIdentifierKind TI_PLAIN_ARRAY_LARGE
Definition: TypeObject.h:264
const TypeKind TK_INT32
Definition: TypeObject.h:217
DDS::DynamicType_ptr type_identifier_to_dynamic(const TypeIdentifier &ti, const DCPS::GUID_t &guid)
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeIdentifierKind TI_PLAIN_SEQUENCE_LARGE
Definition: TypeObject.h:261
const TypeIdentifierKind TI_STRING16_SMALL
Definition: TypeObject.h:257
ACE_CDR::Octet kind() const
Definition: TypeObject.h:748
const TypeKind TK_NONE
Definition: TypeObject.h:213
const TypeObject & get_type_object_i(const TypeIdentifier &type_id) const
const TypeIdentifierKind TI_PLAIN_ARRAY_SMALL
Definition: TypeObject.h:263
const TypeKind TK_UINT16
Definition: TypeObject.h:219
sequence< unsigned long > BoundSeq
const TypeIdentifierKind TI_PLAIN_MAP_LARGE
Definition: TypeObject.h:267
void complete_to_dynamic_i(DynamicTypeImpl *dt, const CompleteTypeObject &cto, const DCPS::GUID_t &guid)
const TypeIdentifierKind TI_PLAIN_MAP_SMALL
Definition: TypeObject.h:266
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_STRING8
Definition: TypeObject.h:231
ACE_UINT32 ULong
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_TEXT("TCP_Factory")
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeIdentifierKind TI_PLAIN_SEQUENCE_SMALL
Definition: TypeObject.h:260
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250
const EquivalenceKind EK_COMPLETE
Definition: TypeObject.h:206
const TypeIdentifierKind TI_STRING8_SMALL
Definition: TypeObject.h:255

◆ type_object_in_cache()

bool OpenDDS::XTypes::TypeLookupService::type_object_in_cache ( const TypeIdentifier ti) const

Definition at line 1111 of file TypeLookupService.cpp.

References ACE_GUARD_RETURN.

1112 {
1114  return type_map_.find(ti) != type_map_.end();
1115 }
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
TypeMap type_map_
Contains both minimal and complete type mapping.

◆ update_type_identifier_map()

void OpenDDS::XTypes::TypeLookupService::update_type_identifier_map ( const TypeIdentifierPairSeq tid_pairs)

For converting between complete to minimal TypeObject of remote types

Definition at line 158 of file TypeLookupService.cpp.

References OpenDDS::XTypes::Sequence< T >::length(), OpenDDS::XTypes::TypeIdentifierPair::type_identifier1, and OpenDDS::XTypes::TypeIdentifierPair::type_identifier2.

159 {
160  for (ACE_CDR::ULong i = 0; i < tid_pairs.length(); ++i) {
161  const TypeIdentifierPair& pair = tid_pairs[i];
162  complete_to_minimal_ti_map_.insert(std::make_pair(pair.type_identifier1, pair.type_identifier2));
163  }
164 }
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
TypeIdentifierMap complete_to_minimal_ti_map_
ACE_UINT32 ULong

Member Data Documentation

◆ complete_to_minimal_ti_map_

TypeIdentifierMap OpenDDS::XTypes::TypeLookupService::complete_to_minimal_ti_map_
private

Definition at line 95 of file TypeLookupService.h.

◆ gt_map_

GuidTypeMap OpenDDS::XTypes::TypeLookupService::gt_map_
private

Definition at line 118 of file TypeLookupService.h.

◆ mutex_

ACE_Thread_Mutex OpenDDS::XTypes::TypeLookupService::mutex_
mutableprivate

Definition at line 89 of file TypeLookupService.h.

◆ to_empty_

TypeObject OpenDDS::XTypes::TypeLookupService::to_empty_
private

Definition at line 91 of file TypeLookupService.h.

◆ type_dependencies_map_

TypeIdentifierWithSizeSeqMap OpenDDS::XTypes::TypeLookupService::type_dependencies_map_
private

Definition at line 87 of file TypeLookupService.h.

◆ type_info_empty_

TypeInformation OpenDDS::XTypes::TypeLookupService::type_info_empty_
private

Definition at line 124 of file TypeLookupService.h.

◆ type_info_map_

TypeInformationMap OpenDDS::XTypes::TypeLookupService::type_info_map_
private

Definition at line 123 of file TypeLookupService.h.

◆ type_map_

TypeMap OpenDDS::XTypes::TypeLookupService::type_map_
private

Contains both minimal and complete type mapping.

Definition at line 83 of file TypeLookupService.h.


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