214 switch (tia.
kind()) {
343 for (
unsigned i = 0; i < num_members; ++i) {
357 MatchedSet matched_members;
361 ACE_CDR::ULong name_a = (h_a[0] << 24) | (h_a[1] << 16) | (h_a[2] << 8) | (h_a[3]);
365 ACE_CDR::ULong name_b = (h_b[0] << 24) | (h_b[1] << 16) | (h_b[2] << 8) | (h_b[3]);
368 if ((name_a == name_b && id_a != id_b) || (id_a == id_b && name_a != name_b)) {
370 }
else if (name_a == name_b && id_a == id_b) {
375 }
else if (id_a == id_b) {
385 if (matched_members.size() == 0) {
396 for (
size_t i = 0; i < matched_members.size(); ++i) {
400 bool aggregated_type_matched =
false;
405 aggregated_type_matched =
true;
410 aggregated_type_matched =
true;
413 if (aggregated_type_matched) {
420 }
else if (!
assignable(matched_members[i].first->common.member_type_id,
421 matched_members[i].second->common.member_type_id)) {
434 for (
size_t j = 0; j < matched_members.size(); ++j) {
435 if (
id == matched_members[j].first->common.member_id) {
447 for (
size_t j = 0; j < matched_members.size(); ++j) {
448 if (
id == matched_members[j].first->common.member_id) {
464 for (
size_t j = 0; j < matched_members.size(); ++j) {
465 if (
id == matched_members[j].second->common.member_id) {
477 for (
size_t j = 0; j < matched_members.size(); ++j) {
478 if (
id == matched_members[j].second->common.member_id) {
491 for (
size_t i = 0; i < matched_members.size(); ++i) {
499 if (bound_a < bound_b) {
508 for (
size_t i = 0; i < matched_members.size(); ++i) {
511 if ((flags &
IS_KEY) == IS_KEY &&
520 if (EK_MINIMAL == base_b.
kind()) {
533 for (
size_t i = 0; i < matched_members.size(); ++i) {
542 if (bound_a < bound_b) {
546 if (!
get_map_bound(bound_a, matched_members[i].first->common)) {
549 if (bound_a < bound_b) {
559 for (
size_t i = 0; i < matched_members.size(); ++i) {
565 bool type_matched =
false;
594 for (
unsigned j = 0; j < mseq_b.
length(); ++j) {
596 for (
unsigned k = 0; k < mseq_a.
length(); ++k) {
598 bool matched =
false;
599 for (
unsigned p = 0; p < labels_b.
length(); ++p) {
600 for (
unsigned q = 0; q < labels_a.
length(); ++q) {
601 if (labels_b[p] == labels_a[q]) {
610 (!ret_a && !ret_b && !
assignable(tia, tib))) {
673 labels_set_a.insert(labels_a.
members.begin(), labels_a.
members.end());
681 for (
unsigned j = 0; j < labels_b.
length(); ++j) {
682 if (labels_set_a.find(labels_b.
members[j]) == labels_set_a.end()) {
685 labels_set_a.erase(labels_b.
members[j]);
688 if (labels_set_a.size() > 0) {
700 for (
unsigned j = 0; j < labels_b.
length(); ++j) {
701 if (labels_set_a.find(labels_b[j]) != labels_set_a.end()) {
725 if ((((flags_a &
IS_KEY) == IS_KEY) && ((flags_b & IS_KEY) != IS_KEY)) ||
726 (((flags_a &
IS_KEY) != IS_KEY) && ((flags_b &
IS_KEY) == IS_KEY))) {
738 id_to_name_a[id] =
name;
739 name_to_id_a[
name] = id;
746 if (id_to_name_a.find(
id) != id_to_name_a.end() &&
747 id_to_name_a[id] !=
name) {
751 if (name_to_id_a.find(name) != name_to_id_a.end() &&
752 name_to_id_a[
name] != id) {
776 bool matched =
false;
777 for (
unsigned k = 0; k < label_seq_b.
length(); ++k) {
778 for (
unsigned t = 0; t < label_seq_a.
length(); ++t) {
803 bool matched =
false;
804 for (
unsigned k = 0; k < label_seq_a.
length(); ++k) {
805 for (
unsigned t = 0; t < label_seq_b.
length(); ++t) {
806 if (label_seq_a[k] == label_seq_b[t]) {
914 *tb.seq_sdefn().element_identifier);
917 *tb.seq_ldefn().element_identifier);
952 for (
unsigned i = 0; i < bounds_a.
members.size(); ++i) {
970 const SBoundSeq& bounds_b = tb.array_sdefn().array_bound_seq;
975 for (
unsigned i = 0; i < bounds_a.
members.size(); ++i) {
976 if (bounds_a.
members[i] != static_cast<LBound>(bounds_b.
members[i])) {
982 *tb.array_sdefn().element_identifier);
984 const LBoundSeq& bounds_b = tb.array_ldefn().array_bound_seq;
989 for (
unsigned i = 0; i < bounds_a.
members.size(); ++i) {
995 *tb.array_ldefn().element_identifier);
1037 *tb.map_sdefn().key_identifier) &&
1039 *tb.map_sdefn().element_identifier);
1042 *tb.map_ldefn().key_identifier) &&
1044 *tb.map_ldefn().element_identifier);
1077 if (ta_ext != tb_ext &&
1079 ta_ext != 0 && tb_ext != 0) {
1092 for (
size_t i = 0; i < size_a; ++i) {
1094 ACE_CDR::ULong key_a = (h[0] << 24) | (h[1] << 16) | (h[2] << 8) | (h[3]);
1100 if (size_a != size_b) {
1104 for (
size_t i = 0; i < size_b; ++i) {
1106 ACE_CDR::ULong key_b = (h[0] << 24) | (h[1] << 16) | (h[2] << 8) | (h[3]);
1109 if (ta_name_to_value.find(key_b) == ta_name_to_value.end() ||
1116 for (
size_t i = 0; i < size_b; ++i) {
1118 ACE_CDR::ULong key_b = (h[0] << 24) | (h[1] << 16) | (h[2] << 8) | (h[3]);
1119 if (ta_name_to_value.find(key_b) != ta_name_to_value.end() &&
1126 for (
size_t i = 0; i < size_a; ++i) {
1129 ACE_CDR::ULong name_a = (h[0] << 24) | (h[1] << 16) | (h[2] << 8) | (h[3]);
1130 ta_value_to_name[value_a] = name_a;
1134 for (
size_t i = 0; i < size_b; ++i) {
1137 ACE_CDR::ULong name_b = (h[0] << 24) | (h[1] << 16) | (h[2] << 8) | (h[3]);
1138 if (ta_value_to_name.find(value_b) != ta_value_to_name.end() &&
1139 ta_value_to_name[value_b] != name_b) {
1195 return 1 <= ta_bit_bound && ta_bit_bound <= 8;
1197 return 9 <= ta_bit_bound && ta_bit_bound <= 16;
1199 return 17 <= ta_bit_bound && ta_bit_bound <= 32;
1201 return 33 <= ta_bit_bound && ta_bit_bound <= 64;
1271 return 1 <= bit_bound && bit_bound <= 8;
1273 return 9 <= bit_bound && bit_bound <= 16;
1275 return 17 <= bit_bound && bit_bound <= 32;
1277 return 33 <= bit_bound && bit_bound <= 64;
1332 *tb.seq_sdefn().element_identifier);
1335 *tb.seq_sdefn().element_identifier);
1340 *tb.seq_ldefn().element_identifier);
1343 *tb.seq_ldefn().element_identifier);
1399 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1406 *tb.array_sdefn().element_identifier);
1413 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1414 if (bounds_a.
members[i] != static_cast<LBound>(bounds_b.
members[i])) {
1420 *tb.array_sdefn().element_identifier);
1430 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1431 if (static_cast<LBound>(bounds_a.
members[i]) != bounds_b.
members[i]) {
1437 *tb.array_ldefn().element_identifier);
1444 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1451 *tb.array_ldefn().element_identifier);
1485 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1486 if (static_cast<LBound>(bounds_a.
members[i]) != bounds_b.
members[i]) {
1499 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1523 *tb.map_sdefn().key_identifier) &&
1525 *tb.map_sdefn().element_identifier);
1528 *tb.map_sdefn().key_identifier) &&
1530 *tb.map_sdefn().element_identifier);
1535 *tb.map_ldefn().key_identifier) &&
1537 *tb.map_ldefn().element_identifier);
1540 *tb.map_ldefn().key_identifier) &&
1542 *tb.map_ldefn().element_identifier);
1609 switch (tia.
kind()) {
1632 if (tib.
kind() == tia.
kind() && tib.string_sdefn().bound == tia.string_sdefn().bound) {
1639 if (tib.
kind() == tia.
kind() && tib.string_ldefn().bound == tia.string_ldefn().bound) {
1646 tib.seq_sdefn().bound == tia.seq_sdefn().bound &&
1648 *tib.seq_sdefn().element_identifier)) {
1655 tib.seq_ldefn().bound == tia.seq_ldefn().bound &&
1657 *tib.seq_ldefn().element_identifier)) {
1664 const SBoundSeq& bounds_a = tia.array_sdefn().array_bound_seq;
1665 const SBoundSeq& bounds_b = tia.array_sdefn().array_bound_seq;
1669 bool equal_bounds =
true;
1670 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1672 equal_bounds =
false;
1676 if (!equal_bounds) {
1680 *tib.array_sdefn().element_identifier)) {
1688 const LBoundSeq& bounds_a = tia.array_ldefn().array_bound_seq;
1689 const LBoundSeq& bounds_b = tib.array_ldefn().array_bound_seq;
1693 bool equal_bounds =
true;
1694 for (
size_t i = 0; i < bounds_a.
members.size(); ++i) {
1696 equal_bounds =
false;
1700 if (!equal_bounds) {
1704 *tib.array_ldefn().element_identifier)) {
1712 tib.map_sdefn().bound == tia.map_sdefn().bound &&
1714 *tib.map_sdefn().key_identifier) &&
1716 *tib.map_sdefn().element_identifier)) {
1723 tib.map_ldefn().bound == tia.map_ldefn().bound &&
1725 *tib.map_ldefn().key_identifier) &&
1727 *tib.map_ldefn().element_identifier)) {
1734 tib.sc_component_id().scc_length == tia.sc_component_id().scc_length &&
1735 tib.sc_component_id().sc_component_id.
kind ==
1736 tia.sc_component_id().sc_component_id.
kind) {
1737 const EquivalenceHash& ha = tia.sc_component_id().sc_component_id.hash;
1738 const EquivalenceHash& hb = tib.sc_component_id().sc_component_id.hash;
1739 bool equal_hash =
true;
1740 for (
size_t i = 0; i < 14; ++i) {
1741 if (ha[i] != hb[i]) {
1755 bool equal_hash =
true;
1756 for (
size_t i = 0; i < 14; ++i) {
1757 if (tia.equivalence_hash()[i] != tib.equivalence_hash()[i]) {
1780 switch (ti.
kind()) {
1802 return is_delimited(*ti.seq_sdefn().element_identifier);
1804 return is_delimited(*ti.seq_ldefn().element_identifier);
1806 return is_delimited(*ti.array_sdefn().element_identifier);
1808 return is_delimited(*ti.array_ldefn().element_identifier);
1831 switch (tobj.
kind) {
1861 if ((flags &
IS_FINAL) == IS_FINAL) {
1863 }
else if ((flags &
IS_MUTABLE) == IS_MUTABLE) {
1885 for (
size_t i = 0; i < mseq.
members.size(); ++i) {
1909 bool found_key =
false;
1910 for (
size_t i = 0; i < mseq.
members.size(); ++i) {
1920 for (
size_t i = 0; i < mseq.
members.size(); ++i) {
1928 for (
size_t i = 0; i < mseq.
members.size(); ++i) {
1978 switch (base.
kind()) {
2026 for (
size_t j = 0; j < literals_b.
members.size(); ++j) {
2028 ACE_CDR::ULong key_b = (h_b[0] << 24) | (h_b[1] << 16) | (h_b[2] << 8) | (h_b[3]);
2030 for (
size_t k = 0; k < literals_a->
members.size(); ++k) {
2032 ACE_CDR::ULong key_a = (h_a[0] << 24) | (h_a[1] << 16) | (h_a[2] << 8) | (h_a[3]);
2033 if (key_a == key_b) {
2053 bool is_sequence =
false;
2068 bound =
static_cast<LBound>(base.seq_sdefn().bound);
2071 bound = base.seq_ldefn().bound;
2093 bool is_map =
false;
2108 bound =
static_cast<LBound>(base.map_sdefn().bound);
2111 bound = base.map_ldefn().bound;
2133 bool is_string =
false;
2139 bound =
static_cast<LBound>(base.string_sdefn().bound);
2142 bound = base.string_ldefn().bound;
2164 bool is_struct =
false;
2192 bool is_union =
false;
TypeIdentifier related_type
bool assignable_extended(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be a future extension type kind. The second type must not be TK_ALIAS.
const TypeKind TK_SEQUENCE
MinimalEnumeratedType enumerated_type
TypeIdentifier member_type_id
MemberFlag UnionMemberFlag
bool is_delimited_with_flags(TypeFlag flags) const
MinimalCollectionHeader header
const TypeKind TK_FLOAT128
const TypeIdentifierKind TI_STRING8_LARGE
const TypeFlag IS_MUTABLE
StructMemberFlag member_flags
bool get_sequence_bound(LBound &b, const CommonStructMember &m) const
Check whether a struct member is of sequence type and if so compute its bound into the first argument...
bool is_delimited(const TypeIdentifier &ti) const
Concept of delimited types (sub-clause 7.2.4.2)
TypeConsistencyAttributes type_consistency_
bool equal_type_id(const TypeIdentifier &tia, const TypeIdentifier &tib) const
Check whether two type identifiers are equal.
const TypeIdentifierKind TI_PLAIN_SEQUENCE_LARGE
const MinimalTypeObject & lookup_minimal(const TypeIdentifier &ti) const
bool get_union_member(const MinimalTypeObject *&ret, const CommonStructMember &m) const
Check if the second argument is of a union type and if so return its type object as the first argumen...
MinimalCollectionElement element
const MemberFlag IS_MUST_UNDERSTAND
ACE_CDR::Octet kind() const
bool assignable_enum(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_ENUM. The second type must not be TK_ALIAS.
void erase_key(MinimalTypeObject &type) const
Key-Erased type of an aggregated type T (struct or union) is constructed from T by removing the key d...
bool assignable_struct(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_STRUCTURE. The second type must not be TK_ALIAS.
MinimalEnumeratedLiteralSeq literal_seq
const TypeIdentifierKind TI_STRING16_LARGE
const TypeIdentifier & get_base_type(const MinimalTypeObject &type) const
The input must be of type TK_ALIAS Return the non-alias base type identifier of the input...
CommonCollectionElement common
const TypeIdentifierKind TI_STRING8_SMALL
CommonDiscriminatorMember common
bool assignable_array(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_ARRAY. The second type must not be TK_ALIAS.
bool strongly_assignable(const TypeIdentifier &ta, const TypeIdentifier &tb) const
If types T1 and T2 are equivalent using the MINIMAL relation, or alternatively if T1 is-assignable-fr...
bool assignable_plain_array(const TypeIdentifier &ta, const TypeIdentifier &tb) const
The first type must be a plain array type. The second type can be anything.
bool get_struct_member(const MinimalTypeObject *&ret, const CommonStructMember &m) const
Check if the second argument is of a struct type and if so return its type object as the first argume...
const EquivalenceKind EK_COMPLETE
MinimalAnnotationType annotation_type
const TypeIdentifierKind TI_PLAIN_MAP_LARGE
ACE_CDR::UShort MemberFlag
CommonCollectionHeader common
UnionDiscriminatorFlag member_flags
bool assignable_annotation(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_ANNOTATION. The second type must not be TK_ALIAS.
const TypeKind TK_BOOLEAN
const TypeIdentifierKind TI_PLAIN_MAP_SMALL
const TypeIdentifierKind TI_PLAIN_ARRAY_LARGE
const TypeIdentifierKind TI_PLAIN_ARRAY_SMALL
const TypeKind TK_BITMASK
bool assignable_sequence(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_SEQUENCE. The second type must not be TK_ALIAS.
MinimalDiscriminatorMember discriminator
CommonEnumeratedHeader common
bool get_map_bound(LBound &b, const CommonStructMember &m) const
Check whether a struct member is of map type and if so compute its bound into the first argument...
bool struct_rule_enum_key(const MinimalTypeObject &tb, const CommonStructMember &ma) const
The first argument must be TK_ENUM and is the type object of a key member of the containing struct...
MinimalUnionMemberSeq member_seq
bool assignable_union(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_UNION. The second type must not be TK_ALIAS.
const TypeKind TK_STRUCTURE
MinimalCollectionElement element
bool assignable(const TypeObject &ta, const TypeObject &tb) const
Both input type objects must be minimal.
typedef OPENDDS_SET(DynamicTypePtrPair) DynamicTypePtrPairSeen
Sequence & append(const T &member)
MinimalCollectionElement key
const TypeKind TK_FLOAT32
MinimalSequenceType sequence_type
ACE_CDR::Octet EquivalenceHash[14]
bool assignable_plain_map(const TypeIdentifier &ta, const TypeIdentifier &tb) const
The first type must be a plain map type. The second type can be anything.
void hold_key(MinimalTypeObject &type) const
Key-Holder type of an aggregated type T (struct or union) is constructed from T (sub-clause 7...
MinimalBitmaskHeader header
AnnotationTypeFlag annotation_flag
MinimalArrayType array_type
MinimalStructMemberSeq member_seq
MinimalCollectionElement element
bool get_string_bound(LBound &b, const CommonStructMember &m) const
Check whether the input struct member is of string type and if so compute its bound into the first ar...
const MemberFlag IS_OPTIONAL
MinimalCollectionHeader header
const TypeIdentifierKind TI_PLAIN_SEQUENCE_SMALL
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
const TypeKind TK_ANNOTATION
MinimalAliasType alias_type
MinimalUnionType union_type
MinimalStructType struct_type
const TypeFlag IS_APPENDABLE
bool assignable_alias(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
At least one input type object must be TK_ALIAS.
const EquivalenceKind EK_MINIMAL
const TypeIdentifierKind TI_STRING16_SMALL
bool assignable_bitmask(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_BITMASK. The second type must not be TK_ALIAS.
typedef OPENDDS_MAP(TypeIdentifier, TypeObject) TypeMap
const MemberFlag IS_DEFAULT
const TypeIdentifierKind TI_STRONGLY_CONNECTED_COMPONENT
bool assignable_map(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_MAP. The second type must not be TK_ALIAS.
UnionTypeFlag union_flags
bool assignable_plain_sequence(const TypeIdentifier &ta, const TypeIdentifier &tb) const
The first type must be a plain sequence type. The second type can be anything.
bool assignable_string(const TypeIdentifier &ta, const TypeIdentifier &tb) const
The first type must be a string type. The second type can be anything.
BitsetTypeFlag bitset_flags
bool assignable_primitive(const TypeIdentifier &ta, const TypeIdentifier &tb) const
The first type must be a primitive type. The second type can be anything.
The Internal API and Implementation of OpenDDS.
MinimalArrayHeader header
bool assignable_bitset(const MinimalTypeObject &ta, const MinimalTypeObject &tb) const
The first type must be TK_BITSET. The second type must not be TK_ALIAS.
ACE_CDR::ULong length() const
MinimalTypeObject minimal
const TypeKind TK_FLOAT64
MinimalBitsetType bitset_type
StructTypeFlag struct_flags
MinimalEnumeratedHeader header
ACE_CDR::Octet NameHash[4]
MinimalBitmaskType bitmask_type