8 #ifndef OPENDDS_SAFETY_PROFILE 27 switch (base_type->get_kind()) {
31 DDS::TypeDescriptor_var td;
53 const TypeKind tk = base_type->get_kind();
58 DDS::DynamicTypeMembersById_var members;
59 rc = base_type->get_all_members(members);
71 it != members_impl->
end(); ++it) {
72 DDS::MemberDescriptor_var md;
73 rc = it->second->get_descriptor(md);
78 DDS::DynamicType_ptr member_type = md->type();
87 ext = std::max(member_ext, ext);
108 DDS::DynamicType_ptr type, DDS::DynamicTypeMember_var& member)
120 MemberIdVec::iterator it =
ids.begin();
121 DDS::DynamicType_var current_type = DDS::DynamicType::_duplicate(type);
122 DDS::DynamicTypeMember_var current_member;
129 if (++it ==
ids.end()) {
133 DDS::MemberDescriptor_var md;
134 rc = current_member->get_descriptor(md);
143 member = current_member;
149 DDS::DynamicData_ptr data, DDS::DynamicData_var& container,
DDS::MemberId& member_id)
156 MemberIdVec::iterator it =
ids.begin();
157 DDS::DynamicData_var current_data = DDS::DynamicData::_duplicate(data);
160 if (++it ==
ids.end()) {
161 member_id = current_id;
165 DDS::ReturnCode_t rc = current_data->get_complex_value(current_data, current_id);
170 container = current_data._retn();
180 const MemberPath& base_path,
bool implied_all_check =
false)
182 bool implied_all =
false;
183 if (!implied_all_check && base_path.
level() > 0) {
186 MemberPathVec explicit_key;
187 const DDS::ReturnCode_t rc = get_keys_i_struct(members, explicit_key, base_path,
true);
191 implied_all = explicit_key.empty();
195 it != members->
end(); ++it) {
196 DDS::MemberDescriptor_var md;
201 if (implied_all || md->is_key()) {
203 if (implied_all_check) {
208 rc = get_keys_i(md->type(), paths,
MemberPath(base_path,
id));
225 const TypeKind kind = base_type->get_kind();
229 DDS::DynamicTypeMembersById_var members;
241 return get_keys_i_struct(members_impl, paths, base_path);
245 DDS::DynamicTypeMember_var disc;
248 if (base_path.
level() == 0) {
253 DDS::MemberDescriptor_var md;
254 rc = disc->get_descriptor(md);
259 paths.push_back(this_path);
265 paths.push_back(this_path);
270 if (base_path.
level() == 0) {
273 "get_keys was passed an invalid topic type: %C\n",
278 paths.push_back(base_path);
296 count = paths.size();
305 #endif // OPENDDS_SAFETY_PROFILE OpenDDS_Dcps_Export LogLevel log_level
DDS::ReturnCode_t max_extensibility(DDS::DynamicType_ptr type, DCPS::Extensibility &ext)
DDS::ReturnCode_t get_keys(DDS::DynamicType_ptr type, MemberPathVec &paths)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
const ReturnCode_t RETCODE_ILLEGAL_OPERATION
DDS::ReturnCode_t extensibility(DDS::DynamicType_ptr type, DCPS::Extensibility &ext)
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
MapType::const_iterator const_iterator
const ReturnCode_t RETCODE_OK
const_iterator end() const
const_iterator begin() const
DDS::ReturnCode_t get_member_from_data(DDS::DynamicData_ptr data, DDS::DynamicData_var &container, DDS::MemberId &member_id)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
DCPS::Extensibility dds_to_opendds_ext(DDS::ExtensibilityKind ext)
DDS::ReturnCode_t key_count(DDS::DynamicType_ptr type, size_t &count)
const TypeKind TK_STRUCTURE
const char * typekind_to_string(TypeKind tk)
The Internal API and Implementation of OpenDDS.
#define OPENDDS_ASSERT(C)
const ReturnCode_t RETCODE_BAD_PARAMETER
DDS::ReturnCode_t get_member_from_type(DDS::DynamicType_ptr type, DDS::DynamicTypeMember_var &member)