OpenDDS  Snapshot(2023/04/28-20:55)
Classes | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
OpenDDS::XTypes::DynamicDataImpl Class Reference

#include <DynamicDataImpl.h>

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

Classes

struct  DataContainer
 
struct  SequenceValue
 
struct  SingleValue
 

Public Member Functions

 DynamicDataImpl (DDS::DynamicType_ptr type)
 
 DynamicDataImpl (const DynamicDataImpl &other)
 
DDS::ReturnCode_t set_descriptor (MemberId id, DDS::MemberDescriptor *value)
 
MemberId get_member_id_at_index (ACE_CDR::ULong index)
 
ACE_CDR::ULong get_item_count ()
 
DDS::ReturnCode_t clear_all_values ()
 
DDS::ReturnCode_t clear_nonkey_values ()
 
DDS::ReturnCode_t clear_value (DDS::MemberId id)
 
DDS::DynamicData_ptr clone ()
 
DDS::ReturnCode_t get_int8_value (CORBA::Int8 &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int8_value (DDS::MemberId id, CORBA::Int8 value)
 
DDS::ReturnCode_t get_uint8_value (CORBA::UInt8 &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint8_value (DDS::MemberId id, CORBA::UInt8 value)
 
DDS::ReturnCode_t get_int16_value (CORBA::Short &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int16_value (DDS::MemberId id, CORBA::Short value)
 
DDS::ReturnCode_t get_uint16_value (CORBA::UShort &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint16_value (DDS::MemberId id, CORBA::UShort value)
 
DDS::ReturnCode_t get_int32_value (CORBA::Long &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int32_value (DDS::MemberId id, CORBA::Long value)
 
DDS::ReturnCode_t get_uint32_value (CORBA::ULong &value, DDS::MemberId)
 
DDS::ReturnCode_t set_uint32_value (DDS::MemberId id, CORBA::ULong value)
 
DDS::ReturnCode_t get_int64_value_impl (CORBA::LongLong &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int64_value (DDS::MemberId id, CORBA::LongLong value)
 
DDS::ReturnCode_t get_uint64_value_impl (CORBA::ULongLong &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint64_value (DDS::MemberId id, CORBA::ULongLong value)
 
DDS::ReturnCode_t get_float32_value (CORBA::Float &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_float32_value (DDS::MemberId id, CORBA::Float value)
 
DDS::ReturnCode_t get_float64_value (CORBA::Double &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_float64_value (DDS::MemberId id, CORBA::Double value)
 
DDS::ReturnCode_t get_float128_value (CORBA::LongDouble &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_float128_value (DDS::MemberId id, CORBA::LongDouble value)
 
DDS::ReturnCode_t get_char8_value (CORBA::Char &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_char8_value (DDS::MemberId id, CORBA::Char value)
 
DDS::ReturnCode_t get_char16_value (CORBA::WChar &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_char16_value (DDS::MemberId id, CORBA::WChar value)
 
DDS::ReturnCode_t get_byte_value (CORBA::Octet &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_byte_value (DDS::MemberId id, CORBA::Octet value)
 
DDS::ReturnCode_t get_boolean_value (CORBA::Boolean &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_boolean_value (DDS::MemberId id, CORBA::Boolean value)
 
DDS::ReturnCode_t get_string_value (char *&value, DDS::MemberId id)
 
DDS::ReturnCode_t set_string_value (DDS::MemberId id, const char *value)
 
DDS::ReturnCode_t get_wstring_value (CORBA::WChar *&value, DDS::MemberId id)
 
DDS::ReturnCode_t set_wstring_value (DDS::MemberId id, const CORBA::WChar *value)
 
DDS::ReturnCode_t get_complex_value (DDS::DynamicData_ptr &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_complex_value (DDS::MemberId id, DDS::DynamicData_ptr value)
 
DDS::ReturnCode_t get_int32_values (DDS::Int32Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int32_values (DDS::MemberId id, const DDS::Int32Seq &value)
 
DDS::ReturnCode_t get_uint32_values (DDS::UInt32Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint32_values (DDS::MemberId id, const DDS::UInt32Seq &value)
 
DDS::ReturnCode_t get_int8_values (DDS::Int8Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int8_values (DDS::MemberId id, const DDS::Int8Seq &value)
 
DDS::ReturnCode_t get_uint8_values (DDS::UInt8Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint8_values (DDS::MemberId id, const DDS::UInt8Seq &value)
 
DDS::ReturnCode_t get_int16_values (DDS::Int16Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int16_values (DDS::MemberId id, const DDS::Int16Seq &value)
 
DDS::ReturnCode_t get_uint16_values (DDS::UInt16Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint16_values (DDS::MemberId id, const DDS::UInt16Seq &value)
 
DDS::ReturnCode_t get_int64_values (DDS::Int64Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_int64_values (DDS::MemberId id, const DDS::Int64Seq &value)
 
DDS::ReturnCode_t get_uint64_values (DDS::UInt64Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_uint64_values (DDS::MemberId id, const DDS::UInt64Seq &value)
 
DDS::ReturnCode_t get_float32_values (DDS::Float32Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_float32_values (DDS::MemberId id, const DDS::Float32Seq &value)
 
DDS::ReturnCode_t get_float64_values (DDS::Float64Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_float64_values (DDS::MemberId id, const DDS::Float64Seq &value)
 
DDS::ReturnCode_t get_float128_values (DDS::Float128Seq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_float128_values (DDS::MemberId id, const DDS::Float128Seq &value)
 
DDS::ReturnCode_t get_char8_values (DDS::CharSeq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_char8_values (DDS::MemberId id, const DDS::CharSeq &value)
 
DDS::ReturnCode_t get_char16_values (DDS::WcharSeq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_char16_values (DDS::MemberId id, const DDS::WcharSeq &value)
 
DDS::ReturnCode_t get_byte_values (DDS::ByteSeq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_byte_values (DDS::MemberId id, const DDS::ByteSeq &value)
 
DDS::ReturnCode_t get_boolean_values (DDS::BooleanSeq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_boolean_values (DDS::MemberId id, const DDS::BooleanSeq &value)
 
DDS::ReturnCode_t get_string_values (DDS::StringSeq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_string_values (DDS::MemberId id, const DDS::StringSeq &value)
 
DDS::ReturnCode_t get_wstring_values (DDS::WstringSeq &value, DDS::MemberId id)
 
DDS::ReturnCode_t set_wstring_values (DDS::MemberId id, const DDS::WstringSeq &value)
 
DDS::ReturnCode_t get_simple_value (DCPS::Value &value, DDS::MemberId id)
 
template<>
bool read_basic_in_single_map (char *&value, DDS::MemberId id)
 
template<>
bool read_basic_in_single_map (CORBA::WChar *&value, DDS::MemberId id)
 
template<>
bool read_basic_member (char *&value, DDS::MemberId id)
 
template<>
bool read_basic_member (CORBA::WChar *&value, DDS::MemberId id)
 
template<>
bool get_value_from_self (char *&, DDS::MemberId)
 
template<>
bool get_value_from_self (CORBA::WChar *&, DDS::MemberId)
 
- Public Member Functions inherited from OpenDDS::XTypes::DynamicDataBase
 DynamicDataBase ()
 
 DynamicDataBase (DDS::DynamicType_ptr type)
 
DDS::ReturnCode_t get_descriptor (DDS::MemberDescriptor *&value, MemberId id)
 
DDS::ReturnCode_t set_descriptor (DDS::MemberId id, DDS::MemberDescriptor *value)
 
DDS::MemberId get_member_id_by_name (const char *name)
 
DDS::DynamicType_ptr type ()
 
DDS::Boolean equals (DDS::DynamicData_ptr other)
 
DDS::DynamicData_ptr loan_value (DDS::MemberId id)
 
DDS::ReturnCode_t return_loaned_value (DDS::DynamicData_ptr other)
 
DDS::DynamicData_ptr clone ()
 
DDS::ReturnCode_t get_int64_value (DDS::Int64 &value, DDS::MemberId id)
 
virtual DDS::ReturnCode_t get_int64_value_impl (DDS::Int64 &value, DDS::MemberId id)=0
 
DDS::ReturnCode_t get_uint64_value (DDS::UInt64 &value, DDS::MemberId id)
 
virtual DDS::ReturnCode_t get_uint64_value_impl (DDS::UInt64 &value, DDS::MemberId id)=0
 
- Public Member Functions inherited from DDS::DynamicData
DDS::ReturnCode_t get_descriptor (inout MemberDescriptor value, in MemberId id)
 
DDS::ReturnCode_t set_descriptor (in MemberId id, in MemberDescriptor value)
 
boolean equals (in DynamicData other)
 
MemberId get_member_id_by_name (in ObjectName name)
 
MemberId get_member_id_at_index (in unsigned long index)
 
DDS::ReturnCode_t clear_value (in MemberId id)
 
DynamicData loan_value (in MemberId id)
 
DDS::ReturnCode_t return_loaned_value (in DynamicData value)
 
DDS::ReturnCode_t get_int32_value (inout long value, in MemberId id)
 
DDS::ReturnCode_t set_int32_value (in MemberId id, in long value)
 
DDS::ReturnCode_t get_uint32_value (inout unsigned long value, in MemberId id)
 
DDS::ReturnCode_t set_uint32_value (in MemberId id, in unsigned long value)
 
DDS::ReturnCode_t get_int8_value (inout int8 value, in MemberId id)
 
DDS::ReturnCode_t set_int8_value (in MemberId id, in int8 value)
 
DDS::ReturnCode_t get_uint8_value (inout uint8 value, in MemberId id)
 
DDS::ReturnCode_t set_uint8_value (in MemberId id, in uint8 value)
 
DDS::ReturnCode_t get_int16_value (inout short value, in MemberId id)
 
DDS::ReturnCode_t set_int16_value (in MemberId id, in short value)
 
DDS::ReturnCode_t get_uint16_value (inout unsigned short value, in MemberId id)
 
DDS::ReturnCode_t set_uint16_value (in MemberId id, in unsigned short value)
 
DDS::ReturnCode_t get_int64_value (inout long long value, in MemberId id)
 
DDS::ReturnCode_t set_int64_value (in MemberId id, in long long value)
 
DDS::ReturnCode_t get_uint64_value (inout unsigned long long value, in MemberId id)
 
DDS::ReturnCode_t set_uint64_value (in MemberId id, in unsigned long long value)
 
DDS::ReturnCode_t get_float32_value (inout float value, in MemberId id)
 
DDS::ReturnCode_t set_float32_value (in MemberId id, in float value)
 
DDS::ReturnCode_t get_float64_value (inout double value, in MemberId id)
 
DDS::ReturnCode_t set_float64_value (in MemberId id, in double value)
 
DDS::ReturnCode_t get_float128_value (inout long double value, in MemberId id)
 
DDS::ReturnCode_t set_float128_value (in MemberId id, in long double value)
 
DDS::ReturnCode_t get_char8_value (inout char value, in MemberId id)
 
DDS::ReturnCode_t set_char8_value (in MemberId id, in char value)
 
DDS::ReturnCode_t get_char16_value (inout wchar value, in MemberId id)
 
DDS::ReturnCode_t set_char16_value (in MemberId id, in wchar value)
 
DDS::ReturnCode_t get_byte_value (inout octet value, in MemberId id)
 
DDS::ReturnCode_t set_byte_value (in MemberId id, in octet value)
 
DDS::ReturnCode_t get_boolean_value (inout boolean value, in MemberId id)
 
DDS::ReturnCode_t set_boolean_value (in MemberId id, in boolean value)
 
DDS::ReturnCode_t get_string_value (inout string value, in MemberId id)
 
DDS::ReturnCode_t set_string_value (in MemberId id, in string value)
 
DDS::ReturnCode_t get_wstring_value (inout wstring value, in MemberId id)
 
DDS::ReturnCode_t set_wstring_value (in MemberId id, in wstring value)
 
DDS::ReturnCode_t get_complex_value (inout DynamicData value, in MemberId id)
 
DDS::ReturnCode_t set_complex_value (in MemberId id, in DynamicData value)
 
DDS::ReturnCode_t get_int32_values (inout Int32Seq value, in MemberId id)
 
DDS::ReturnCode_t set_int32_values (in MemberId id, in Int32Seq value)
 
DDS::ReturnCode_t get_uint32_values (inout UInt32Seq value, in MemberId id)
 
DDS::ReturnCode_t set_uint32_values (in MemberId id, in UInt32Seq value)
 
DDS::ReturnCode_t get_int8_values (inout Int8Seq value, in MemberId id)
 
DDS::ReturnCode_t set_int8_values (in MemberId id, in Int8Seq value)
 
DDS::ReturnCode_t get_uint8_values (inout UInt8Seq value, in MemberId id)
 
DDS::ReturnCode_t set_uint8_values (in MemberId id, in UInt8Seq value)
 
DDS::ReturnCode_t get_int16_values (inout Int16Seq value, in MemberId id)
 
DDS::ReturnCode_t set_int16_values (in MemberId id, in Int16Seq value)
 
DDS::ReturnCode_t get_uint16_values (inout UInt16Seq value, in MemberId id)
 
DDS::ReturnCode_t set_uint16_values (in MemberId id, in UInt16Seq value)
 
DDS::ReturnCode_t get_int64_values (inout Int64Seq value, in MemberId id)
 
DDS::ReturnCode_t set_int64_values (in MemberId id, in Int64Seq value)
 
DDS::ReturnCode_t get_uint64_values (inout UInt64Seq value, in MemberId id)
 
DDS::ReturnCode_t set_uint64_values (in MemberId id, in UInt64Seq value)
 
DDS::ReturnCode_t get_float32_values (inout Float32Seq value, in MemberId id)
 
DDS::ReturnCode_t set_float32_values (in MemberId id, in Float32Seq value)
 
DDS::ReturnCode_t get_float64_values (inout Float64Seq value, in MemberId id)
 
DDS::ReturnCode_t set_float64_values (in MemberId id, in Float64Seq value)
 
DDS::ReturnCode_t get_float128_values (inout Float128Seq value, in MemberId id)
 
DDS::ReturnCode_t set_float128_values (in MemberId id, in Float128Seq value)
 
DDS::ReturnCode_t get_char8_values (inout CharSeq value, in MemberId id)
 
DDS::ReturnCode_t set_char8_values (in MemberId id, in CharSeq value)
 
DDS::ReturnCode_t get_char16_values (inout WcharSeq value, in MemberId id)
 
DDS::ReturnCode_t set_char16_values (in MemberId id, in WcharSeq value)
 
DDS::ReturnCode_t get_byte_values (inout ByteSeq value, in MemberId id)
 
DDS::ReturnCode_t set_byte_values (in MemberId id, in ByteSeq value)
 
DDS::ReturnCode_t get_boolean_values (inout BooleanSeq value, in MemberId id)
 
DDS::ReturnCode_t set_boolean_values (in MemberId id, in BooleanSeq value)
 
DDS::ReturnCode_t get_string_values (inout StringSeq value, in MemberId id)
 
DDS::ReturnCode_t set_string_values (in MemberId id, in StringSeq value)
 
DDS::ReturnCode_t get_wstring_values (inout WstringSeq value, in MemberId id)
 
DDS::ReturnCode_t set_wstring_values (in MemberId id, in WstringSeq value)
 
- Public Member Functions inherited from OpenDDS::DCPS::LocalObjectBase
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
virtual CORBA::ULong _refcount_value () const
 
- Public Member Functions inherited from CORBA::LocalObject
virtual ~LocalObject (void)
 
virtual CORBA::Boolean _non_existent (void)
 
virtual char * _repository_id (void)
 
virtual CORBA::InterfaceDef_ptr _get_interface (void)
 
virtual CORBA::Object_ptr _get_component (void)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual void _create_request (CORBA::Context_ptr ctx, const char *operation, CORBA::NVList_ptr arg_list, CORBA::NamedValue_ptr result, CORBA::ExceptionList_ptr exclist, CORBA::ContextList_ptr ctxtlist, CORBA::Request_ptr &request, CORBA::Flags req_flags)
 
virtual CORBA::Request_ptr _request (const char *operation)
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
virtual CORBA::ULong _hash (CORBA::ULong maximum)
 
virtual CORBA::Boolean _is_equivalent (CORBA::Object_ptr other_obj)
 
virtual CORBA::ORB_ptr _get_orb (void)
 
virtual TAO::ObjectKey_key (void)
 
- Public Member Functions inherited from CORBA::Object
virtual ~Object (void)
 
virtual TAO_Abstract_ServantBase_servant (void) const
 
virtual CORBA::Boolean _is_collocated (void) const
 
virtual CORBA::Boolean _is_local (void) const
 
 Object (TAO_Stub *p, CORBA::Boolean collocated=false, TAO_Abstract_ServantBase *servant=0, TAO_ORB_Core *orb_core=0)
 
 Object (IOP::IOR *ior, TAO_ORB_Core *orb_core)
 
virtual TAO_Stub_stubobj (void) const
 
virtual TAO_Stub_stubobj (void)
 
virtual void _proxy_broker (TAO::Object_Proxy_Broker *proxy_broker)
 
virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr)
 
CORBA::Boolean is_evaluated (void) const
 
TAO_ORB_Coreorb_core (void) const
 
IOP::IORsteal_ior (void)
 
const IOP::IORior (void) const
 
virtual bool can_convert_to_ior (void) const
 
virtual char * convert_to_ior (bool use_omg_ior_format, const char *ior_prefix) const
 
void _decr_refcount (void)
 
virtual CORBA::Boolean _is_a (const char *logical_type_id)
 
virtual const char * _interface_repository_id (void) const
 
CORBA::Policy_ptr _get_policy (CORBA::PolicyType type)
 
CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type)
 
CORBA::Object_ptr _set_policy_overrides (const CORBA::PolicyList &policies, CORBA::SetOverrideType set_add)
 
CORBA::PolicyList_get_policy_overrides (const CORBA::PolicyTypeSeq &types)
 
CORBA::Boolean _validate_connection (CORBA::PolicyList_out inconsistent_policies)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Private Types

enum  FoundStatus { FOUND_IN_COMPLEX_MAP, FOUND_IN_NON_COMPLEX_MAP, NOT_FOUND }
 

Private Member Functions

DDS::ReturnCode_t get_simple_value_boolean (DCPS::Value &value, DDS::MemberId id) const
 
DDS::ReturnCode_t get_simple_value_char (DCPS::Value &value, DDS::MemberId id) const
 
template<typename ValueType >
DDS::ReturnCode_t get_simple_value_primitive (DCPS::Value &value, DDS::MemberId id) const
 
DDS::ReturnCode_t get_simple_value_string (DCPS::Value &value, DDS::MemberId id) const
 
DDS::ReturnCode_t get_simple_value_enum (DCPS::Value &value, DDS::MemberId id) const
 
CORBA::ULong get_sequence_size () const
 
void erase_member (DDS::MemberId id)
 
bool read_basic_value (ACE_OutputCDR::from_int8 &value)
 Group of functions to read a basic value represented by this DynamicData instance. More...
 
bool read_basic_value (ACE_OutputCDR::from_uint8 &value)
 
bool read_basic_value (CORBA::Short &value)
 
bool read_basic_value (CORBA::UShort &value)
 
bool read_basic_value (CORBA::Long &value)
 
bool read_basic_value (CORBA::ULong &value)
 
bool read_basic_value (CORBA::LongLong &value)
 
bool read_basic_value (CORBA::ULongLong &value)
 
bool read_basic_value (CORBA::Float &value)
 
bool read_basic_value (CORBA::Double &value)
 
bool read_basic_value (CORBA::LongDouble &value)
 
bool read_basic_value (ACE_OutputCDR::from_char &value)
 
bool read_basic_value (ACE_OutputCDR::from_wchar &value)
 
bool read_basic_value (ACE_OutputCDR::from_octet &value)
 
bool read_basic_value (ACE_OutputCDR::from_boolean &value)
 
bool read_basic_value (char *&value) const
 
void cast_to_enum_value (ACE_OutputCDR::from_int8 &dst, CORBA::Long src) const
 
void cast_to_enum_value (CORBA::Short &dst, CORBA::Long src) const
 
void cast_to_enum_value (CORBA::Long &dst, CORBA::Long src) const
 
template<typename ValueType >
void cast_to_enum_value (ValueType &dst, CORBA::Long src) const
 
template<typename ValueType >
bool read_basic_in_single_map (ValueType &value, DDS::MemberId id)
 Read a basic member from a containing type. More...
 
template<typename ValueType >
bool read_basic_in_complex_map (ValueType &value, DDS::MemberId id)
 
template<typename ValueType >
bool read_basic_member (ValueType &value, DDS::MemberId id)
 
template<typename ValueType >
bool get_value_from_self (ValueType &value, DDS::MemberId id)
 
template<TypeKind ValueTypeKind, typename ValueType >
bool get_value_from_enum (ValueType &value, DDS::MemberId id)
 
template<TypeKind ValueTypeKind, typename ValueType >
bool get_value_from_bitmask (ValueType &value, DDS::MemberId id)
 
template<TypeKind ValueTypeKind, typename ValueType >
bool get_value_from_struct (ValueType &value, DDS::MemberId id)
 
template<TypeKind ValueTypeKind, typename ValueType >
bool get_value_from_union (ValueType &value, DDS::MemberId id)
 
template<TypeKind ValueTypeKind, typename ValueType >
bool get_value_from_collection (ValueType &value, DDS::MemberId id)
 
template<TypeKind CharKind, TypeKind StringKind, typename FromCharT , typename CharT >
DDS::ReturnCode_t get_char_common (CharT &value, DDS::MemberId id)
 
template<typename UIntType >
bool get_boolean_from_bitmask (CORBA::ULong index, CORBA::Boolean &value)
 
template<TypeKind MemberTypeKind, typename MemberType >
bool set_value_to_struct (DDS::MemberId id, const MemberType &value)
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const ACE_OutputCDR::from_boolean &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const ACE_OutputCDR::from_octet &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const ACE_OutputCDR::from_char &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const ACE_OutputCDR::from_int8 &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const ACE_OutputCDR::from_uint8 &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const CORBA::Short &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const CORBA::UShort &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const CORBA::Long &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const CORBA::ULong &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const CORBA::LongLong &value) const
 
bool cast_to_discriminator_value (CORBA::Long &disc_value, const CORBA::ULongLong &value) const
 
template<typename MemberType >
bool cast_to_discriminator_value (CORBA::Long &disc_value, const MemberType &value) const
 
template<TypeKind MemberTypeKind, typename MemberType >
bool set_value_to_union (DDS::MemberId id, const MemberType &value, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
 
template<TypeKind ElementTypeKind, typename ElementType >
bool set_value_to_collection (DDS::MemberId id, const ElementType &value, TypeKind coll_tk, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
 
template<TypeKind ValueTypeKind, typename ValueType >
DDS::ReturnCode_t set_single_value (DDS::MemberId id, const ValueType &value, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
 
template<TypeKind CharKind, TypeKind StringKind, typename FromCharT >
DDS::ReturnCode_t set_char_common (DDS::MemberId id, const FromCharT &value)
 
bool check_index_from_id (TypeKind tk, DDS::MemberId id, CORBA::ULong bound) const
 
bool is_default_member_selected (CORBA::Long disc_val, DDS::MemberId default_id) const
 
bool read_discriminator (CORBA::Long &disc_val) const
 
DDS::MemberId find_selected_member () const
 
bool validate_discriminator (CORBA::Long disc_val, const DDS::MemberDescriptor_var &md) const
 
bool set_complex_to_struct (DDS::MemberId id, DDS::DynamicData_var value)
 
bool set_complex_to_union (DDS::MemberId id, DDS::DynamicData_var value)
 
bool set_complex_to_collection (DDS::MemberId id, DDS::DynamicData_var value, TypeKind tk)
 
bool validate_member_id_collection (DDS::MemberId id, TypeKind collection_tk) const
 
DDS::ReturnCode_t clear_value_i (DDS::MemberId id, const DDS::DynamicType_var &member_type)
 
bool insert_single (DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
 
bool insert_single (DDS::MemberId id, const ACE_OutputCDR::from_uint8 &value)
 
bool insert_single (DDS::MemberId id, const ACE_OutputCDR::from_char &value)
 
bool insert_single (DDS::MemberId id, const ACE_OutputCDR::from_octet &value)
 
bool insert_single (DDS::MemberId id, const ACE_OutputCDR::from_boolean &value)
 
template<typename SingleType >
bool insert_single (DDS::MemberId id, const SingleType &value)
 
bool insert_complex (DDS::MemberId id, const DDS::DynamicData_var &value)
 
template<typename SequenceType >
bool insert_sequence (DDS::MemberId id, const SequenceType &value)
 
template<TypeKind ElementTypeKind>
bool check_seqmem_in_struct_and_union (DDS::MemberId id, TypeKind enum_or_bitmask, LBound lower, LBound upper) const
 
template<TypeKind ElementTypeKind>
bool check_seqmem_in_sequence_and_array (DDS::MemberId id, CORBA::ULong bound, TypeKind enum_or_bitmask, LBound lower, LBound upper) const
 
template<TypeKind ElementTypeKind, typename SequenceType >
bool set_values_to_struct (DDS::MemberId id, const SequenceType &value, TypeKind enum_or_bitmask, LBound lower, LBound upper)
 
template<TypeKind ElementTypeKind, typename SequenceType >
bool set_values_to_union (DDS::MemberId id, const SequenceType &value, TypeKind enum_or_bitmask, LBound lower, LBound upper)
 
template<TypeKind ElementTypeKind, typename SequenceType >
bool set_values_to_sequence (DDS::MemberId id, const SequenceType &value, TypeKind enum_or_bitmask, LBound lower, LBound upper)
 
template<TypeKind ElementTypeKind, typename SequenceType >
bool set_values_to_array (DDS::MemberId id, const SequenceType &value, TypeKind enum_or_bitmask, LBound lower, LBound upper)
 
template<TypeKind ElementTypeKind, typename SequenceType >
DDS::ReturnCode_t set_sequence_values (DDS::MemberId id, const SequenceType &value, TypeKind enum_or_bitmask=TK_NONE, LBound lower=0, LBound upper=0)
 
template<TypeKind ValueTypeKind, typename ValueType >
DDS::ReturnCode_t get_single_value (ValueType &value, DDS::MemberId id)
 
typedef OPENDDS_VECTOR (CORBA::ULong) IndexToIdMap
 
bool move_single_to_complex (const DataContainer::const_single_iterator &it, DynamicDataImpl *data)
 
bool move_single_to_complex_i (const DataContainer::const_single_iterator &it, DynamicDataImpl *data, const TypeKind treat_as)
 
template<typename SequenceType >
void move_sequence_helper (const DataContainer::const_sequence_iterator &it, DynamicDataImpl *data)
 
bool move_sequence_to_complex (const DataContainer::const_sequence_iterator &it, DynamicDataImpl *data)
 
bool get_complex_from_aggregated (DDS::DynamicData_var &value, DDS::MemberId id, FoundStatus &found_status)
 
bool get_complex_from_struct (DDS::DynamicData_ptr &value, DDS::MemberId id)
 
bool write_discriminator_helper (CORBA::Long value, TypeKind treat_as)
 
bool write_discriminator (CORBA::Long value)
 
bool get_complex_from_union (DDS::DynamicData_ptr &value, DDS::MemberId id)
 
bool get_complex_from_collection (DDS::DynamicData_ptr &value, DDS::MemberId id)
 
bool read_discriminator (CORBA::Long &disc_val, const DDS::DynamicType_var &disc_type, DataContainer::const_single_iterator it) const
 
bool insert_valid_discriminator (DDS::MemberDescriptor *memberSelected)
 
bool insert_discriminator (ACE_CDR::Long value)
 
void clear_container ()
 
bool serialized_size_i (const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
 
bool serialize_i (DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
 
template<>
bool get_value_from_enum (char *&, DDS::MemberId)
 
template<>
bool get_value_from_enum (CORBA::WChar *&, DDS::MemberId)
 
template<>
bool get_value_from_bitmask (char *&, DDS::MemberId)
 
template<>
bool get_value_from_bitmask (CORBA::WChar *&, DDS::MemberId)
 

Static Private Member Functions

static bool is_valid_discriminator_type (TypeKind tk)
 

Private Attributes

DataContainer container_
 

Friends

OpenDDS_Dcps_Export bool DCPS::serialized_size (const DCPS::Encoding &encoding, size_t &size, const DynamicDataImpl &data)
 
OpenDDS_Dcps_Export bool DCPS::operator<< (DCPS::Serializer &ser, const DynamicDataImpl &data)
 
OpenDDS_Dcps_Export bool DCPS::serialized_size (const DCPS::Encoding &encoding, size_t &size, const DCPS::KeyOnly< const DynamicDataImpl > &data)
 
OpenDDS_Dcps_Export bool DCPS::operator<< (DCPS::Serializer &ser, const DCPS::KeyOnly< const DynamicDataImpl > &data)
 

Additional Inherited Members

- Public Types inherited from OpenDDS::DCPS::LocalObject< DDS::DynamicData >
typedef DDS::DynamicData ::_ptr_type _ptr_type
 
typedef DDS::DynamicData ::_var_type _var_type
 
- Public Types inherited from CORBA::LocalObject
typedef LocalObject_ptr _ptr_type
 
typedef LocalObject_var _var_type
 
typedef LocalObject_out _out_type
 
- Public Types inherited from CORBA::Object
typedef Object_ptr _ptr_type
 
typedef Object_var _var_type
 
typedef Object_out _out_type
 
- Static Public Member Functions inherited from OpenDDS::XTypes::DynamicDataBase
static bool has_explicit_keys (DDS::DynamicType *dt)
 
static bool exclude_member (DCPS::Sample::Extent ext, bool is_key, bool has_explicit_keys)
 
static DCPS::Sample::Extent nested (DCPS::Sample::Extent ext)
 
- Static Public Member Functions inherited from OpenDDS::DCPS::LocalObject< DDS::DynamicData >
static _ptr_type _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::LocalObject
static LocalObject_ptr _duplicate (LocalObject_ptr obj)
 
static LocalObject_ptr _nil (void)
 
static LocalObject_ptr _narrow (CORBA::Object_ptr obj)
 
- Static Public Member Functions inherited from CORBA::Object
static CORBA::Boolean marshal (const Object_ptr x, TAO_OutputCDR &cdr)
 
static void _tao_any_destructor (void *)
 
static CORBA::Boolean is_nil_i (CORBA::Object_ptr obj)
 
static void tao_object_initialize (Object *)
 
static CORBA::Object_ptr _duplicate (CORBA::Object_ptr obj)
 
static CORBA::Object_ptr _nil (void)
 
static CORBA::Object_ptr _narrow (CORBA::Object_ptr obj)
 
- Public Attributes inherited from DDS::DynamicData
readonly attribute DynamicType type
 
- Protected Member Functions inherited from OpenDDS::XTypes::DynamicDataBase
bool is_type_supported (TypeKind tk, const char *func_name)
 Verify that a given type is primitive or string or wstring. More...
 
bool get_index_from_id (DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const
 
bool enum_string_helper (char *&strInOut, MemberId id)
 
DDS::ReturnCode_t check_member (DDS::MemberDescriptor_var &member_desc, DDS::DynamicType_var &member_type, const char *method, const char *action, DDS::MemberId id, DDS::TypeKind tk=TK_NONE)
 
DDS::ReturnCode_t check_member (DDS::DynamicType_var &member_type, const char *method, const char *action, DDS::MemberId id, DDS::TypeKind tk=TK_NONE)
 
DDS::ReturnCode_t get_selected_union_branch (DDS::Int32 disc, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const
 
DDS::ReturnCode_t get_selected_union_branch (bool &found_selected_member, DDS::MemberDescriptor_var &selected_md)
 
bool discriminator_selects_no_member (DDS::Int32 disc) const
 
DDS::DynamicDatainterface_from_this () const
 
DDS::ReturnCode_t unsupported_method (const char *method_name, bool warning=false) const
 
- Protected Member Functions inherited from CORBA::LocalObject
 LocalObject (void)
 
- Protected Member Functions inherited from CORBA::Object
 Object (int dummy=0)
 
TAO::Object_Proxy_Brokerproxy_broker () const
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Static Protected Member Functions inherited from OpenDDS::XTypes::DynamicDataBase
static DDS::MemberId get_union_default_member (DDS::DynamicType *type)
 
- Protected Attributes inherited from OpenDDS::XTypes::DynamicDataBase
DDS::DynamicType_var type_
 The actual (i.e., non-alias) DynamicType of the associated type. More...
 
DDS::TypeDescriptor_var type_desc_
 
- Protected Attributes inherited from CORBA::Object
ACE_Atomic_Op< TAO_SYNCH_MUTEX, unsigned long > refcount_
 

Detailed Description

Definition at line 36 of file DynamicDataImpl.h.

Member Enumeration Documentation

◆ FoundStatus

Constructor & Destructor Documentation

◆ DynamicDataImpl() [1/2]

OpenDDS::XTypes::DynamicDataImpl::DynamicDataImpl ( DDS::DynamicType_ptr  type)
explicit

◆ DynamicDataImpl() [2/2]

OpenDDS::XTypes::DynamicDataImpl::DynamicDataImpl ( const DynamicDataImpl other)

Definition at line 35 of file DynamicDataImpl.cpp.

36  : CORBA::Object()
37  , DynamicData()
39  , DCPS::RcObject()
40  , DynamicDataBase(other.type_)
41  , container_(other.container_, this)
42 {}

Member Function Documentation

◆ cast_to_discriminator_value() [1/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const ACE_OutputCDR::from_boolean value 
) const
private

Definition at line 1320 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_boolean::val_.

Referenced by cast_to_discriminator_value(), get_value_from_union(), and set_value_to_union().

1322 {
1323  disc_value = static_cast<CORBA::Long>(value.val_);
1324  return true;
1325 }
ACE_CDR::Long Long

◆ cast_to_discriminator_value() [2/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const ACE_OutputCDR::from_octet value 
) const
private

Definition at line 1327 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_octet::val_.

1329 {
1330  disc_value = static_cast<CORBA::Long>(value.val_);
1331  return true;
1332 }
ACE_CDR::Long Long

◆ cast_to_discriminator_value() [3/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const ACE_OutputCDR::from_char value 
) const
private

Definition at line 1334 of file DynamicDataImpl.cpp.

References cast_to_discriminator_value(), ACE_OutputCDR::from_wchar::val_, and ACE_OutputCDR::from_char::val_.

1336 {
1337  disc_value = static_cast<CORBA::Long>(value.val_);
1338  return true;
1339 }
ACE_CDR::Long Long

◆ cast_to_discriminator_value() [4/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const ACE_OutputCDR::from_int8 value 
) const
private

Definition at line 1350 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_int8::val_.

1352 {
1353  disc_value = static_cast<CORBA::Long>(value.val_);
1354  return true;
1355 }
ACE_CDR::Long Long

◆ cast_to_discriminator_value() [5/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const ACE_OutputCDR::from_uint8 value 
) const
private

Definition at line 1357 of file DynamicDataImpl.cpp.

References ACE_OutputCDR::from_uint8::val_.

1359 {
1360  disc_value = static_cast<CORBA::Long>(value.val_);
1361  return true;
1362 }
ACE_CDR::Long Long

◆ cast_to_discriminator_value() [6/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const CORBA::Short value 
) const
private

Definition at line 1364 of file DynamicDataImpl.cpp.

References value.

1366 {
1367  disc_value = static_cast<CORBA::Long>(value);
1368  return true;
1369 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61

◆ cast_to_discriminator_value() [7/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const CORBA::UShort value 
) const
private

Definition at line 1371 of file DynamicDataImpl.cpp.

References value.

1373 {
1374  disc_value = static_cast<CORBA::Long>(value);
1375  return true;
1376 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61

◆ cast_to_discriminator_value() [8/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const CORBA::Long value 
) const
private

Definition at line 1378 of file DynamicDataImpl.cpp.

References value.

1380 {
1381  disc_value = value;
1382  return true;
1383 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ cast_to_discriminator_value() [9/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const CORBA::ULong value 
) const
private

Definition at line 1385 of file DynamicDataImpl.cpp.

References value.

1387 {
1388  disc_value = static_cast<CORBA::Long>(value);
1389  return true;
1390 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61

◆ cast_to_discriminator_value() [10/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const CORBA::LongLong value 
) const
private

Definition at line 1392 of file DynamicDataImpl.cpp.

References value.

1394 {
1395  disc_value = static_cast<CORBA::Long>(value);
1396  return true;
1397 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61

◆ cast_to_discriminator_value() [11/12]

bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const CORBA::ULongLong value 
) const
private

Definition at line 1399 of file DynamicDataImpl.cpp.

References value.

1401 {
1402  disc_value = static_cast<CORBA::Long>(value);
1403  return true;
1404 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61

◆ cast_to_discriminator_value() [12/12]

template<typename MemberType >
bool OpenDDS::XTypes::DynamicDataImpl::cast_to_discriminator_value ( CORBA::Long disc_value,
const MemberType &  value 
) const
private

Definition at line 1407 of file DynamicDataImpl.cpp.

1409 {
1410  return false;
1411 }

◆ cast_to_enum_value() [1/4]

void OpenDDS::XTypes::DynamicDataImpl::cast_to_enum_value ( ACE_OutputCDR::from_int8 dst,
CORBA::Long  src 
) const
private

Definition at line 2856 of file DynamicDataImpl.cpp.

Referenced by get_value_from_enum().

2857 {
2858  dst = ACE_OutputCDR::from_int8(static_cast<CORBA::Int8>(src));
2859 }

◆ cast_to_enum_value() [2/4]

void OpenDDS::XTypes::DynamicDataImpl::cast_to_enum_value ( CORBA::Short dst,
CORBA::Long  src 
) const
private

Definition at line 2861 of file DynamicDataImpl.cpp.

2862 {
2863  dst = static_cast<CORBA::Short>(src);
2864 }
ACE_CDR::Short Short

◆ cast_to_enum_value() [3/4]

void OpenDDS::XTypes::DynamicDataImpl::cast_to_enum_value ( CORBA::Long dst,
CORBA::Long  src 
) const
private

Definition at line 2866 of file DynamicDataImpl.cpp.

2867 {
2868  dst = src;
2869 }

◆ cast_to_enum_value() [4/4]

template<typename ValueType >
void OpenDDS::XTypes::DynamicDataImpl::cast_to_enum_value ( ValueType &  dst,
CORBA::Long  src 
) const
private

Definition at line 2872 of file DynamicDataImpl.cpp.

2873 {}

◆ check_index_from_id()

bool OpenDDS::XTypes::DynamicDataImpl::check_index_from_id ( TypeKind  tk,
DDS::MemberId  id,
CORBA::ULong  bound 
) const
private

Definition at line 1584 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRING16, and OpenDDS::XTypes::TK_STRING8.

Referenced by check_seqmem_in_sequence_and_array(), set_boolean_value(), set_char_common(), and validate_member_id_collection().

1585 {
1586  // The given Id is treated as index.
1587  switch (tk) {
1588  case TK_STRING8:
1589  case TK_STRING16:
1590  case TK_SEQUENCE:
1591  case TK_MAP:
1592  // Bound of 0 means unbounded.
1593  if (bound == 0 || id < bound) {
1594  return true;
1595  }
1596  break;
1597  case TK_BITMASK:
1598  case TK_ARRAY:
1599  if (id < bound) {
1600  return true;
1601  }
1602  break;
1603  }
1604  return false;
1605 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ check_seqmem_in_sequence_and_array()

template<TypeKind ElementTypeKind>
bool OpenDDS::XTypes::DynamicDataImpl::check_seqmem_in_sequence_and_array ( DDS::MemberId  id,
CORBA::ULong  bound,
TypeKind  enum_or_bitmask,
LBound  lower,
LBound  upper 
) const
private

Definition at line 2275 of file DynamicDataImpl.cpp.

References check_index_from_id(), OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::XTypes::DynamicDataBase::type_desc_.

2277 {
2278  if (!check_index_from_id(type_->get_kind(), id, bound)) {
2279  return false;
2280  }
2281 
2282  const DDS::DynamicType_var elem_type = get_base_type(type_desc_->element_type());
2283  const TypeKind elem_tk = elem_type->get_kind();
2284  if (elem_tk != TK_SEQUENCE) {
2285  return false;
2286  }
2287 
2288  DDS::TypeDescriptor_var elem_td;
2289  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
2290  return false;
2291  }
2292 
2293  const DDS::DynamicType_var nested_elem_type = get_base_type(elem_td->element_type());
2294  const TypeKind nested_elem_tk = nested_elem_type->get_kind();
2295  if (nested_elem_tk != ElementTypeKind && nested_elem_tk != enum_or_bitmask) {
2296  return false;
2297  }
2298  if (nested_elem_tk == enum_or_bitmask) {
2299  DDS::TypeDescriptor_var nested_elem_td;
2300  if (nested_elem_type->get_descriptor(nested_elem_td) != DDS::RETCODE_OK) {
2301  return false;
2302  }
2303  const CORBA::ULong bit_bound = nested_elem_td->bound()[0];
2304  if (bit_bound < lower || bit_bound > upper) {
2305  return false;
2306  }
2307  }
2308  return true;
2309 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DDS::TypeDescriptor_var type_desc_
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool check_index_from_id(TypeKind tk, DDS::MemberId id, CORBA::ULong bound) const
ACE_CDR::ULong ULong
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const ReturnCode_t RETCODE_OK

◆ check_seqmem_in_struct_and_union()

template<TypeKind ElementTypeKind>
bool OpenDDS::XTypes::DynamicDataImpl::check_seqmem_in_struct_and_union ( DDS::MemberId  id,
TypeKind  enum_or_bitmask,
LBound  lower,
LBound  upper 
) const
private

Definition at line 2192 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_SEQUENCE, and OpenDDS::XTypes::DynamicDataBase::type_.

2194 {
2195  DDS::DynamicTypeMember_var member;
2196  if (type_->get_member(member, id)) {
2197  return false;
2198  }
2199  DDS::MemberDescriptor_var md;
2200  if (member->get_descriptor(md) != DDS::RETCODE_OK) {
2201  return false;
2202  }
2203 
2204  const DDS::DynamicType_var member_type = get_base_type(md->type());
2205  const TypeKind member_tk = member_type->get_kind();
2206  if (member_tk != TK_SEQUENCE) {
2207  return false;
2208  }
2209 
2210  DDS::TypeDescriptor_var member_td;
2211  if (member_type->get_descriptor(member_td) != DDS::RETCODE_OK) {
2212  return false;
2213  }
2214 
2215  const DDS::DynamicType_var elem_type = get_base_type(member_td->element_type());
2216  const TypeKind elem_tk = elem_type->get_kind();
2217  if (elem_tk != ElementTypeKind && elem_tk != enum_or_bitmask) {
2218  return false;
2219  }
2220 
2221  if (elem_tk == enum_or_bitmask) {
2222  DDS::TypeDescriptor_var elem_td;
2223  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
2224  return false;
2225  }
2226  const CORBA::ULong bit_bound = elem_td->bound()[0];
2227  if (bit_bound < lower || bit_bound > upper) {
2228  return false;
2229  }
2230  }
2231  return true;
2232 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
ACE_CDR::ULong ULong
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const ReturnCode_t RETCODE_OK

◆ clear_all_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::clear_all_values ( )

Implements DDS::DynamicData.

Definition at line 301 of file DynamicDataImpl.cpp.

References ACE_ERROR, clear_container(), clear_value_i(), OpenDDS::XTypes::is_primitive(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, 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_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::XTypes::typekind_to_string().

302 {
303  const TypeKind tk = type_->get_kind();
304  if (is_primitive(tk) || tk == TK_ENUM) {
306  }
307 
308  switch (tk) {
309  case TK_BITMASK:
310  case TK_ARRAY:
311  case TK_STRING8:
312 #ifdef DDS_HAS_WCHAR
313  case TK_STRING16:
314 #endif
315  case TK_SEQUENCE:
316  case TK_STRUCTURE:
317  case TK_UNION:
318  clear_container();
319  break;
320  case TK_MAP:
321  case TK_BITSET:
322  case TK_ALIAS:
323  case TK_ANNOTATION:
324  default:
325  if (log_level >= LogLevel::Notice) {
326  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::clear_all_values:"
327  " Encounter unexpected type kind %C\n", typekind_to_string(tk)));
328  }
329  return DDS::RETCODE_ERROR;
330  }
331  return DDS::RETCODE_OK;
332 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_UNION
Definition: TypeObject.h:244
DDS::ReturnCode_t clear_value_i(DDS::MemberId id, const DDS::DynamicType_var &member_type)
bool is_primitive(TypeKind tk)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
const TypeKind TK_STRING8
Definition: TypeObject.h:231
OpenDDS_Dcps_Export LogLevel log_level
const TypeKind TK_ALIAS
Definition: TypeObject.h:235
const ReturnCode_t RETCODE_ERROR
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250
const TypeKind TK_BITSET
Definition: TypeObject.h:245

◆ clear_container()

void OpenDDS::XTypes::DynamicDataImpl::clear_container ( )
private

◆ clear_nonkey_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::clear_nonkey_values ( )

Implements DDS::DynamicData.

Definition at line 341 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

342 {
344 }
const ReturnCode_t RETCODE_UNSUPPORTED

◆ clear_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::clear_value ( DDS::MemberId  id)

Definition at line 346 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::bound_total(), clear_value_i(), container_, erase_member(), OpenDDS::XTypes::get_base_type(), get_sequence_size(), OpenDDS::XTypes::is_primitive(), LM_WARNING, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_BAD_PARAMETER, DDS::RETCODE_ERROR, DDS::RETCODE_OK, set_boolean_value(), 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_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and OpenDDS::DCPS::LogLevel::Warning.

347 {
348  const TypeKind this_tk = type_->get_kind();
349  if (is_primitive(this_tk) || this_tk == TK_ENUM) {
350  if (id != MEMBER_ID_INVALID) {
352  }
353  return clear_value_i(id, type_);
354  }
355 
356  switch (this_tk) {
357  case TK_BITMASK:
358  return set_boolean_value(id, false);
359  case TK_ARRAY: {
360  const DDS::UInt32 bound = bound_total(type_desc_);
361  if (id >= bound) {
363  }
364  DDS::DynamicType_var elem_type = get_base_type(type_desc_->element_type());
365  return clear_value_i(id, elem_type);
366  }
367  case TK_STRING8:
368 #ifdef DDS_HAS_WCHAR
369  case TK_STRING16:
370 #endif
371  case TK_SEQUENCE: {
372  // Shift subsequent elements to the left (XTypes spec 7.5.2.11.3).
373  const CORBA::ULong size = get_sequence_size();
374  if (id >= size) {
375  return DDS::RETCODE_ERROR;
376  }
377 
378  // At the begin of each iterator, member with the current id is not present
379  // in any of the maps. Copy over the next member to the current id.
380  erase_member(id);
381  for (CORBA::ULong i = id; i < size - 1; ++i) {
382  const DDS::MemberId next_id = i + 1;
383  DataContainer::const_single_iterator single_it = container_.single_map_.find(next_id);
384  if (single_it != container_.single_map_.end()) {
385  container_.single_map_.insert(std::make_pair(i, single_it->second));
386  container_.single_map_.erase(next_id);
387  continue;
388  }
389  DataContainer::const_sequence_iterator seq_it = container_.sequence_map_.find(next_id);
390  if (seq_it != container_.sequence_map_.end()) {
391  container_.sequence_map_.insert(std::make_pair(i, seq_it->second));
392  container_.sequence_map_.erase(next_id);
393  continue;
394  }
395  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(next_id);
396  if (complex_it != container_.complex_map_.end()) {
397  container_.complex_map_.insert(std::make_pair(i, complex_it->second));
398  container_.complex_map_.erase(next_id);
399  continue;
400  }
401  }
402  break;
403  }
404  case TK_STRUCTURE:
405  case TK_UNION: {
406  DDS::DynamicTypeMember_var dtm;
407  if (type_->get_member(dtm, id) != DDS::RETCODE_OK) {
408  return DDS::RETCODE_ERROR;
409  }
410  DDS::MemberDescriptor_var md;
411  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
412  return DDS::RETCODE_ERROR;
413  }
414  if (md->is_optional()) {
415  erase_member(id);
416  break;
417  }
418  DDS::DynamicType_var member_type = get_base_type(md->type());
419  return clear_value_i(id, member_type);
420  }
421  case TK_MAP:
422  case TK_BITSET:
423  case TK_ALIAS:
424  case TK_ANNOTATION:
425  default:
426  if (log_level >= LogLevel::Warning) {
427  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::clear_value:"
428  " Encounter unexpected type kind %C\n", typekind_to_string(this_tk)));
429  }
430  return DDS::RETCODE_ERROR;
431  }
432  return DDS::RETCODE_OK;
433 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_UNION
Definition: TypeObject.h:244
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DDS::ReturnCode_t set_boolean_value(DDS::MemberId id, CORBA::Boolean value)
DDS::ReturnCode_t clear_value_i(DDS::MemberId id, const DDS::DynamicType_var &member_type)
DDS::TypeDescriptor_var type_desc_
bool is_primitive(TypeKind tk)
CORBA::ULong get_sequence_size() const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
ACE_CDR::ULong ULong
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
void erase_member(DDS::MemberId id)
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
const TypeKind TK_STRING8
Definition: TypeObject.h:231
OpenDDS_Dcps_Export LogLevel log_level
const TypeKind TK_ALIAS
Definition: TypeObject.h:235
const ReturnCode_t RETCODE_ERROR
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250
const TypeKind TK_BITSET
Definition: TypeObject.h:245
const ReturnCode_t RETCODE_BAD_PARAMETER

◆ clear_value_i()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::clear_value_i ( DDS::MemberId  id,
const DDS::DynamicType_var &  member_type 
)
private

Definition at line 435 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::bitmask_bound(), container_, DynamicDataImpl(), OpenDDS::XTypes::enum_bound(), insert_complex(), insert_single(), LM_WARNING, OpenDDS::DCPS::log_level, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_enum_value(), 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_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, 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_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::typekind_to_string(), value, and OpenDDS::DCPS::LogLevel::Warning.

Referenced by clear_all_values(), clear_value(), get_complex_from_union(), and get_value_from_union().

436 {
437  const TypeKind tk = member_type->get_kind();
438  switch (tk) {
439  case TK_BOOLEAN: {
440  ACE_OutputCDR::from_boolean val(false);
442  insert_single(id, val);
443  break;
444  }
445  case TK_BYTE: {
448  insert_single(id, val);
449  break;
450  }
451  case TK_UINT8: {
454  insert_single(id, val);
455  break;
456  }
457  case TK_UINT16: {
458  CORBA::UInt16 val(0);
460  insert_single(id, val);
461  break;
462  }
463  case TK_UINT32: {
464  CORBA::UInt32 val(0);
466  insert_single(id, val);
467  break;
468  }
469  case TK_UINT64: {
470  CORBA::UInt64 val(0);
472  insert_single(id, val);
473  break;
474  }
475  case TK_INT8: {
478  insert_single(id, val);
479  break;
480  }
481  case TK_INT16: {
482  CORBA::Int16 val(0);
484  insert_single(id, val);
485  break;
486  }
487  case TK_INT32: {
488  CORBA::Int32 val(0);
490  insert_single(id, val);
491  break;
492  }
493  case TK_INT64: {
494  CORBA::Int64 val(0);
496  insert_single(id, val);
497  break;
498  }
499  case TK_FLOAT32: {
500  CORBA::Float val(0.0f);
502  insert_single(id, val);
503  break;
504  }
505  case TK_FLOAT64: {
506  CORBA::Double val(0.0);
508  insert_single(id, val);
509  break;
510  }
511  case TK_FLOAT128: {
512  CORBA::LongDouble val;
514  insert_single(id, val);
515  break;
516  }
517  case TK_CHAR8: {
518  ACE_OutputCDR::from_char val('\0');
520  insert_single(id, val);
521  break;
522  }
523  case TK_STRING8: {
524  const char* val = 0;
526  insert_single(id, val);
527  break;
528  }
529 #ifdef DDS_HAS_WCHAR
530  case TK_CHAR16: {
531  ACE_OutputCDR::from_wchar val(L'\0');
533  insert_single(id, val);
534  break;
535  }
536  case TK_STRING16: {
537  const CORBA::WChar* val = 0;
539  insert_single(id, val);
540  break;
541  }
542 #endif
543  case TK_ENUM: {
544  // Set to first enumerator
546  if (!container_.set_default_enum_value(member_type, value)) {
547  return DDS::RETCODE_ERROR;
548  }
549  TypeKind treat_as = tk;
550  if (enum_bound(member_type, treat_as) != DDS::RETCODE_OK) {
551  return DDS::RETCODE_ERROR;
552  }
553  if (treat_as == TK_INT8) {
554  ACE_OutputCDR::from_int8 val(static_cast<CORBA::Int8>(value));
555  insert_single(id, val);
556  } else if (treat_as == TK_INT16) {
557  insert_single(id, static_cast<CORBA::Short>(value));
558  } else {
559  insert_single(id, value);
560  }
561  break;
562  }
563  case TK_BITMASK: {
564  // Set to default bitmask value
565  TypeKind treat_as = tk;
566  if (bitmask_bound(member_type, treat_as) != DDS::RETCODE_OK) {
567  return DDS::RETCODE_ERROR;
568  }
569  if (treat_as == TK_UINT8) {
572  insert_single(id, val);
573  } else if (treat_as == TK_UINT16) {
574  CORBA::UShort val;
576  insert_single(id, val);
577  } else if (treat_as == TK_UINT32) {
578  CORBA::ULong val;
580  insert_single(id, val);
581  } else {
582  CORBA::ULongLong val;
584  insert_single(id, val);
585  }
586  break;
587  }
588  case TK_ARRAY:
589  case TK_SEQUENCE:
590  case TK_STRUCTURE:
591  case TK_UNION: {
592  DDS::DynamicData_var dd = new DynamicDataImpl(member_type);
593  insert_complex(id, dd);
594  break;
595  }
596  case TK_MAP:
597  case TK_BITSET:
598  case TK_ALIAS:
599  case TK_ANNOTATION:
600  default:
601  if (log_level >= LogLevel::Warning) {
602  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::clear_value_i:"
603  " Member %u has unexpected type kind %C\n", id, typekind_to_string(tk)));
604  }
605  return DDS::RETCODE_ERROR;
606  }
607  return DDS::RETCODE_OK;
608 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_CDR::Long Long
#define ACE_ERROR(X)
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_INT32
Definition: TypeObject.h:217
ACE_CDR::Int32 Int32
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UNION
Definition: TypeObject.h:244
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_UINT16
Definition: TypeObject.h:219
DynamicDataImpl(DDS::DynamicType_ptr type)
const TypeKind TK_INT8
Definition: TypeObject.h:225
void set_default_bitmask_value(ACE_OutputCDR::from_uint8 &value) const
ACE_CDR::ULongLong ULongLong
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
ACE_CDR::UInt64 UInt64
ACE_CDR::UShort UShort
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
ACE_CDR::Int64 Int64
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export LogLevel log_level
DDS::ReturnCode_t enum_bound(DDS::DynamicType_ptr enum_type, DDS::TypeKind &bound_kind)
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ALIAS
Definition: TypeObject.h:235
const ReturnCode_t RETCODE_ERROR
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
const TypeKind TK_ENUM
Definition: TypeObject.h:238
ACE_CDR::Int16 Int16
const ReturnCode_t RETCODE_OK
ACE_CDR::WChar WChar
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_MAP
Definition: TypeObject.h:250
DDS::ReturnCode_t bitmask_bound(DDS::DynamicType_ptr type, DDS::TypeKind &bound_kind)
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)
ACE_CDR::UInt32 UInt32
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_BITSET
Definition: TypeObject.h:245
bool set_default_enum_value(const DDS::DynamicType_var &dt, CORBA::Long &value) const
ACE_CDR::UInt16 UInt16

◆ clone()

DDS::DynamicData_ptr OpenDDS::XTypes::DynamicDataImpl::clone ( void  )

Implements DDS::DynamicData.

Definition at line 610 of file DynamicDataImpl.cpp.

References DynamicDataImpl().

611 {
612  return new DynamicDataImpl(*this);
613 }
DynamicDataImpl(DDS::DynamicType_ptr type)

◆ erase_member()

void OpenDDS::XTypes::DynamicDataImpl::erase_member ( DDS::MemberId  id)
private

Definition at line 181 of file DynamicDataImpl.cpp.

References container_.

Referenced by clear_value().

182 {
183  if (container_.single_map_.erase(id) == 0) {
184  if (container_.sequence_map_.erase(id) == 0) {
185  container_.complex_map_.erase(id);
186  }
187  }
188 }

◆ find_selected_member()

DDS::MemberId OpenDDS::XTypes::DynamicDataImpl::find_selected_member ( ) const
private

Definition at line 1267 of file DynamicDataImpl.cpp.

References container_, OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::MEMBER_ID_INVALID, and OPENDDS_ASSERT.

Referenced by set_complex_to_union(), and set_value_to_union().

1268 {
1269  // There can be at most 2 entries in total in all three maps,
1270  // one for the discriminator, one for a selected member.
1271  for (DataContainer::const_single_iterator single_it = container_.single_map_.begin();
1272  single_it != container_.single_map_.end(); ++single_it) {
1273  if (single_it->first != DISCRIMINATOR_ID) {
1274  return single_it->first;
1275  }
1276  }
1277 
1278  // If there is any entry in sequence_map_, that must be for a selected member
1279  // since discriminator cannot be sequence.
1280  if (container_.sequence_map_.size() > 0) {
1281  OPENDDS_ASSERT(container_.sequence_map_.size() == 1);
1282  return container_.sequence_map_.begin()->first;
1283  }
1284 
1285  for (DataContainer::const_complex_iterator cmpl_it = container_.complex_map_.begin();
1286  cmpl_it != container_.complex_map_.end(); ++cmpl_it) {
1287  if (cmpl_it->first != DISCRIMINATOR_ID) {
1288  return cmpl_it->first;
1289  }
1290  }
1291 
1292  // There was no selected member written.
1293  return MEMBER_ID_INVALID;
1294 }
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911

◆ get_boolean_from_bitmask()

template<typename UIntType >
bool OpenDDS::XTypes::DynamicDataImpl::get_boolean_from_bitmask ( CORBA::ULong  index,
CORBA::Boolean value 
)
private

Definition at line 3127 of file DynamicDataImpl.cpp.

References read_basic_value().

3128 {
3129  UIntType bitmask;
3130  if (!read_basic_value(bitmask)) {
3131  return false;
3132  }
3133  value = (1ULL << index) & bitmask;
3134  return true;
3135 }
const LogLevel::Value value
Definition: debug.cpp:61
bool read_basic_value(ACE_OutputCDR::from_int8 &value)
Group of functions to read a basic value represented by this DynamicData instance.

◆ get_boolean_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_boolean_value ( CORBA::Boolean value,
DDS::MemberId  id 
)

Definition at line 3148 of file DynamicDataImpl.cpp.

References ACE_ERROR, container_, OpenDDS::XTypes::DynamicDataBase::get_index_from_id(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), ACE_OutputCDR::from_boolean::val_, and value.

Referenced by read_basic_value().

3149 {
3150  const TypeKind tk = type_->get_kind();
3151  bool good = true;
3152  switch (tk) {
3153  case TK_BOOLEAN: {
3154  if (id != MEMBER_ID_INVALID) {
3155  good = false;
3156  break;
3157  }
3158  DataContainer::const_single_iterator it = container_.single_map_.find(id);
3159  if (it != container_.single_map_.end()) {
3160  ACE_OutputCDR::from_boolean from_bool = it->second.get<ACE_OutputCDR::from_boolean>();
3161  value = from_bool.val_;
3162  } else {
3163  ACE_OutputCDR::from_boolean from_bool(false);
3165  value = from_bool.val_;
3166  }
3167  break;
3168  }
3169  case TK_BITMASK: {
3170  const LBound bitbound = type_desc_->bound()[0];
3171  ACE_CDR::ULong index;
3172  if (!get_index_from_id(id, index, bitbound)) {
3173  good = false;
3174  break;
3175  }
3176  if (bitbound >= 1 && bitbound <= 8) {
3177  good = get_boolean_from_bitmask<CORBA::UInt8>(index, value);
3178  } else if (bitbound >= 9 && bitbound <= 16) {
3179  good = get_boolean_from_bitmask<CORBA::UShort>(index, value);
3180  } else if (bitbound >= 17 && bitbound <= 32) {
3181  good = get_boolean_from_bitmask<CORBA::ULong>(index, value);
3182  } else {
3183  good = get_boolean_from_bitmask<CORBA::ULongLong>(index, value);
3184  }
3185  break;
3186  }
3187  case TK_STRUCTURE: {
3188  ACE_OutputCDR::from_boolean from_bool(false);
3189  good = get_value_from_struct<TK_BOOLEAN>(from_bool, id);
3190  if (good) {
3191  value = from_bool.val_;
3192  }
3193  break;
3194  }
3195  case TK_UNION: {
3196  ACE_OutputCDR::from_boolean from_bool(false);
3197  good = get_value_from_union<TK_BOOLEAN>(from_bool, id);
3198  if (good) {
3199  value = from_bool.val_;
3200  }
3201  break;
3202  }
3203  case TK_SEQUENCE:
3204  case TK_ARRAY: {
3205  ACE_OutputCDR::from_boolean from_bool(false);
3206  good = get_value_from_collection<TK_BOOLEAN>(from_bool, id);
3207  if (good) {
3208  value = from_bool.val_;
3209  }
3210  break;
3211  }
3212  case TK_MAP:
3213  if (log_level >= LogLevel::Notice) {
3214  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_boolean_value:"
3215  " Map is currently not supported\n"));
3216  }
3217  good = false;
3218  break;
3219  default:
3220  good = false;
3221  break;
3222  }
3223 
3224  if (!good && log_level >= LogLevel::Notice) {
3225  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_boolean_value:"
3226  " Failed to read a boolean value from a DynamicData object of type %C\n",
3227  typekind_to_string(tk)));
3228  }
3229  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
3230 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
DDS::TypeDescriptor_var type_desc_
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool get_index_from_id(DDS::MemberId id, ACE_CDR::ULong &index, ACE_CDR::ULong bound) const
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
ACE_UINT32 ULong
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
ACE_CDR::ULong LBound
Definition: TypeObject.h:312
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ get_boolean_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_boolean_values ( DDS::BooleanSeq value,
DDS::MemberId  id 
)

Definition at line 3905 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3906 {
3907  ACE_UNUSED_ARG(value);
3908  ACE_UNUSED_ARG(id);
3909  return DDS::RETCODE_UNSUPPORTED;
3910 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_byte_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_byte_value ( CORBA::Octet value,
DDS::MemberId  id 
)

Definition at line 3116 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK.

Referenced by read_basic_value().

3117 {
3118  ACE_OutputCDR::from_octet from_octet(0);
3119  const DDS::ReturnCode_t rc = get_single_value<TK_BYTE>(from_octet, id);
3120  if (rc == DDS::RETCODE_OK) {
3121  value = from_octet.val_;
3122  }
3123  return rc;
3124 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_OK

◆ get_byte_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_byte_values ( DDS::ByteSeq value,
DDS::MemberId  id 
)

Definition at line 3898 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3899 {
3900  ACE_UNUSED_ARG(value);
3901  ACE_UNUSED_ARG(id);
3902  return DDS::RETCODE_UNSUPPORTED;
3903 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_char16_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_char16_value ( CORBA::WChar value,
DDS::MemberId  id 
)

Definition at line 3107 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED, and value.

Referenced by read_basic_value().

3108 {
3109 #ifdef DDS_HAS_WCHAR
3110  return get_char_common<TK_CHAR16, TK_STRING16, ACE_OutputCDR::from_wchar>(value, id);
3111 #else
3112  return DDS::RETCODE_UNSUPPORTED;
3113 #endif
3114 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_char16_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_char16_values ( DDS::WcharSeq value,
DDS::MemberId  id 
)

Definition at line 3891 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3892 {
3893  ACE_UNUSED_ARG(value);
3894  ACE_UNUSED_ARG(id);
3895  return DDS::RETCODE_UNSUPPORTED;
3896 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_char8_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_char8_value ( CORBA::Char value,
DDS::MemberId  id 
)

Definition at line 3102 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

3103 {
3104  return get_char_common<TK_CHAR8, TK_STRING8, ACE_OutputCDR::from_char>(value, id);
3105 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_char8_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_char8_values ( DDS::CharSeq value,
DDS::MemberId  id 
)

Definition at line 3884 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3885 {
3886  ACE_UNUSED_ARG(value);
3887  ACE_UNUSED_ARG(id);
3888  return DDS::RETCODE_UNSUPPORTED;
3889 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_char_common()

template<TypeKind CharKind, TypeKind StringKind, typename FromCharT , typename CharT >
DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_char_common ( CharT &  value,
DDS::MemberId  id 
)
private

Definition at line 3028 of file DynamicDataImpl.cpp.

References ACE_ERROR, container_, LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, read_basic_member(), DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::XTypes::typekind_to_string().

3029 {
3030  const TypeKind tk = type_->get_kind();
3031  bool good = true;
3032  switch (tk) {
3033  case CharKind: {
3034  if (id != MEMBER_ID_INVALID) {
3035  good = false;
3036  break;
3037  }
3038  DataContainer::const_single_iterator it = container_.single_map_.find(id);
3039  if (it != container_.single_map_.end()) {
3040  FromCharT from_char = it->second.get<FromCharT>();
3041  value = from_char.val_;
3042  } else {
3043  FromCharT from_char('\0');
3045  value = from_char.val_;
3046  }
3047  break;
3048  }
3049  case StringKind: {
3050  FromCharT from_char('\0');
3051  good = read_basic_member(from_char, id);
3052  if (good) {
3053  value = from_char.val_;
3054  }
3055  break;
3056  }
3057  case TK_STRUCTURE: {
3058  FromCharT from_char('\0');
3059  good = get_value_from_struct<CharKind>(from_char, id);
3060  if (good) {
3061  value = from_char.val_;
3062  }
3063  break;
3064  }
3065  case TK_UNION: {
3066  FromCharT from_char('\0');
3067  good = get_value_from_union<CharKind>(from_char, id);
3068  if (good) {
3069  value = from_char.val_;
3070  }
3071  break;
3072  }
3073  case TK_SEQUENCE:
3074  case TK_ARRAY: {
3075  FromCharT from_char('\0');
3076  good = get_value_from_collection<CharKind>(from_char, id);
3077  if (good) {
3078  value = from_char.val_;
3079  }
3080  break;
3081  }
3082  case TK_MAP:
3083  if (log_level >= LogLevel::Notice) {
3084  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_char_common:"
3085  " Map is currently not supported\n"));
3086  }
3087  good = false;
3088  break;
3089  default:
3090  good = false;
3091  break;
3092  }
3093 
3094  if (!good && log_level >= LogLevel::Notice) {
3095  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_char_common::"
3096  " Failed to read a value of type %C from a DynamicData object of type %C\n",
3097  typekind_to_string(CharKind), typekind_to_string(tk)));
3098  }
3099  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
3100 }
bool read_basic_member(ValueType &value, DDS::MemberId id)
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const char * typekind_to_string(TypeKind tk)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ get_complex_from_aggregated()

bool OpenDDS::XTypes::DynamicDataImpl::get_complex_from_aggregated ( DDS::DynamicData_var &  value,
DDS::MemberId  id,
FoundStatus found_status 
)
private

Definition at line 3553 of file DynamicDataImpl.cpp.

References container_, DynamicDataImpl(), FOUND_IN_COMPLEX_MAP, FOUND_IN_NON_COMPLEX_MAP, OpenDDS::XTypes::get_base_type(), move_sequence_to_complex(), move_single_to_complex(), NOT_FOUND, DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by get_complex_from_struct(), and get_complex_from_union().

3555 {
3556  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
3557  if (complex_it != container_.complex_map_.end()) {
3558  value = DDS::DynamicData::_duplicate(complex_it->second);
3559  found_status = FOUND_IN_COMPLEX_MAP;
3560  return true;
3561  }
3562 
3563  DDS::DynamicTypeMember_var dtm;
3564  if (type_->get_member(dtm, id) != DDS::RETCODE_OK) {
3565  return false;
3566  }
3567  DDS::MemberDescriptor_var md;
3568  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
3569  return false;
3570  }
3571  DDS::DynamicType_var member_type = get_base_type(md->type());
3572  DynamicDataImpl* dd_impl = new DynamicDataImpl(member_type);
3573  DDS::DynamicData_var dd_var = dd_impl;
3574 
3575  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
3576  if (single_it != container_.single_map_.end()) {
3577  if (!move_single_to_complex(single_it, dd_impl)) {
3578  return false;
3579  }
3580  found_status = FOUND_IN_NON_COMPLEX_MAP;
3581  } else {
3582  DataContainer::const_sequence_iterator sequence_it = container_.sequence_map_.find(id);
3583  if (sequence_it != container_.sequence_map_.end()) {
3584  if (!move_sequence_to_complex(sequence_it, dd_impl)) {
3585  return false;
3586  }
3587  found_status = FOUND_IN_NON_COMPLEX_MAP;
3588  } else {
3589  found_status = NOT_FOUND;
3590  }
3591  }
3592  value = dd_var;
3593  return true;
3594 }
bool move_single_to_complex(const DataContainer::const_single_iterator &it, DynamicDataImpl *data)
const LogLevel::Value value
Definition: debug.cpp:61
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DynamicDataImpl(DDS::DynamicType_ptr type)
bool move_sequence_to_complex(const DataContainer::const_sequence_iterator &it, DynamicDataImpl *data)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const ReturnCode_t RETCODE_OK

◆ get_complex_from_collection()

bool OpenDDS::XTypes::DynamicDataImpl::get_complex_from_collection ( DDS::DynamicData_ptr &  value,
DDS::MemberId  id 
)
private

Definition at line 3737 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::bound_total(), container_, DynamicDataImpl(), insert_complex(), move_sequence_to_complex(), move_single_to_complex(), CORBA::release(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::XTypes::DynamicDataBase::type_desc_.

Referenced by get_complex_value().

3738 {
3739  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
3740  if (complex_it != container_.complex_map_.end()) {
3742  value = DDS::DynamicData::_duplicate(complex_it->second);
3743  return true;
3744  }
3745 
3746  if (type_->get_kind() == TK_ARRAY && id >= bound_total(type_desc_)) {
3747  return false;
3748  }
3749 
3750  DynamicDataImpl* dd_impl = new DynamicDataImpl(type_desc_->element_type());
3751  DDS::DynamicData_var dd_var = dd_impl;
3752 
3753  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
3754  if (single_it != container_.single_map_.end()) {
3755  if (!move_single_to_complex(single_it, dd_impl)) {
3756  return false;
3757  }
3758  } else {
3759  DataContainer::const_sequence_iterator sequence_it = container_.sequence_map_.find(id);
3760  if (sequence_it != container_.sequence_map_.end()) {
3761  if (!move_sequence_to_complex(sequence_it, dd_impl)) {
3762  return false;
3763  }
3764  }
3765  }
3766  insert_complex(id, dd_var);
3768  value = DDS::DynamicData::_duplicate(dd_var);
3769  return true;
3770 }
bool move_single_to_complex(const DataContainer::const_single_iterator &it, DynamicDataImpl *data)
const LogLevel::Value value
Definition: debug.cpp:61
void release(T x)
DynamicDataImpl(DDS::DynamicType_ptr type)
DDS::TypeDescriptor_var type_desc_
bool move_sequence_to_complex(const DataContainer::const_sequence_iterator &it, DynamicDataImpl *data)
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)

◆ get_complex_from_struct()

bool OpenDDS::XTypes::DynamicDataImpl::get_complex_from_struct ( DDS::DynamicData_ptr &  value,
DDS::MemberId  id 
)
private

Definition at line 3596 of file DynamicDataImpl.cpp.

References FOUND_IN_NON_COMPLEX_MAP, get_complex_from_aggregated(), insert_complex(), NOT_FOUND, and CORBA::release().

Referenced by get_complex_value().

3597 {
3598  FoundStatus found_status = NOT_FOUND;
3599  DDS::DynamicData_var dd_var;
3600  if (!get_complex_from_aggregated(dd_var, id, found_status)) {
3601  return false;
3602  }
3603 
3604  if (found_status == FOUND_IN_NON_COMPLEX_MAP || found_status == NOT_FOUND) {
3605  insert_complex(id, dd_var);
3606  }
3608  value = DDS::DynamicData::_duplicate(dd_var);
3609  return true;
3610 }
const LogLevel::Value value
Definition: debug.cpp:61
void release(T x)
bool get_complex_from_aggregated(DDS::DynamicData_var &value, DDS::MemberId id, FoundStatus &found_status)
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)

◆ get_complex_from_union()

bool OpenDDS::XTypes::DynamicDataImpl::get_complex_from_union ( DDS::DynamicData_ptr &  value,
DDS::MemberId  id 
)
private

Definition at line 3658 of file DynamicDataImpl.cpp.

References ACE_ERROR, clear_value_i(), container_, OpenDDS::XTypes::DISCRIMINATOR_ID, DynamicDataImpl(), FOUND_IN_NON_COMPLEX_MAP, OpenDDS::XTypes::get_base_type(), get_complex_from_aggregated(), OpenDDS::XTypes::DynamicDataBase::get_selected_union_branch(), insert_complex(), insert_valid_discriminator(), LM_NOTICE, OpenDDS::DCPS::log_level, NOT_FOUND, OpenDDS::DCPS::LogLevel::Notice, CORBA::release(), DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_discriminator_value(), OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, and write_discriminator().

Referenced by get_complex_value().

3659 {
3660  FoundStatus found_status = NOT_FOUND;
3661  DDS::DynamicData_var dd_var;
3662  if (!get_complex_from_aggregated(dd_var, id, found_status)) {
3663  return false;
3664  }
3665  if (found_status != NOT_FOUND) {
3666  if (found_status == FOUND_IN_NON_COMPLEX_MAP) {
3667  insert_complex(id, dd_var);
3668  }
3670  value = DDS::DynamicData::_duplicate(dd_var);
3671  return true;
3672  }
3673 
3674  // Requested member with the given Id is not present in the container.
3675  if (id == DISCRIMINATOR_ID) {
3676  DDS::DynamicType_var disc_type = get_base_type(type_desc_->discriminator_type());
3677  CORBA::Long disc_value;
3678  if (!container_.set_default_discriminator_value(disc_value, disc_type)) {
3679  return false;
3680  }
3681  bool found_selected_member = false;
3682  DDS::MemberDescriptor_var selected_md;
3683  const DDS::ReturnCode_t rc =
3684  get_selected_union_branch(disc_value, found_selected_member, selected_md);
3685  if (rc != DDS::RETCODE_OK) {
3686  if (log_level >= LogLevel::Notice) {
3687  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_complex_from_union:"
3688  " get_selected_union_branch failed: %C\n", retcode_to_string(rc)));
3689  }
3690  return false;
3691  }
3692  DynamicDataImpl* dd_impl = new DynamicDataImpl(disc_type);
3693  DDS::DynamicData_var dd_var = dd_impl;
3694  dd_impl->write_discriminator(disc_value);
3696  if (found_selected_member && !selected_md->is_optional()) {
3697  DDS::DynamicType_var selected_type = get_base_type(selected_md->type());
3698  if (clear_value_i(selected_md->id(), selected_type) != DDS::RETCODE_OK) {
3699  return false;
3700  }
3701  }
3703  value = DDS::DynamicData::_duplicate(dd_var);
3704  } else {
3705  DataContainer::const_single_iterator single_it = container_.single_map_.find(DISCRIMINATOR_ID);
3706  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(DISCRIMINATOR_ID);
3707  const bool has_disc = single_it != container_.single_map_.end() ||
3708  complex_it != container_.complex_map_.end();
3709  if (has_disc) {
3710  if (log_level >= LogLevel::Notice) {
3711  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_complex_from_union:"
3712  " Branch Id %u is not the active branch in the union\n", id));
3713  }
3714  return false;
3715  }
3716  DDS::DynamicTypeMember_var dtm;
3717  if (type_->get_member(dtm, id) != DDS::RETCODE_OK) {
3718  return false;
3719  }
3720  DDS::MemberDescriptor_var md;
3721  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
3722  return false;
3723  }
3724  // An empty DynamicData object implicitly contains default value of the associated type.
3725  DynamicDataImpl* dd_impl = new DynamicDataImpl(md->type());
3726  DDS::DynamicData_var dd_var = dd_impl;
3727  if (!insert_valid_discriminator(md)) {
3728  return false;
3729  }
3730  insert_complex(id, dd_var);
3732  value = DDS::DynamicData::_duplicate(dd_var);
3733  }
3734  return true;
3735 }
ACE_CDR::Long Long
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
void release(T x)
bool insert_valid_discriminator(DDS::MemberDescriptor *memberSelected)
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
DynamicDataImpl(DDS::DynamicType_ptr type)
DDS::ReturnCode_t clear_value_i(DDS::MemberId id, const DDS::DynamicType_var &member_type)
DDS::TypeDescriptor_var type_desc_
bool get_complex_from_aggregated(DDS::DynamicData_var &value, DDS::MemberId id, FoundStatus &found_status)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
OpenDDS_Dcps_Export LogLevel log_level
bool set_default_discriminator_value(CORBA::Long &value, const DDS::DynamicType_var &disc_type) const
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
const ReturnCode_t RETCODE_OK
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)
DDS::ReturnCode_t get_selected_union_branch(DDS::Int32 disc, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const

◆ get_complex_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_complex_value ( DDS::DynamicData_ptr &  value,
DDS::MemberId  id 
)

Definition at line 3772 of file DynamicDataImpl.cpp.

References ACE_ERROR, get_complex_from_collection(), get_complex_from_struct(), get_complex_from_union(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::XTypes::typekind_to_string().

3773 {
3774  const TypeKind tk = type_->get_kind();
3775  bool good = true;
3776  switch (tk) {
3777  case TK_STRUCTURE:
3778  good = get_complex_from_struct(value, id);
3779  break;
3780  case TK_UNION:
3781  good = get_complex_from_union(value, id);
3782  break;
3783  case TK_SEQUENCE:
3784  case TK_ARRAY:
3785  good = get_complex_from_collection(value, id);
3786  break;
3787  case TK_MAP:
3788  if (log_level >= LogLevel::Notice) {
3789  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_complex_value:"
3790  " Map is currently not supported\n"));
3791  }
3792  good = false;
3793  break;
3794  default:
3795  good = false;
3796  break;
3797  }
3798 
3799  if (!good && log_level >= LogLevel::Notice) {
3800  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_complex_value:"
3801  " Failed to read a complex value from a DynamicData object of type %C\n",
3802  typekind_to_string(tk)));
3803  }
3804  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
3805 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
bool get_complex_from_union(DDS::DynamicData_ptr &value, DDS::MemberId id)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
bool get_complex_from_struct(DDS::DynamicData_ptr &value, DDS::MemberId id)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const char * typekind_to_string(TypeKind tk)
bool get_complex_from_collection(DDS::DynamicData_ptr &value, DDS::MemberId id)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ get_float128_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_float128_value ( CORBA::LongDouble value,
DDS::MemberId  id 
)

Definition at line 3022 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

3023 {
3024  return get_single_value<TK_FLOAT128>(value, id);
3025 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_float128_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_float128_values ( DDS::Float128Seq value,
DDS::MemberId  id 
)

Definition at line 3877 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3878 {
3879  ACE_UNUSED_ARG(value);
3880  ACE_UNUSED_ARG(id);
3881  return DDS::RETCODE_UNSUPPORTED;
3882 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_float32_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_float32_value ( CORBA::Float value,
DDS::MemberId  id 
)

Definition at line 3012 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

3013 {
3014  return get_single_value<TK_FLOAT32>(value, id);
3015 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_float32_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_float32_values ( DDS::Float32Seq value,
DDS::MemberId  id 
)

Definition at line 3863 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3864 {
3865  ACE_UNUSED_ARG(value);
3866  ACE_UNUSED_ARG(id);
3867  return DDS::RETCODE_UNSUPPORTED;
3868 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_float64_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_float64_value ( CORBA::Double value,
DDS::MemberId  id 
)

Definition at line 3017 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

3018 {
3019  return get_single_value<TK_FLOAT64>(value, id);
3020 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_float64_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_float64_values ( DDS::Float64Seq value,
DDS::MemberId  id 
)

Definition at line 3870 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3871 {
3872  ACE_UNUSED_ARG(value);
3873  ACE_UNUSED_ARG(id);
3874  return DDS::RETCODE_UNSUPPORTED;
3875 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_int16_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int16_value ( CORBA::Short value,
DDS::MemberId  id 
)

Definition at line 2982 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

2983 {
2984  return get_single_value<TK_INT16>(value, id);
2985 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_int16_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int16_values ( DDS::Int16Seq value,
DDS::MemberId  id 
)

Definition at line 3835 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3836 {
3837  ACE_UNUSED_ARG(value);
3838  ACE_UNUSED_ARG(id);
3839  return DDS::RETCODE_UNSUPPORTED;
3840 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_int32_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int32_value ( CORBA::Long value,
DDS::MemberId  id 
)

Definition at line 2992 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

2993 {
2994  return get_single_value<TK_INT32>(value, id);
2995 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_int32_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int32_values ( DDS::Int32Seq value,
DDS::MemberId  id 
)

Definition at line 3807 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3808 {
3809  ACE_UNUSED_ARG(value);
3810  ACE_UNUSED_ARG(id);
3811  return DDS::RETCODE_UNSUPPORTED;
3812 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_int64_value_impl()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int64_value_impl ( CORBA::LongLong value,
DDS::MemberId  id 
)

Definition at line 3002 of file DynamicDataImpl.cpp.

References value.

3003 {
3004  return get_single_value<TK_INT64>(value, id);
3005 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_int64_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int64_values ( DDS::Int64Seq value,
DDS::MemberId  id 
)

Definition at line 3849 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3850 {
3851  ACE_UNUSED_ARG(value);
3852  ACE_UNUSED_ARG(id);
3853  return DDS::RETCODE_UNSUPPORTED;
3854 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_int8_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int8_value ( CORBA::Int8 value,
DDS::MemberId  id 
)

Definition at line 2962 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK.

Referenced by read_basic_value().

2963 {
2964  ACE_OutputCDR::from_int8 from_int8(0);
2965  const DDS::ReturnCode_t rc = get_single_value<TK_INT8>(from_int8, id);
2966  if (rc == DDS::RETCODE_OK) {
2967  value = from_int8.val_;
2968  }
2969  return rc;
2970 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_OK

◆ get_int8_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_int8_values ( DDS::Int8Seq value,
DDS::MemberId  id 
)

Definition at line 3821 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3822 {
3823  ACE_UNUSED_ARG(value);
3824  ACE_UNUSED_ARG(id);
3825  return DDS::RETCODE_UNSUPPORTED;
3826 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_item_count()

ACE_CDR::ULong OpenDDS::XTypes::DynamicDataImpl::get_item_count ( )

Implements DDS::DynamicData.

Definition at line 190 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::bound_total(), container_, OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_index_basic(), OpenDDS::XTypes::DynamicDataBase::get_selected_union_branch(), get_sequence_size(), LM_WARNING, OpenDDS::DCPS::log_level, DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_discriminator_value(), 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_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, 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_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and OpenDDS::DCPS::LogLevel::Warning.

191 {
192  const TypeKind tk = type_->get_kind();
193  switch (tk) {
194  case TK_BOOLEAN:
195  case TK_BYTE:
196  case TK_UINT8:
197  case TK_UINT16:
198  case TK_UINT32:
199  case TK_UINT64:
200  case TK_INT8:
201  case TK_INT16:
202  case TK_INT32:
203  case TK_INT64:
204  case TK_FLOAT32:
205  case TK_FLOAT64:
206  case TK_FLOAT128:
207  case TK_CHAR8:
208 #ifdef DDS_HAS_WCHAR
209  case TK_CHAR16:
210 #endif
211  case TK_ENUM:
212  return 1;
213  case TK_STRING8:
214 #ifdef DDS_HAS_WCHAR
215  case TK_STRING16:
216 #endif
217  {
218  if (!container_.single_map_.empty() || !container_.complex_map_.empty()) {
219  CORBA::ULong largest_index;
220  if (!container_.get_largest_index_basic(largest_index)) {
221  return 0;
222  }
223  return largest_index + 1;
224  }
225  return 0;
226  }
227  case TK_SEQUENCE:
228  return get_sequence_size();
229  case TK_BITMASK:
230  return static_cast<ACE_CDR::ULong>(container_.single_map_.size() +
231  container_.complex_map_.size());
232  case TK_ARRAY:
233  return bound_total(type_desc_);
234  case TK_STRUCTURE: {
235  const CORBA::ULong member_count = type_->get_member_count();
236  CORBA::ULong count = member_count;
237  // An optional member that hasn't been set is considered missing.
238  // All non-optional members are counted since they either are set directly
239  // or hold default values (XTypes spec 7.5.2.11.6).
240  for (CORBA::ULong i = 0; i < member_count; ++i) {
241  DDS::DynamicTypeMember_var dtm;
242  if (type_->get_member_by_index(dtm, i) != DDS::RETCODE_OK) {
243  return 0;
244  }
245  DDS::MemberDescriptor_var md;
246  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
247  return 0;
248  }
249  if (md->is_optional()) {
250  const DDS::MemberId id = md->id();
251  if (container_.single_map_.find(id) == container_.single_map_.end() &&
252  container_.sequence_map_.find(id) == container_.sequence_map_.end() &&
253  container_.complex_map_.find(id) == container_.complex_map_.end()) {
254  --count;
255  }
256  }
257  }
258  return count;
259  }
260  case TK_UNION: {
261  CORBA::ULong count = static_cast<CORBA::ULong>(container_.single_map_.size() +
262  container_.sequence_map_.size() +
263  container_.complex_map_.size());
264  if (count > 0) {
265  return count;
266  }
267  DDS::DynamicType_var disc_type = get_base_type(type_desc_->discriminator_type());
268  CORBA::Long disc_val;
269  if (!container_.set_default_discriminator_value(disc_val, disc_type)) {
270  if (log_level >= LogLevel::Warning) {
271  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::get_item_count:"
272  " set_default_discriminator_value failed\n"));
273  }
274  return 0;
275  }
276  bool select_a_member;
277  DDS::MemberDescriptor_var selected_md;
278  const DDS::ReturnCode_t rc = get_selected_union_branch(disc_val, select_a_member, selected_md);
279  if (rc != DDS::RETCODE_OK) {
280  if (log_level >= LogLevel::Warning) {
281  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::get_item_count:"
282  " get_selected_union_branch failed: %C\n", retcode_to_string(rc)));
283  }
284  return 0;
285  }
286  return select_a_member ? 2 : 1;
287  }
288  case TK_MAP:
289  case TK_BITSET:
290  case TK_ALIAS:
291  case TK_ANNOTATION:
292  default:
293  if (log_level >= LogLevel::Warning) {
294  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::get_item_count:"
295  " Encounter unexpected type kind %C\n", typekind_to_string(tk)));
296  }
297  return 0;
298  }
299 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_CDR::Long Long
#define ACE_ERROR(X)
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UNION
Definition: TypeObject.h:244
const TypeKind TK_INT16
Definition: TypeObject.h:216
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const TypeKind TK_UINT16
Definition: TypeObject.h:219
DDS::TypeDescriptor_var type_desc_
const TypeKind TK_INT8
Definition: TypeObject.h:225
CORBA::ULong get_sequence_size() const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
ACE_UINT32 ULong
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export LogLevel log_level
bool get_largest_index_basic(CORBA::ULong &index) const
const TypeKind TK_INT64
Definition: TypeObject.h:218
bool set_default_discriminator_value(CORBA::Long &value, const DDS::DynamicType_var &disc_type) const
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ALIAS
Definition: TypeObject.h:235
const TypeKind TK_ANNOTATION
Definition: TypeObject.h:242
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_MAP
Definition: TypeObject.h:250
DDS::ReturnCode_t get_selected_union_branch(DDS::Int32 disc, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
const TypeKind TK_BITSET
Definition: TypeObject.h:245

◆ get_member_id_at_index()

DDS::MemberId OpenDDS::XTypes::DynamicDataImpl::get_member_id_at_index ( ACE_CDR::ULong  index)

Definition at line 49 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::bound_total(), OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::DynamicDataBase::get_selected_union_branch(), LM_NOTICE, LM_WARNING, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, 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_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and OpenDDS::DCPS::LogLevel::Warning.

50 {
51  const TypeKind tk = type_->get_kind();
52  switch (tk) {
53  case TK_BOOLEAN:
54  case TK_BYTE:
55  case TK_INT16:
56  case TK_INT32:
57  case TK_INT64:
58  case TK_UINT16:
59  case TK_UINT32:
60  case TK_UINT64:
61  case TK_FLOAT32:
62  case TK_FLOAT64:
63  case TK_FLOAT128:
64  case TK_INT8:
65  case TK_UINT8:
66  case TK_CHAR8:
67 #ifdef DDS_HAS_WCHAR
68  case TK_CHAR16:
69 #endif
70  case TK_ENUM:
71  // Value of enum or primitive types can be indicated by Id MEMBER_ID_INVALID
72  // or by index 0 (Section 7.5.2.11.1).
73  if (index != 0 && log_level >= LogLevel::Notice) {
74  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_member_id_at_index:"
75  " Received invalid index (%u) for type %C\n", index, typekind_to_string(tk)));
76  }
77  return MEMBER_ID_INVALID;
78  case TK_BITMASK:
79  // TODO: Bitmask type needs improvement. See comments in set_single_value method.
80  return MEMBER_ID_INVALID;
81  case TK_STRING8:
82 #ifdef DDS_HAS_WCHAR
83  case TK_STRING16:
84 #endif
85  case TK_SEQUENCE: {
86  const CORBA::ULong bound = type_desc_->bound()[0];
87  if (bound > 0 && index >= bound) {
88  if (log_level >= LogLevel::Notice) {
89  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_member_id_at_index:"
90  " Input index (%u) is out-of-bound (bound is %u)\n", index, bound));
91  }
92  return MEMBER_ID_INVALID;
93  }
94  return index;
95  }
96  case TK_ARRAY: {
97  const DDS::UInt32 length = bound_total(type_desc_);
98  if (index >= length) {
99  if (log_level >= LogLevel::Notice) {
100  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_member_id_at_index:"
101  " Input index (%u) is out-of-bound (array length is %u)\n", index, length));
102  }
103  return MEMBER_ID_INVALID;
104  }
105  return index;
106  }
107  case TK_MAP:
108  if (log_level >= LogLevel::Notice) {
109  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_member_id_at_index:"
110  " Map is currently not supported\n"));
111  }
112  return MEMBER_ID_INVALID;
113  case TK_STRUCTURE: {
114  DDS::DynamicTypeMember_var dtm;
115  if (type_->get_member_by_index(dtm, index) != DDS::RETCODE_OK) {
116  return MEMBER_ID_INVALID;
117  }
118  return dtm->get_id();
119  }
120  case TK_UNION: {
121  if (index == 0) {
122  return DISCRIMINATOR_ID;
123  }
124  bool select_a_member;
125  DDS::MemberDescriptor_var selected_md;
126  const DDS::ReturnCode_t rc = get_selected_union_branch(select_a_member, selected_md);
127  if (rc != DDS::RETCODE_OK) {
128  if (log_level >= LogLevel::Warning) {
129  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::get_member_id_at_index:"
130  " get_selected_union_branch failed: %C\n", retcode_to_string(rc)));
131  }
132  return MEMBER_ID_INVALID;
133  }
134  if (index == 1 && select_a_member) {
135  return selected_md->id();
136  }
137  if (log_level >= LogLevel::Warning) {
138  ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: DynamicDataImpl::get_member_id_at_index:"
139  " invalid index: %u\n", index));
140  }
141  return MEMBER_ID_INVALID;
142  }
143  }
144 
145  if (log_level >= LogLevel::Notice) {
146  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_member_id_at_index:"
147  " Calling on an unexpected type %C\n", typekind_to_string(tk)));
148  }
149  return MEMBER_ID_INVALID;
150 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UNION
Definition: TypeObject.h:244
const TypeKind TK_INT16
Definition: TypeObject.h:216
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
const TypeKind TK_UINT16
Definition: TypeObject.h:219
DDS::TypeDescriptor_var type_desc_
const TypeKind TK_INT8
Definition: TypeObject.h:225
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export LogLevel log_level
const TypeKind TK_INT64
Definition: TypeObject.h:218
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_MAP
Definition: TypeObject.h:250
DDS::ReturnCode_t get_selected_union_branch(DDS::Int32 disc, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223

◆ get_sequence_size()

CORBA::ULong OpenDDS::XTypes::DynamicDataImpl::get_sequence_size ( ) const
private

Definition at line 152 of file DynamicDataImpl.cpp.

References container_, OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_index_basic(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_sequence_index(), OpenDDS::XTypes::TK_SEQUENCE, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by clear_value(), and get_item_count().

153 {
154  if (type_->get_kind() != TK_SEQUENCE) {
155  return 0;
156  }
157 
158  if (!container_.single_map_.empty() || !container_.complex_map_.empty()) {
159  CORBA::ULong largest_index;
160  if (!container_.get_largest_index_basic(largest_index)) {
161  return 0;
162  }
163  if (!container_.sequence_map_.empty()) {
164  CORBA::ULong largest_seq_index;
165  if (!container_.get_largest_sequence_index(largest_seq_index)) {
166  return 0;
167  }
168  largest_index = std::max(largest_index, largest_seq_index);
169  }
170  return largest_index + 1;
171  } else if (!container_.sequence_map_.empty()) {
172  CORBA::ULong largest_index;
173  if (!container_.get_largest_sequence_index(largest_index)) {
174  return 0;
175  }
176  return largest_index + 1;
177  }
178  return 0;
179 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
bool get_largest_sequence_index(CORBA::ULong &index) const
ACE_CDR::ULong ULong
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
bool get_largest_index_basic(CORBA::ULong &index) const

◆ get_simple_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_simple_value ( DCPS::Value value,
DDS::MemberId  id 
)
virtual

Reimplemented from OpenDDS::XTypes::DynamicDataBase.

Definition at line 1996 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::get_base_type(), get_simple_value_boolean(), get_simple_value_char(), get_simple_value_enum(), get_simple_value_string(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_FLOAT128, OpenDDS::XTypes::TK_FLOAT64, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::typekind_to_string(), and value.

1997 {
1998  DDS::DynamicTypeMember_var dtm;
1999  if (type_->get_member(dtm, id) != DDS::RETCODE_OK) {
2000  return DDS::RETCODE_ERROR;
2001  }
2002  DDS::MemberDescriptor_var md;
2003  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
2004  return DDS::RETCODE_ERROR;
2005  }
2006  DDS::DynamicType_var member_type = get_base_type(md->type());
2007  const TypeKind member_kind = member_type->get_kind();
2008  switch (member_kind) {
2009  case TK_BOOLEAN:
2010  return get_simple_value_boolean(value, id);
2011  case TK_INT32:
2012  return get_simple_value_primitive<CORBA::Long>(value, id);
2013  case TK_UINT32:
2014  return get_simple_value_primitive<CORBA::ULong>(value, id);
2015  case TK_INT64:
2016  return get_simple_value_primitive<CORBA::LongLong>(value, id);
2017  case TK_UINT64:
2018  return get_simple_value_primitive<CORBA::ULongLong>(value, id);
2019  case TK_CHAR8:
2020  return get_simple_value_char(value, id);
2021  case TK_FLOAT64:
2022  return get_simple_value_primitive<CORBA::Double>(value, id);
2023  case TK_FLOAT128:
2024  return get_simple_value_primitive<CORBA::LongDouble>(value, id);
2025  case TK_STRING8:
2026  return get_simple_value_string(value, id);
2027  case TK_ENUM:
2028  return get_simple_value_enum(value, id);
2029  default:
2030  if (log_level >= LogLevel::Notice) {
2031  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_simple_value:"
2032  " Member type %C is not supported by DCPS::Value\n",
2033  typekind_to_string(member_kind)));
2034  }
2035  }
2036  return DDS::RETCODE_ERROR;
2037 }
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
DDS::ReturnCode_t get_simple_value_boolean(DCPS::Value &value, DDS::MemberId id) const
DDS::ReturnCode_t get_simple_value_enum(DCPS::Value &value, DDS::MemberId id) const
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const char * typekind_to_string(TypeKind tk)
DDS::ReturnCode_t get_simple_value_string(DCPS::Value &value, DDS::MemberId id) const
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export LogLevel log_level
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const ReturnCode_t RETCODE_ERROR
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_simple_value_char(DCPS::Value &value, DDS::MemberId id) const
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223

◆ get_simple_value_boolean()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_simple_value_boolean ( DCPS::Value value,
DDS::MemberId  id 
) const
private

Definition at line 1875 of file DynamicDataImpl.cpp.

References container_, OpenDDS::DCPS::Value::get(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

Referenced by get_simple_value().

1877 {
1878  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
1879  if (single_it != container_.single_map_.end()) {
1880  value = single_it->second.get<ACE_OutputCDR::from_boolean>().val_;
1881  return DDS::RETCODE_OK;
1882  }
1883  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
1884  if (complex_it != container_.complex_map_.end()) {
1885  const DynamicDataImpl* inner_dd = dynamic_cast<DynamicDataImpl*>(complex_it->second.in());
1886  if (!inner_dd) {
1887  return DDS::RETCODE_ERROR;
1888  }
1889  DataContainer::const_single_iterator inner_it =
1890  inner_dd->container_.single_map_.find(MEMBER_ID_INVALID);
1891  if (inner_it != inner_dd->container_.single_map_.end()) {
1892  value = inner_it->second.get<ACE_OutputCDR::from_boolean>().val_;
1893  return DDS::RETCODE_OK;
1894  }
1895  }
1896  return DDS::RETCODE_ERROR;
1897 }
const LogLevel::Value value
Definition: debug.cpp:61
DynamicDataImpl(DDS::DynamicType_ptr type)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK

◆ get_simple_value_char()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_simple_value_char ( DCPS::Value value,
DDS::MemberId  id 
) const
private

Definition at line 1899 of file DynamicDataImpl.cpp.

References container_, OpenDDS::DCPS::Value::get(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

Referenced by get_simple_value().

1901 {
1902  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
1903  if (single_it != container_.single_map_.end()) {
1904  value = single_it->second.get<ACE_OutputCDR::from_char>().val_;
1905  return DDS::RETCODE_OK;
1906  }
1907  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
1908  if (complex_it != container_.complex_map_.end()) {
1909  const DynamicDataImpl* inner_dd = dynamic_cast<DynamicDataImpl*>(complex_it->second.in());
1910  if (!inner_dd) {
1911  return DDS::RETCODE_ERROR;
1912  }
1913  DataContainer::const_single_iterator inner_it =
1914  inner_dd->container_.single_map_.find(MEMBER_ID_INVALID);
1915  if (inner_it != inner_dd->container_.single_map_.end()) {
1916  value = inner_it->second.get<ACE_OutputCDR::from_char>().val_;
1917  return DDS::RETCODE_OK;
1918  }
1919  }
1920  return DDS::RETCODE_ERROR;
1921 }
const LogLevel::Value value
Definition: debug.cpp:61
DynamicDataImpl(DDS::DynamicType_ptr type)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK

◆ get_simple_value_enum()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_simple_value_enum ( DCPS::Value value,
DDS::MemberId  id 
) const
private

Definition at line 1971 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_enum_value(), OpenDDS::XTypes::get_enumerator_name(), OpenDDS::XTypes::get_member_type(), OpenDDS::XTypes::DynamicDataBase::interface_from_this(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by get_simple_value().

1973 {
1974  DDS::DynamicType_var mtype;
1975  DDS::ReturnCode_t ret = get_member_type(mtype, type_, id);
1976  if (ret != DDS::RETCODE_OK) {
1977  return ret;
1978  }
1979 
1980  DDS::Int32 enumAsInteger;
1981  ret = get_enum_value(enumAsInteger, mtype, interface_from_this(), id);
1982  if (ret != DDS::RETCODE_OK) {
1983  return ret;
1984  }
1985 
1986  DDS::String8_var str;
1987  ret = get_enumerator_name(str, enumAsInteger, mtype);
1988  if (ret != DDS::RETCODE_OK) {
1989  return ret;
1990  }
1991 
1992  value = str.in();
1993  return DDS::RETCODE_OK;
1994 }
const LogLevel::Value value
Definition: debug.cpp:61
DDS::ReturnCode_t get_member_type(DDS::DynamicType_var &member_type, DDS::DynamicType_ptr container_type, DDS::MemberId id)
DDS::ReturnCode_t get_enum_value(DDS::Int32 &value, DDS::DynamicType_ptr enum_type, DDS::DynamicData_ptr src, DDS::MemberId id)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
DDS::DynamicData * interface_from_this() const
DDS::ReturnCode_t get_enumerator_name(DDS::String8_var &name, DDS::Int32 value, DDS::DynamicType_ptr type)
const ReturnCode_t RETCODE_OK

◆ get_simple_value_primitive()

template<typename ValueType >
DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_simple_value_primitive ( DCPS::Value value,
DDS::MemberId  id 
) const
private

Definition at line 1924 of file DynamicDataImpl.cpp.

References container_, OpenDDS::DCPS::Value::get(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

1926 {
1927  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
1928  if (single_it != container_.single_map_.end()) {
1929  value = single_it->second.get<ValueType>();
1930  return DDS::RETCODE_OK;
1931  }
1932  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
1933  if (complex_it != container_.complex_map_.end()) {
1934  const DynamicDataImpl* inner_dd = dynamic_cast<DynamicDataImpl*>(complex_it->second.in());
1935  if (!inner_dd) {
1936  return DDS::RETCODE_ERROR;
1937  }
1938  DataContainer::const_single_iterator inner_it =
1939  inner_dd->container_.single_map_.find(MEMBER_ID_INVALID);
1940  if (inner_it != inner_dd->container_.single_map_.end()) {
1941  value = inner_it->second.get<ValueType>();
1942  return DDS::RETCODE_OK;
1943  }
1944  }
1945  return DDS::RETCODE_ERROR;
1946 }
const LogLevel::Value value
Definition: debug.cpp:61
DynamicDataImpl(DDS::DynamicType_ptr type)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK

◆ get_simple_value_string()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_simple_value_string ( DCPS::Value value,
DDS::MemberId  id 
) const
private

Definition at line 1948 of file DynamicDataImpl.cpp.

References container_, OpenDDS::DCPS::Value::get(), read_basic_value(), DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

Referenced by get_simple_value().

1950 {
1951  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
1952  if (single_it != container_.single_map_.end()) {
1953  value = single_it->second.get<const char*>();
1954  return DDS::RETCODE_OK;
1955  }
1956 
1957  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
1958  if (complex_it != container_.complex_map_.end()) {
1959  // The string member has its own DynamicData object.
1960  const DynamicDataImpl* str_dd = dynamic_cast<DynamicDataImpl*>(complex_it->second.in());
1961  char* str = 0;
1962  if (!str_dd || !str_dd->read_basic_value(str)) {
1963  return DDS::RETCODE_ERROR;
1964  }
1965  value = str;
1966  return DDS::RETCODE_OK;
1967  }
1968  return DDS::RETCODE_ERROR;
1969 }
const LogLevel::Value value
Definition: debug.cpp:61
DynamicDataImpl(DDS::DynamicType_ptr type)
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK

◆ get_single_value()

template<TypeKind ValueTypeKind, typename ValueType >
DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_single_value ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2914 of file DynamicDataImpl.cpp.

References ACE_ERROR, get_value_from_self(), OpenDDS::XTypes::DynamicDataBase::is_type_supported(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::typekind_to_string(), and value.

2915 {
2916  if (!is_type_supported(ValueTypeKind, "get_single_value")) {
2917  return DDS::RETCODE_ERROR;
2918  }
2919  const TypeKind tk = type_->get_kind();
2920  bool good = true;
2921 
2922  switch (tk) {
2923  case ValueTypeKind:
2924  good = get_value_from_self(value, id);
2925  break;
2926  case TK_ENUM:
2927  good = get_value_from_enum<ValueTypeKind>(value, id);
2928  break;
2929  case TK_BITMASK:
2930  good = get_value_from_bitmask<ValueTypeKind>(value, id);
2931  break;
2932  case TK_STRUCTURE:
2933  good = get_value_from_struct<ValueTypeKind>(value, id);
2934  break;
2935  case TK_UNION:
2936  good = get_value_from_union<ValueTypeKind>(value, id);
2937  break;
2938  case TK_SEQUENCE:
2939  case TK_ARRAY:
2940  good = get_value_from_collection<ValueTypeKind>(value, id);
2941  break;
2942  case TK_MAP:
2943  if (log_level >= LogLevel::Notice) {
2944  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_single_value:"
2945  " Map is currently not supported\n"));
2946  }
2947  good = false;
2948  break;
2949  default:
2950  good = false;
2951  break;
2952  }
2953 
2954  if (!good && log_level >= LogLevel::Notice) {
2955  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_single_value:"
2956  " Failed to read a value of type %C from a DynamicData object of type %C\n",
2957  typekind_to_string(ValueTypeKind), typekind_to_string(tk)));
2958  }
2959  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
2960 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
bool is_type_supported(TypeKind tk, const char *func_name)
Verify that a given type is primitive or string or wstring.
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool get_value_from_self(ValueType &value, DDS::MemberId id)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ get_string_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_string_value ( char *&  value,
DDS::MemberId  id 
)

Definition at line 3232 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataBase::enum_string_helper(), DDS::RETCODE_OK, and value.

3233 {
3234  if (enum_string_helper(value, id)) {
3235  return DDS::RETCODE_OK;
3236  }
3237 
3238  return get_single_value<TK_STRING8>(value, id);
3239 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_OK
bool enum_string_helper(char *&strInOut, MemberId id)

◆ get_string_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_string_values ( DDS::StringSeq value,
DDS::MemberId  id 
)

Definition at line 3912 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3913 {
3914  ACE_UNUSED_ARG(value);
3915  ACE_UNUSED_ARG(id);
3916  return DDS::RETCODE_UNSUPPORTED;
3917 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_uint16_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint16_value ( CORBA::UShort value,
DDS::MemberId  id 
)

Definition at line 2987 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

2988 {
2989  return get_single_value<TK_UINT16>(value, id);
2990 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_uint16_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint16_values ( DDS::UInt16Seq value,
DDS::MemberId  id 
)

Definition at line 3842 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3843 {
3844  ACE_UNUSED_ARG(value);
3845  ACE_UNUSED_ARG(id);
3846  return DDS::RETCODE_UNSUPPORTED;
3847 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_uint32_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint32_value ( CORBA::ULong value,
DDS::MemberId  id 
)

Definition at line 2997 of file DynamicDataImpl.cpp.

References value.

Referenced by read_basic_value().

2998 {
2999  return get_single_value<TK_UINT32>(value, id);
3000 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_uint32_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint32_values ( DDS::UInt32Seq value,
DDS::MemberId  id 
)

Definition at line 3814 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3815 {
3816  ACE_UNUSED_ARG(value);
3817  ACE_UNUSED_ARG(id);
3818  return DDS::RETCODE_UNSUPPORTED;
3819 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_uint64_value_impl()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint64_value_impl ( CORBA::ULongLong value,
DDS::MemberId  id 
)

Definition at line 3007 of file DynamicDataImpl.cpp.

References value.

3008 {
3009  return get_single_value<TK_UINT64>(value, id);
3010 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ get_uint64_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint64_values ( DDS::UInt64Seq value,
DDS::MemberId  id 
)

Definition at line 3856 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3857 {
3858  ACE_UNUSED_ARG(value);
3859  ACE_UNUSED_ARG(id);
3860  return DDS::RETCODE_UNSUPPORTED;
3861 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_uint8_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint8_value ( CORBA::UInt8 value,
DDS::MemberId  id 
)

Definition at line 2972 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK.

Referenced by read_basic_value().

2973 {
2974  ACE_OutputCDR::from_uint8 from_uint8(0);
2975  const DDS::ReturnCode_t rc = get_single_value<TK_UINT8>(from_uint8, id);
2976  if (rc == DDS::RETCODE_OK) {
2977  value = from_uint8.val_;
2978  }
2979  return rc;
2980 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_OK

◆ get_uint8_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_uint8_values ( DDS::UInt8Seq value,
DDS::MemberId  id 
)

Definition at line 3828 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3829 {
3830  ACE_UNUSED_ARG(value);
3831  ACE_UNUSED_ARG(id);
3832  return DDS::RETCODE_UNSUPPORTED;
3833 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_value_from_bitmask() [1/3]

template<TypeKind ValueTypeKind, typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_bitmask ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2727 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::bitmask_bound(), container_, OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_bitmask_value(), and OpenDDS::XTypes::DynamicDataBase::type_.

2728 {
2729  // Allow bitmask to be read as an unsigned integer.
2730  TypeKind treat_as_tk;
2731  const DDS::ReturnCode_t rc = bitmask_bound(type_, treat_as_tk);
2732  if (rc != DDS::RETCODE_OK || treat_as_tk != ValueTypeKind || id != MEMBER_ID_INVALID) {
2733  return false;
2734  }
2735  DataContainer::const_single_iterator it = container_.single_map_.find(MEMBER_ID_INVALID);
2736  if (it != container_.single_map_.end()) {
2737  value = it->second.get<ValueType>();
2738  } else {
2740  }
2741  return true;
2742 }
const LogLevel::Value value
Definition: debug.cpp:61
void set_default_bitmask_value(ACE_OutputCDR::from_uint8 &value) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t bitmask_bound(DDS::DynamicType_ptr type, DDS::TypeKind &bound_kind)

◆ get_value_from_bitmask() [2/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_bitmask ( char *&  ,
DDS::MemberId   
)
private

Definition at line 2745 of file DynamicDataImpl.cpp.

2746 {
2747  return false;
2748 }

◆ get_value_from_bitmask() [3/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_bitmask ( CORBA::WChar *&  ,
DDS::MemberId   
)
private

Definition at line 2750 of file DynamicDataImpl.cpp.

2751 {
2752  return false;
2753 }

◆ get_value_from_collection()

template<TypeKind ValueTypeKind, typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_collection ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2876 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::bitmask_bound(), OpenDDS::XTypes::bound_total(), container_, OpenDDS::XTypes::enum_bound(), OpenDDS::XTypes::get_base_type(), insert_single(), read_basic_member(), DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::DynamicDataBase::type_, and OpenDDS::XTypes::DynamicDataBase::type_desc_.

2877 {
2878  if (type_->get_kind() == TK_ARRAY && id >= bound_total(type_desc_)) {
2879  return false;
2880  }
2881 
2882  DDS::DynamicType_var elem_type = get_base_type(type_desc_->element_type());
2883  const TypeKind elem_tk = elem_type->get_kind();
2884  TypeKind treat_as_tk = elem_tk;
2885  switch (elem_tk) {
2886  case TK_ENUM:
2887  if (enum_bound(elem_type, treat_as_tk) != DDS::RETCODE_OK) {
2888  return false;
2889  }
2890  break;
2891  case TK_BITMASK: {
2892  if (bitmask_bound(elem_type, treat_as_tk) != DDS::RETCODE_OK) {
2893  return false;
2894  }
2895  break;
2896  }
2897  }
2898  if (treat_as_tk != ValueTypeKind) {
2899  return false;
2900  }
2901  if (read_basic_member(value, id)) {
2902  return true;
2903  }
2905 
2906  // Must insert this member in case it's index is larger than the current largest index,
2907  // so that all new members up to this member are serialized. Otherwise, we would be returning
2908  // a value that wouldn't be in the serialized data.
2909  insert_single(id, value);
2910  return true;
2911 }
bool read_basic_member(ValueType &value, DDS::MemberId id)
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DDS::TypeDescriptor_var type_desc_
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
DDS::ReturnCode_t enum_bound(DDS::DynamicType_ptr enum_type, DDS::TypeKind &bound_kind)
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
DDS::ReturnCode_t bitmask_bound(DDS::DynamicType_ptr type, DDS::TypeKind &bound_kind)

◆ get_value_from_enum() [1/3]

template<TypeKind ValueTypeKind, typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_enum ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2695 of file DynamicDataImpl.cpp.

References cast_to_enum_value(), container_, OpenDDS::XTypes::enum_bound(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_enum_value(), and OpenDDS::XTypes::DynamicDataBase::type_.

2696 {
2697  TypeKind treat_as_tk;
2698  const DDS::ReturnCode_t rc = enum_bound(type_, treat_as_tk);
2699  if (rc != DDS::RETCODE_OK || treat_as_tk != ValueTypeKind || id != MEMBER_ID_INVALID) {
2700  return false;
2701  }
2702  DataContainer::const_single_iterator it = container_.single_map_.find(MEMBER_ID_INVALID);
2703  if (it != container_.single_map_.end()) {
2704  value = it->second.get<ValueType>();
2705  } else {
2706  CORBA::Long enum_default_val;
2707  if (!container_.set_default_enum_value(type_, enum_default_val)) {
2708  return false;
2709  }
2710  cast_to_enum_value(value, enum_default_val);
2711  }
2712  return true;
2713 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
DDS::ReturnCode_t enum_bound(DDS::DynamicType_ptr enum_type, DDS::TypeKind &bound_kind)
const ReturnCode_t RETCODE_OK
void cast_to_enum_value(ACE_OutputCDR::from_int8 &dst, CORBA::Long src) const
bool set_default_enum_value(const DDS::DynamicType_var &dt, CORBA::Long &value) const

◆ get_value_from_enum() [2/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_enum ( char *&  ,
DDS::MemberId   
)
private

Definition at line 2716 of file DynamicDataImpl.cpp.

2717 {
2718  return false;
2719 }

◆ get_value_from_enum() [3/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_enum ( CORBA::WChar *&  ,
DDS::MemberId   
)
private

Definition at line 2721 of file DynamicDataImpl.cpp.

2722 {
2723  return false;
2724 }

◆ get_value_from_self() [1/3]

template<typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_self ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2665 of file DynamicDataImpl.cpp.

References container_, OpenDDS::XTypes::is_primitive(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value(), and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by get_single_value().

2666 {
2667  // Primitive or enum value can be read using MEMBER_ID_INVALID.
2668  if (!is_primitive(type_->get_kind()) || id != MEMBER_ID_INVALID) {
2669  return false;
2670  }
2671  DataContainer::const_single_iterator it = container_.single_map_.find(MEMBER_ID_INVALID);
2672  if (it != container_.single_map_.end()) {
2673  value = it->second.get<ValueType>();
2674  } else {
2676  }
2677  return true;
2678 }
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
bool is_primitive(TypeKind tk)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.

◆ get_value_from_self() [2/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_self ( char *&  ,
DDS::MemberId   
)

Definition at line 2681 of file DynamicDataImpl.cpp.

2682 {
2683  // Can't read a string from a DynamicData instance representing a string.
2684  return false;
2685 }

◆ get_value_from_self() [3/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_self ( CORBA::WChar *&  ,
DDS::MemberId   
)

Definition at line 2688 of file DynamicDataImpl.cpp.

2689 {
2690  // Can't read a wstring from a DynamicData instance representing a wstring.
2691  return false;
2692 }

◆ get_value_from_struct()

template<TypeKind ValueTypeKind, typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_struct ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2756 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::DynamicDataBase::check_member(), container_, LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, read_basic_member(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value().

2757 {
2758  DDS::MemberDescriptor_var md;
2759  DDS::DynamicType_var member_type;
2761  md, member_type, "DynamicDataImpl::get_value_from_struct", "get", id, ValueTypeKind);
2762  if (rc != DDS::RETCODE_OK) {
2763  return false;
2764  }
2765  if (read_basic_member(value, id)) {
2766  return true;
2767  }
2768 
2769  // Not returning a default value for a missing optional member.
2770  if (md->is_optional()) {
2771  if (log_level >= LogLevel::Notice) {
2772  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_value_from_struct:"
2773  " Optional member Id %u is not present\n", id));
2774  }
2775  return false;
2776  }
2778  return true;
2779 }
bool read_basic_member(ValueType &value, DDS::MemberId id)
#define ACE_ERROR(X)
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
DDS::ReturnCode_t check_member(DDS::MemberDescriptor_var &member_desc, DDS::DynamicType_var &member_type, const char *method, const char *action, DDS::MemberId id, DDS::TypeKind tk=TK_NONE)
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_OK

◆ get_value_from_union()

template<TypeKind ValueTypeKind, typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::get_value_from_union ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2782 of file DynamicDataImpl.cpp.

References ACE_ERROR, cast_to_discriminator_value(), OpenDDS::XTypes::DynamicDataBase::check_member(), clear_value_i(), container_, OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::get_base_type(), OpenDDS::XTypes::DynamicDataBase::get_selected_union_branch(), insert_single(), insert_valid_discriminator(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, OPENDDS_ASSERT, read_basic_in_single_map(), read_basic_member(), DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::set_default_basic_value(), and OpenDDS::XTypes::DynamicDataBase::type_.

2783 {
2784  DDS::MemberDescriptor_var md;
2785  DDS::DynamicType_var member_type;
2787  md, member_type, "DynamicDataImpl::get_value_from_union", "get", id, ValueTypeKind);
2788  if (rc != DDS::RETCODE_OK) {
2789  return false;
2790  }
2791 
2792  // Return the member if it is in the container.
2793  if (read_basic_member(value, id)) {
2794  return true;
2795  }
2796 
2797  if (id == DISCRIMINATOR_ID) {
2798  // Set the discriminator to default value.
2799  // If it selects a branch, set the branch to default value.
2801  CORBA::Long disc_value;
2802  if (!cast_to_discriminator_value(disc_value, value)) {
2803  return false;
2804  }
2805  bool found_selected_member = false;
2806  DDS::MemberDescriptor_var selected_md;
2807  const DDS::ReturnCode_t rc =
2808  get_selected_union_branch(disc_value, found_selected_member, selected_md);
2809  if (rc != DDS::RETCODE_OK) {
2810  if (log_level >= LogLevel::Notice) {
2811  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_value_from_union:"
2812  " get_selected_union_branch failed: %C\n", retcode_to_string(rc)));
2813  }
2814  return false;
2815  }
2816  insert_single(id, value);
2817  if (found_selected_member && !selected_md->is_optional()) {
2818  DDS::DynamicType_var selected_type = get_base_type(selected_md->type());
2819  if (clear_value_i(selected_md->id(), selected_type) != DDS::RETCODE_OK) {
2820  return false;
2821  }
2822  }
2823  } else {
2824  DataContainer::const_single_iterator single_it = container_.single_map_.find(DISCRIMINATOR_ID);
2825  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(DISCRIMINATOR_ID);
2826  const bool has_disc = single_it != container_.single_map_.end() ||
2827  complex_it != container_.complex_map_.end();
2828  if (has_disc) {
2829  if (log_level >= LogLevel::Notice) {
2830  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::get_value_from_union:"
2831  " Branch Id %u is not the active branch in the union\n", id));
2832  }
2833  return false;
2834  }
2835  // Set the branch to default value and set the discriminator to a value that selects this branch.
2836  DDS::DynamicTypeMember_var dtm;
2837  if (type_->get_member(dtm, id) != DDS::RETCODE_OK) {
2838  return false;
2839  }
2840  DDS::MemberDescriptor_var md;
2841  if (dtm->get_descriptor(md) != DDS::RETCODE_OK) {
2842  return false;
2843  }
2844  DDS::DynamicType_var dt = get_base_type(md->type());
2845  if (clear_value_i(id, dt) != DDS::RETCODE_OK) {
2846  return false;
2847  }
2848  if (!insert_valid_discriminator(md)) {
2849  return false;
2850  }
2852  }
2853  return true;
2854 }
bool read_basic_in_single_map(ValueType &value, DDS::MemberId id)
Read a basic member from a containing type.
bool read_basic_member(ValueType &value, DDS::MemberId id)
ACE_CDR::Long Long
#define ACE_ERROR(X)
void set_default_basic_value(CORBA::Long &value) const
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_valid_discriminator(DDS::MemberDescriptor *memberSelected)
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
#define OPENDDS_ASSERT(C)
Definition: Definitions.h:72
DDS::ReturnCode_t clear_value_i(DDS::MemberId id, const DDS::DynamicType_var &member_type)
bool cast_to_discriminator_value(CORBA::Long &disc_value, const ACE_OutputCDR::from_boolean &value) const
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
DDS::ReturnCode_t check_member(DDS::MemberDescriptor_var &member_desc, DDS::DynamicType_var &member_type, const char *method, const char *action, DDS::MemberId id, DDS::TypeKind tk=TK_NONE)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
OpenDDS_Dcps_Export LogLevel log_level
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_selected_union_branch(DDS::Int32 disc, bool &found_selected_member, DDS::MemberDescriptor_var &selected_md) const

◆ get_wstring_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_wstring_value ( CORBA::WChar *&  value,
DDS::MemberId  id 
)

Definition at line 3241 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED, and value.

3242 {
3243 #ifdef DDS_HAS_WCHAR
3244  return get_single_value<TK_STRING16>(value, id);
3245 #else
3246  return DDS::RETCODE_UNSUPPORTED;
3247 #endif
3248 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ get_wstring_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::get_wstring_values ( DDS::WstringSeq value,
DDS::MemberId  id 
)

Definition at line 3919 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

3920 {
3921  ACE_UNUSED_ARG(value);
3922  ACE_UNUSED_ARG(id);
3923  return DDS::RETCODE_UNSUPPORTED;
3924 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ insert_complex()

bool OpenDDS::XTypes::DynamicDataImpl::insert_complex ( DDS::MemberId  id,
const DDS::DynamicData_var &  value 
)
private

Definition at line 676 of file DynamicDataImpl.cpp.

References container_.

Referenced by clear_value_i(), get_complex_from_collection(), get_complex_from_struct(), get_complex_from_union(), set_complex_to_collection(), set_complex_to_struct(), and set_complex_to_union().

677 {
678  if (container_.single_map_.erase(id) == 0) {
679  if (container_.sequence_map_.erase(id) == 0) {
680  container_.complex_map_.erase(id);
681  }
682  }
683  return container_.complex_map_.insert(std::make_pair(id, value)).second;
684 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ insert_discriminator()

bool OpenDDS::XTypes::DynamicDataImpl::insert_discriminator ( ACE_CDR::Long  value)
private

Definition at line 1539 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::get_base_type(), insert_single(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_NONE, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by insert_valid_discriminator().

1540 {
1541  DDS::DynamicTypeMember_var member;
1542  if (type_->get_member(member, DISCRIMINATOR_ID) != DDS::RETCODE_OK) {
1543  return false;
1544  }
1545  DDS::MemberDescriptor_var descriptor;
1546  if (member->get_descriptor(descriptor) != DDS::RETCODE_OK) {
1547  return false;
1548  }
1549  DDS::DynamicType_var discType = get_base_type(descriptor->type());
1550  switch (discType ? discType->get_kind() : TK_NONE) {
1551  case TK_BOOLEAN:
1553  case TK_BYTE:
1555  case TK_CHAR8:
1557 #ifdef DDS_HAS_WCHAR
1558  case TK_CHAR16:
1560 #endif
1561  case TK_INT8:
1563  case TK_UINT8:
1565  case TK_INT16:
1566  return insert_single(DISCRIMINATOR_ID, static_cast<ACE_CDR::Short>(value));
1567  case TK_UINT16:
1568  return insert_single(DISCRIMINATOR_ID, static_cast<ACE_CDR::UShort>(value));
1569  case TK_ENUM:
1570  case TK_INT32:
1572  case TK_UINT32:
1573  return insert_single(DISCRIMINATOR_ID, static_cast<ACE_CDR::ULong>(value));
1574  case TK_INT64:
1575  return insert_single(DISCRIMINATOR_ID, static_cast<ACE_CDR::LongLong>(value));
1576  case TK_UINT64:
1577  return insert_single(DISCRIMINATOR_ID, static_cast<ACE_CDR::ULongLong>(value));
1578  default:
1579  return false;
1580  }
1581 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_INT16
Definition: TypeObject.h:216
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_INT8
Definition: TypeObject.h:225
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_NONE
Definition: TypeObject.h:213
const TypeKind TK_CHAR16
Definition: TypeObject.h:228

◆ insert_sequence()

template<typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::insert_sequence ( DDS::MemberId  id,
const SequenceType &  value 
)
private

Definition at line 2183 of file DynamicDataImpl.cpp.

References container_.

Referenced by set_values_to_array(), set_values_to_sequence(), set_values_to_struct(), and set_values_to_union().

2184 {
2185  if (container_.complex_map_.erase(id) == 0) {
2186  container_.sequence_map_.erase(id);
2187  }
2188  return container_.sequence_map_.insert(std::make_pair(id, value)).second;
2189 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ insert_single() [1/6]

bool OpenDDS::XTypes::DynamicDataImpl::insert_single ( DDS::MemberId  id,
const ACE_OutputCDR::from_int8 value 
)
private

Definition at line 615 of file DynamicDataImpl.cpp.

References container_.

Referenced by clear_value_i(), get_value_from_collection(), get_value_from_union(), insert_discriminator(), insert_single(), move_sequence_helper(), move_single_to_complex_i(), set_boolean_value(), set_char_common(), set_single_value(), set_value_to_collection(), set_value_to_struct(), set_value_to_union(), and write_discriminator_helper().

616 {
617  // The same member might be already written to complex_map_.
618  // Make sure there is only one entry for each member.
619  if (container_.complex_map_.erase(id) == 0) {
620  container_.single_map_.erase(id);
621  }
622  return container_.single_map_.insert(std::make_pair(id, value)).second;
623 }

◆ insert_single() [2/6]

bool OpenDDS::XTypes::DynamicDataImpl::insert_single ( DDS::MemberId  id,
const ACE_OutputCDR::from_uint8 value 
)
private

Definition at line 625 of file DynamicDataImpl.cpp.

References container_.

626 {
627  if (container_.complex_map_.erase(id) == 0) {
628  container_.single_map_.erase(id);
629  }
630  return container_.single_map_.insert(std::make_pair(id, value)).second;
631 }

◆ insert_single() [3/6]

bool OpenDDS::XTypes::DynamicDataImpl::insert_single ( DDS::MemberId  id,
const ACE_OutputCDR::from_char value 
)
private

Definition at line 633 of file DynamicDataImpl.cpp.

References container_.

634 {
635  if (container_.complex_map_.erase(id) == 0) {
636  container_.single_map_.erase(id);
637  }
638  return container_.single_map_.insert(std::make_pair(id, value)).second;
639 }

◆ insert_single() [4/6]

bool OpenDDS::XTypes::DynamicDataImpl::insert_single ( DDS::MemberId  id,
const ACE_OutputCDR::from_octet value 
)
private

Definition at line 641 of file DynamicDataImpl.cpp.

References container_.

642 {
643  if (container_.complex_map_.erase(id) == 0) {
644  container_.single_map_.erase(id);
645  }
646  return container_.single_map_.insert(std::make_pair(id, value)).second;
647 }

◆ insert_single() [5/6]

bool OpenDDS::XTypes::DynamicDataImpl::insert_single ( DDS::MemberId  id,
const ACE_OutputCDR::from_boolean value 
)
private

Definition at line 649 of file DynamicDataImpl.cpp.

References container_, insert_single(), and value.

650 {
651  if (container_.complex_map_.erase(id) == 0) {
652  container_.single_map_.erase(id);
653  }
654  return container_.single_map_.insert(std::make_pair(id, value)).second;
655 }

◆ insert_single() [6/6]

template<typename SingleType >
bool OpenDDS::XTypes::DynamicDataImpl::insert_single ( DDS::MemberId  id,
const SingleType &  value 
)
private

Definition at line 668 of file DynamicDataImpl.cpp.

References container_.

669 {
670  if (container_.complex_map_.erase(id) == 0) {
671  container_.single_map_.erase(id);
672  }
673  return container_.single_map_.insert(std::make_pair(id, value)).second;
674 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ insert_valid_discriminator()

bool OpenDDS::XTypes::DynamicDataImpl::insert_valid_discriminator ( DDS::MemberDescriptor memberSelected)
private

Definition at line 1510 of file DynamicDataImpl.cpp.

References OpenDDS::DCPS::DisjointSequence::OrderedRanges< T >::add(), OpenDDS::DCPS::DisjointSequence::OrderedRanges< T >::begin(), OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::DCPS::DisjointSequence::OrderedRanges< T >::empty(), DDS::MemberDescriptor::id, insert_discriminator(), DDS::MemberDescriptor::is_default_label, DDS::MemberDescriptor::label, OpenDDS::XTypes::Sequence< T >::length(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by get_complex_from_union(), get_value_from_union(), set_complex_to_union(), set_value_to_union(), and set_values_to_union().

1511 {
1512  if (memberSelected->is_default_label()) {
1513  DCPS::DisjointSequence::OrderedRanges<ACE_CDR::Long> used;
1514  const ACE_CDR::ULong members = type_->get_member_count();
1515  for (ACE_CDR::ULong i = 0; i < members; ++i) {
1516  DDS::DynamicTypeMember_var member;
1517  if (type_->get_member_by_index(member, i) != DDS::RETCODE_OK) {
1518  return false;
1519  }
1520  if (member->get_id() == DISCRIMINATOR_ID || member->get_id() == memberSelected->id()) {
1521  continue;
1522  }
1523  DDS::MemberDescriptor_var mdesc;
1524  if (member->get_descriptor(mdesc) != DDS::RETCODE_OK) {
1525  return false;
1526  }
1527  const DDS::UnionCaseLabelSeq& lseq = mdesc->label();
1528  for (ACE_CDR::ULong lbl = 0; lbl < lseq.length(); ++lbl) {
1529  used.add(lseq[lbl]);
1530  }
1531  }
1532  const ACE_CDR::Long disc = used.empty() ? 0 : used.begin()->second + 1;
1533  return insert_discriminator(disc);
1534  }
1535  const DDS::UnionCaseLabelSeq& lseq = memberSelected->label();
1536  return lseq.length() && insert_discriminator(lseq[0]);
1537 }
bool insert_discriminator(ACE_CDR::Long value)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
public UnionCaseLabelSeq label
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
ACE_UINT32 ULong
ACE_INT32 Long
public boolean is_default_label
const ReturnCode_t RETCODE_OK
ACE_CDR::ULong length() const
Definition: TypeObject.h:167
const_iterator begin() const
Definition: TypeObject.h:195

◆ is_default_member_selected()

bool OpenDDS::XTypes::DynamicDataImpl::is_default_member_selected ( CORBA::Long  disc_val,
DDS::MemberId  default_id 
) const
private

Definition at line 726 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicTypeMembersByIdImpl::begin(), OpenDDS::XTypes::DynamicTypeMembersByIdImpl::end(), OpenDDS::XTypes::Sequence< T >::length(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_UNION, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by validate_discriminator().

727 {
728  if (type_->get_kind() != TK_UNION) {
729  return false;
730  }
731 
732  DDS::DynamicTypeMembersById_var members_var;
733  if (type_->get_all_members(members_var) != DDS::RETCODE_OK) {
734  return false;
735  }
736  DynamicTypeMembersByIdImpl* members = dynamic_cast<DynamicTypeMembersByIdImpl*>(members_var.in());
737  if (!members) {
738  return false;
739  }
740 
741  for (DynamicTypeMembersByIdImpl::const_iterator it = members->begin(); it != members->end(); ++it) {
742  if (it->first == default_id) continue;
743 
744  DDS::MemberDescriptor_var md;
745  if (it->second->get_descriptor(md) != DDS::RETCODE_OK) {
746  return false;
747  }
748  const DDS::UnionCaseLabelSeq& labels = md->label();
749  for (CORBA::ULong i = 0; i < labels.length(); ++i) {
750  if (disc_val == labels[i]) {
751  return false;
752  }
753  }
754  }
755  return true;
756 }
const TypeKind TK_UNION
Definition: TypeObject.h:244
ACE_CDR::ULong ULong
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const ReturnCode_t RETCODE_OK
ACE_CDR::ULong length() const
Definition: TypeObject.h:167

◆ is_valid_discriminator_type()

bool OpenDDS::XTypes::DynamicDataImpl::is_valid_discriminator_type ( TypeKind  tk)
staticprivate

Definition at line 701 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

Referenced by read_discriminator(), and set_value_to_union().

702 {
703  switch (tk) {
704  case TK_BOOLEAN:
705  case TK_BYTE:
706  case TK_CHAR8:
707 #ifdef DDS_HAS_WCHAR
708  case TK_CHAR16:
709 #endif
710  case TK_INT8:
711  case TK_UINT8:
712  case TK_INT16:
713  case TK_UINT16:
714  case TK_INT32:
715  case TK_UINT32:
716  case TK_INT64:
717  case TK_UINT64:
718  case TK_ENUM:
719  return true;
720  default:
721  return false;
722  }
723 }
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_CHAR16
Definition: TypeObject.h:228

◆ move_sequence_helper()

template<typename SequenceType >
void OpenDDS::XTypes::DynamicDataImpl::move_sequence_helper ( const DataContainer::const_sequence_iterator &  it,
DynamicDataImpl data 
)
private

Definition at line 3370 of file DynamicDataImpl.cpp.

References insert_single().

3372 {
3373  const SequenceType& values = it->second.get<SequenceType>();
3374  for (CORBA::ULong i = 0; i < values.length(); ++i) {
3375  data->insert_single(i, values[i]);
3376  }
3377 }
ACE_CDR::ULong ULong

◆ move_sequence_to_complex()

bool OpenDDS::XTypes::DynamicDataImpl::move_sequence_to_complex ( const DataContainer::const_sequence_iterator &  it,
DynamicDataImpl data 
)
private

Definition at line 3464 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_base_type(), DDS::RETCODE_OK, 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_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, and OpenDDS::XTypes::DynamicDataBase::type().

Referenced by get_complex_from_aggregated(), and get_complex_from_collection().

3466 {
3467  DDS::DynamicType_var seq_type = data->type();
3468  DDS::TypeDescriptor_var seq_td;
3469  if (seq_type->get_descriptor(seq_td) != DDS::RETCODE_OK) {
3470  return false;
3471  }
3472  DDS::DynamicType_var elem_type = get_base_type(seq_td->element_type());
3473 
3474  switch (elem_type->get_kind()) {
3475  case TK_INT8: {
3476  move_sequence_helper<DDS::Int8Seq>(it, data);
3477  break;
3478  }
3479  case TK_UINT8: {
3480  move_sequence_helper<DDS::UInt8Seq>(it, data);
3481  break;
3482  }
3483  case TK_INT16: {
3484  move_sequence_helper<DDS::Int16Seq>(it, data);
3485  break;
3486  }
3487  case TK_UINT16: {
3488  move_sequence_helper<DDS::UInt16Seq>(it, data);
3489  break;
3490  }
3491  case TK_INT32: {
3492  move_sequence_helper<DDS::Int32Seq>(it, data);
3493  break;
3494  }
3495  case TK_UINT32: {
3496  move_sequence_helper<DDS::UInt32Seq>(it, data);
3497  break;
3498  }
3499  case TK_INT64: {
3500  move_sequence_helper<DDS::Int64Seq>(it, data);
3501  break;
3502  }
3503  case TK_UINT64: {
3504  move_sequence_helper<DDS::UInt64Seq>(it, data);
3505  break;
3506  }
3507  case TK_FLOAT32: {
3508  move_sequence_helper<DDS::Float32Seq>(it, data);
3509  break;
3510  }
3511  case TK_FLOAT64: {
3512  move_sequence_helper<DDS::Float64Seq>(it, data);
3513  break;
3514  }
3515  case TK_FLOAT128: {
3516  move_sequence_helper<DDS::Float128Seq>(it, data);
3517  break;
3518  }
3519  case TK_CHAR8: {
3520  move_sequence_helper<DDS::CharSeq>(it, data);
3521  break;
3522  }
3523 #ifdef DDS_HAS_WCHAR
3524  case TK_CHAR16: {
3525  move_sequence_helper<DDS::WcharSeq>(it, data);
3526  break;
3527  }
3528 #endif
3529  case TK_BYTE: {
3530  move_sequence_helper<DDS::ByteSeq>(it, data);
3531  break;
3532  }
3533  case TK_BOOLEAN: {
3534  move_sequence_helper<DDS::BooleanSeq>(it, data);
3535  break;
3536  }
3537  case TK_STRING8: {
3538  move_sequence_helper<DDS::StringSeq>(it, data);
3539  break;
3540  }
3541 #ifdef DDS_HAS_WCHAR
3542  case TK_STRING16: {
3543  move_sequence_helper<DDS::WstringSeq>(it, data);
3544  break;
3545  }
3546 #endif
3547  default:
3548  return false;
3549  }
3550  return true;
3551 }
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_INT16
Definition: TypeObject.h:216
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_INT8
Definition: TypeObject.h:225
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const ReturnCode_t RETCODE_OK
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223

◆ move_single_to_complex()

bool OpenDDS::XTypes::DynamicDataImpl::move_single_to_complex ( const DataContainer::const_single_iterator &  it,
DynamicDataImpl data 
)
private

Definition at line 3250 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::enum_bound(), move_single_to_complex_i(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_ENUM, and OpenDDS::XTypes::DynamicDataBase::type().

Referenced by get_complex_from_aggregated(), and get_complex_from_collection().

3252 {
3253  DDS::DynamicType_var member_type = data->type();
3254  const TypeKind member_tk = member_type->get_kind();
3255  TypeKind treat_as = member_tk;
3256  if (member_tk == TK_ENUM) {
3257  if (enum_bound(member_type, treat_as) != DDS::RETCODE_OK) {
3258  return false;
3259  }
3260  }
3261  return move_single_to_complex_i(it, data, treat_as);
3262 }
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool move_single_to_complex_i(const DataContainer::const_single_iterator &it, DynamicDataImpl *data, const TypeKind treat_as)
DDS::ReturnCode_t enum_bound(DDS::DynamicType_ptr enum_type, DDS::TypeKind &bound_kind)
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK

◆ move_single_to_complex_i()

bool OpenDDS::XTypes::DynamicDataImpl::move_single_to_complex_i ( const DataContainer::const_single_iterator &  it,
DynamicDataImpl data,
const TypeKind  treat_as 
)
private

Definition at line 3264 of file DynamicDataImpl.cpp.

References insert_single(), OpenDDS::XTypes::MEMBER_ID_INVALID, ACE_OS::strlen(), 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_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

Referenced by move_single_to_complex().

3266 {
3267  switch (treat_as) {
3268  case TK_INT8: {
3269  const ACE_OutputCDR::from_int8& value = it->second.get<ACE_OutputCDR::from_int8>();
3270  data->insert_single(MEMBER_ID_INVALID, value);
3271  break;
3272  }
3273  case TK_UINT8: {
3274  const ACE_OutputCDR::from_uint8& value = it->second.get<ACE_OutputCDR::from_uint8>();
3275  data->insert_single(MEMBER_ID_INVALID, value);
3276  break;
3277  }
3278  case TK_INT16: {
3279  const CORBA::Short value = it->second.get<CORBA::Short>();
3280  data->insert_single(MEMBER_ID_INVALID, value);
3281  break;
3282  }
3283  case TK_UINT16: {
3284  const CORBA::UShort value = it->second.get<CORBA::UShort>();
3285  data->insert_single(MEMBER_ID_INVALID, value);
3286  break;
3287  }
3288  case TK_INT32: {
3289  const CORBA::Long value = it->second.get<CORBA::Long>();
3290  data->insert_single(MEMBER_ID_INVALID, value);
3291  break;
3292  }
3293  case TK_UINT32: {
3294  const CORBA::ULong value = it->second.get<CORBA::ULong>();
3295  data->insert_single(MEMBER_ID_INVALID, value);
3296  break;
3297  }
3298  case TK_INT64: {
3299  const CORBA::LongLong value = it->second.get<CORBA::LongLong>();
3300  data->insert_single(MEMBER_ID_INVALID, value);
3301  break;
3302  }
3303  case TK_UINT64: {
3304  const CORBA::ULongLong value = it->second.get<CORBA::ULongLong>();
3305  data->insert_single(MEMBER_ID_INVALID, value);
3306  break;
3307  }
3308  case TK_FLOAT32: {
3309  const CORBA::Float value = it->second.get<CORBA::Float>();
3310  data->insert_single(MEMBER_ID_INVALID, value);
3311  break;
3312  }
3313  case TK_FLOAT64: {
3314  const CORBA::Double value = it->second.get<CORBA::Double>();
3315  data->insert_single(MEMBER_ID_INVALID, value);
3316  break;
3317  }
3318  case TK_FLOAT128: {
3319  const CORBA::LongDouble value = it->second.get<CORBA::LongDouble>();
3320  data->insert_single(MEMBER_ID_INVALID, value);
3321  break;
3322  }
3323  case TK_CHAR8: {
3324  const ACE_OutputCDR::from_char& value = it->second.get<ACE_OutputCDR::from_char>();
3325  data->insert_single(MEMBER_ID_INVALID, value);
3326  break;
3327  }
3328 #ifdef DDS_HAS_WCHAR
3329  case TK_CHAR16: {
3330  const ACE_OutputCDR::from_wchar& value = it->second.get<ACE_OutputCDR::from_wchar>();
3331  data->insert_single(MEMBER_ID_INVALID, value);
3332  break;
3333  }
3334 #endif
3335  case TK_BYTE: {
3336  const ACE_OutputCDR::from_octet& value = it->second.get<ACE_OutputCDR::from_octet>();
3337  data->insert_single(MEMBER_ID_INVALID, value);
3338  break;
3339  }
3340  case TK_BOOLEAN: {
3341  const ACE_OutputCDR::from_boolean& value = it->second.get<ACE_OutputCDR::from_boolean>();
3342  data->insert_single(MEMBER_ID_INVALID, value);
3343  break;
3344  }
3345  case TK_STRING8: {
3346  const char* str = it->second.get<const char*>();
3347  const size_t len = ACE_OS::strlen(str);
3348  for (CORBA::ULong i = 0; i < len; ++i) {
3349  data->insert_single(i, ACE_OutputCDR::from_char(str[i]));
3350  }
3351  break;
3352  }
3353 #ifdef DDS_HAS_WCHAR
3354  case TK_STRING16: {
3355  const CORBA::WChar* wstr = it->second.get<const CORBA::WChar*>();
3356  const size_t len = ACE_OS::strlen(wstr);
3357  for (CORBA::ULong i = 0; i < len; ++i) {
3358  data->insert_single(i, ACE_OutputCDR::from_wchar(wstr[i]));
3359  }
3360  break;
3361  }
3362 #endif
3363  default:
3364  return false;
3365  }
3366  return true;
3367 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
ACE_CDR::LongLong LongLong
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::Short Short
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_INT8
Definition: TypeObject.h:225
size_t strlen(const char *s)
ACE_CDR::ULongLong ULongLong
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
ACE_CDR::UShort UShort
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
ACE_CDR::WChar WChar
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223

◆ OPENDDS_VECTOR()

typedef OpenDDS::XTypes::DynamicDataImpl::OPENDDS_VECTOR ( CORBA::ULong  )
private

◆ read_basic_in_complex_map()

template<typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_in_complex_map ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2636 of file DynamicDataImpl.cpp.

References container_, and read_basic_value().

Referenced by read_basic_member().

2637 {
2638  DataContainer::const_complex_iterator complex_it = container_.complex_map_.find(id);
2639  if (complex_it != container_.complex_map_.end()) {
2640  DynamicDataImpl* nested_dd = dynamic_cast<DynamicDataImpl*>(complex_it->second.in());
2641  return nested_dd && nested_dd->read_basic_value(value);
2642  }
2643  return false;
2644 }
const LogLevel::Value value
Definition: debug.cpp:61
DynamicDataImpl(DDS::DynamicType_ptr type)

◆ read_basic_in_single_map() [1/3]

template<typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_in_single_map ( ValueType &  value,
DDS::MemberId  id 
)
private

Read a basic member from a containing type.

Definition at line 2601 of file DynamicDataImpl.cpp.

References container_.

Referenced by get_value_from_union(), and read_basic_member().

2602 {
2603  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
2604  if (single_it != container_.single_map_.end()) {
2605  value = single_it->second.get<ValueType>();
2606  return true;
2607  }
2608  return false;
2609 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ read_basic_in_single_map() [2/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_in_single_map ( char *&  value,
DDS::MemberId  id 
)

Definition at line 2612 of file DynamicDataImpl.cpp.

References container_, and CORBA::string_free().

2613 {
2614  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
2615  if (single_it != container_.single_map_.end()) {
2617  value = single_it->second.get_string();
2618  return true;
2619  }
2620  return false;
2621 }
const LogLevel::Value value
Definition: debug.cpp:61
void string_free(char *)

◆ read_basic_in_single_map() [3/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_in_single_map ( CORBA::WChar *&  value,
DDS::MemberId  id 
)

Definition at line 2624 of file DynamicDataImpl.cpp.

References container_, and CORBA::wstring_free().

2625 {
2626  DataContainer::const_single_iterator single_it = container_.single_map_.find(id);
2627  if (single_it != container_.single_map_.end()) {
2629  value = single_it->second.get_wstring();
2630  return true;
2631  }
2632  return false;
2633 }
const LogLevel::Value value
Definition: debug.cpp:61
void wstring_free(WChar *const)

◆ read_basic_member() [1/3]

template<typename ValueType >
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_member ( ValueType &  value,
DDS::MemberId  id 
)
private

Definition at line 2647 of file DynamicDataImpl.cpp.

References read_basic_in_complex_map(), and read_basic_in_single_map().

Referenced by get_char_common(), get_value_from_collection(), get_value_from_struct(), and get_value_from_union().

2648 {
2650 }
bool read_basic_in_single_map(ValueType &value, DDS::MemberId id)
Read a basic member from a containing type.
const LogLevel::Value value
Definition: debug.cpp:61
bool read_basic_in_complex_map(ValueType &value, DDS::MemberId id)

◆ read_basic_member() [2/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_member ( char *&  value,
DDS::MemberId  id 
)

Definition at line 2653 of file DynamicDataImpl.cpp.

References read_basic_in_complex_map(), and read_basic_in_single_map().

2654 {
2656 }
bool read_basic_in_single_map(ValueType &value, DDS::MemberId id)
Read a basic member from a containing type.
const LogLevel::Value value
Definition: debug.cpp:61
bool read_basic_in_complex_map(ValueType &value, DDS::MemberId id)

◆ read_basic_member() [3/3]

template<>
bool OpenDDS::XTypes::DynamicDataImpl::read_basic_member ( CORBA::WChar *&  value,
DDS::MemberId  id 
)

Definition at line 2659 of file DynamicDataImpl.cpp.

References read_basic_in_complex_map(), and read_basic_in_single_map().

2660 {
2662 }
bool read_basic_in_single_map(ValueType &value, DDS::MemberId id)
Read a basic member from a containing type.
const LogLevel::Value value
Definition: debug.cpp:61
bool read_basic_in_complex_map(ValueType &value, DDS::MemberId id)

◆ read_basic_value() [1/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( ACE_OutputCDR::from_int8 value)
private

Group of functions to read a basic value represented by this DynamicData instance.

Definition at line 2475 of file DynamicDataImpl.cpp.

References get_int8_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, and ACE_OutputCDR::from_int8::val_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::get_boolean_from_bitmask< CORBA::UInt8 >(), get_boolean_from_bitmask(), get_simple_value_string(), read_basic_in_complex_map(), and read_basic_value().

2476 {
2478 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::ReturnCode_t get_int8_value(CORBA::Int8 &value, DDS::MemberId id)
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [2/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( ACE_OutputCDR::from_uint8 value)
private

Definition at line 2480 of file DynamicDataImpl.cpp.

References get_uint8_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, and ACE_OutputCDR::from_uint8::val_.

2481 {
2483 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::ReturnCode_t get_uint8_value(CORBA::UInt8 &value, DDS::MemberId id)
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [3/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::Short value)
private

Definition at line 2485 of file DynamicDataImpl.cpp.

References get_int16_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2486 {
2488 }
const LogLevel::Value value
Definition: debug.cpp:61
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::ReturnCode_t get_int16_value(CORBA::Short &value, DDS::MemberId id)
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [4/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::UShort value)
private

Definition at line 2490 of file DynamicDataImpl.cpp.

References get_uint16_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2491 {
2493 }
const LogLevel::Value value
Definition: debug.cpp:61
DDS::ReturnCode_t get_uint16_value(CORBA::UShort &value, DDS::MemberId id)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [5/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::Long value)
private

Definition at line 2495 of file DynamicDataImpl.cpp.

References get_int32_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2496 {
2498 }
const LogLevel::Value value
Definition: debug.cpp:61
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_int32_value(CORBA::Long &value, DDS::MemberId id)

◆ read_basic_value() [6/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::ULong value)
private

Definition at line 2500 of file DynamicDataImpl.cpp.

References get_uint32_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2501 {
2503 }
const LogLevel::Value value
Definition: debug.cpp:61
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_uint32_value(CORBA::ULong &value, DDS::MemberId)

◆ read_basic_value() [7/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::LongLong value)
private

Definition at line 2505 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataBase::get_int64_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2506 {
2508 }
const LogLevel::Value value
Definition: debug.cpp:61
DDS::ReturnCode_t get_int64_value(DDS::Int64 &value, DDS::MemberId id)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [8/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::ULongLong value)
private

Definition at line 2510 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataBase::get_uint64_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2511 {
2513 }
const LogLevel::Value value
Definition: debug.cpp:61
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_uint64_value(DDS::UInt64 &value, DDS::MemberId id)

◆ read_basic_value() [9/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::Float value)
private

Definition at line 2515 of file DynamicDataImpl.cpp.

References get_float32_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2516 {
2518 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_float32_value(CORBA::Float &value, DDS::MemberId id)

◆ read_basic_value() [10/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::Double value)
private

Definition at line 2520 of file DynamicDataImpl.cpp.

References get_float64_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2521 {
2523 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t get_float64_value(CORBA::Double &value, DDS::MemberId id)

◆ read_basic_value() [11/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( CORBA::LongDouble value)
private

Definition at line 2525 of file DynamicDataImpl.cpp.

References get_float128_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, and DDS::RETCODE_OK.

2526 {
2528 }
DDS::ReturnCode_t get_float128_value(CORBA::LongDouble &value, DDS::MemberId id)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [12/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( ACE_OutputCDR::from_char value)
private

Definition at line 2530 of file DynamicDataImpl.cpp.

References get_char16_value(), get_char8_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, read_basic_value(), DDS::RETCODE_OK, ACE_OutputCDR::from_wchar::val_, and ACE_OutputCDR::from_char::val_.

2531 {
2533 }
DDS::ReturnCode_t get_char8_value(CORBA::Char &value, DDS::MemberId id)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [13/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( ACE_OutputCDR::from_wchar value)
private

◆ read_basic_value() [14/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( ACE_OutputCDR::from_octet value)
private

Definition at line 2542 of file DynamicDataImpl.cpp.

References get_byte_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, and ACE_OutputCDR::from_octet::val_.

2543 {
2545 }
DDS::ReturnCode_t get_byte_value(CORBA::Octet &value, DDS::MemberId id)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [15/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( ACE_OutputCDR::from_boolean value)
private

Definition at line 2547 of file DynamicDataImpl.cpp.

References get_boolean_value(), OpenDDS::XTypes::MEMBER_ID_INVALID, DDS::RETCODE_OK, and ACE_OutputCDR::from_boolean::val_.

2548 {
2550 }
DDS::ReturnCode_t get_boolean_value(CORBA::Boolean &value, DDS::MemberId id)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const ReturnCode_t RETCODE_OK

◆ read_basic_value() [16/16]

bool OpenDDS::XTypes::DynamicDataImpl::read_basic_value ( char *&  value) const
private

Definition at line 2552 of file DynamicDataImpl.cpp.

References TAO::String_var< charT >::_retn(), container_, OpenDDS::XTypes::DynamicDataImpl::DataContainer::get_largest_index_basic(), TAO::String_var< charT >::inout(), ACE_OS::memset(), read_basic_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_string_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::reconstruct_wstring_value(), CORBA::string_alloc(), CORBA::string_dup(), CORBA::string_free(), CORBA::wstring_alloc(), CORBA::wstring_dup(), and CORBA::wstring_free().

2553 {
2554  const bool is_empty = container_.single_map_.empty() && container_.complex_map_.empty();
2555  if (!is_empty) {
2556  CORBA::ULong largest_index;
2557  if (!container_.get_largest_index_basic(largest_index)) {
2558  return false;
2559  }
2560  const CORBA::ULong length = largest_index + 2;
2561  CORBA::String_var str_var = CORBA::string_alloc(length);
2562  ACE_OS::memset(str_var.inout(), 0, length);
2563  if (!container_.reconstruct_string_value(str_var.inout())) {
2564  return false;
2565  }
2567  value = str_var._retn();
2568  } else {
2570  value = CORBA::string_dup("");
2571  }
2572  return true;
2573 }
const LogLevel::Value value
Definition: debug.cpp:61
char * string_alloc(ULong len)
char * string_dup(const char *)
ACE_CDR::ULong ULong
bool reconstruct_string_value(CORBA::Char *str) const
void string_free(char *)
character_type *& inout(void)
character_type * _retn(void)
bool get_largest_index_basic(CORBA::ULong &index) const
void * memset(void *s, int c, size_t len)

◆ read_discriminator() [1/2]

bool OpenDDS::XTypes::DynamicDataImpl::read_discriminator ( CORBA::Long disc_val) const
private

Definition at line 1253 of file DynamicDataImpl.cpp.

References container_, is_valid_discriminator_type(), OpenDDS::XTypes::MEMBER_ID_INVALID, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by set_complex_to_union().

1254 {
1255  if (!is_valid_discriminator_type(type_->get_kind())) {
1256  return false;
1257  }
1258  DataContainer::const_single_iterator it = container_.single_map_.find(MEMBER_ID_INVALID);
1259  if (it == container_.single_map_.end()) {
1260  return false;
1261  }
1262  return read_discriminator(disc_val, type_, it);
1263 }
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
static bool is_valid_discriminator_type(TypeKind tk)
bool read_discriminator(CORBA::Long &disc_val) const

◆ read_discriminator() [2/2]

bool OpenDDS::XTypes::DynamicDataImpl::read_discriminator ( CORBA::Long disc_val,
const DDS::DynamicType_var &  disc_type,
DataContainer::const_single_iterator  it 
) const
private

Definition at line 1166 of file DynamicDataImpl.cpp.

References DDS::RETCODE_OK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, ACE_OutputCDR::from_char::val_, ACE_OutputCDR::from_wchar::val_, ACE_OutputCDR::from_uint8::val_, ACE_OutputCDR::from_boolean::val_, ACE_OutputCDR::from_int8::val_, ACE_OutputCDR::from_octet::val_, and value.

1168 {
1169  switch (disc_type->get_kind()) {
1170  case TK_BOOLEAN: {
1172  disc_val = static_cast<CORBA::Long>(value.val_);
1173  return true;
1174  }
1175  case TK_BYTE: {
1176  const ACE_OutputCDR::from_octet& value = it->second.get<ACE_OutputCDR::from_octet>();
1177  disc_val = static_cast<CORBA::Long>(value.val_);
1178  return true;
1179  }
1180  case TK_CHAR8: {
1181  const ACE_OutputCDR::from_char& value = it->second.get<ACE_OutputCDR::from_char>();
1182  disc_val = static_cast<CORBA::Long>(value.val_);
1183  return true;
1184  }
1185 #ifdef DDS_HAS_WCHAR
1186  case TK_CHAR16: {
1187  const ACE_OutputCDR::from_wchar& value = it->second.get<ACE_OutputCDR::from_wchar>();
1188  disc_val = static_cast<CORBA::Long>(value.val_);
1189  return true;
1190  }
1191 #endif
1192  case TK_INT8: {
1193  const ACE_OutputCDR::from_int8& value = it->second.get<ACE_OutputCDR::from_int8>();
1194  disc_val = static_cast<CORBA::Long>(value.val_);
1195  return true;
1196  }
1197  case TK_UINT8: {
1198  const ACE_OutputCDR::from_uint8& value = it->second.get<ACE_OutputCDR::from_uint8>();
1199  disc_val = static_cast<CORBA::Long>(value.val_);
1200  return true;
1201  }
1202  case TK_INT16: {
1203  CORBA::Short value = it->second.get<CORBA::Short>();
1204  disc_val = static_cast<CORBA::Long>(value);
1205  return true;
1206  }
1207  case TK_UINT16: {
1208  CORBA::UShort value = it->second.get<CORBA::UShort>();
1209  disc_val = static_cast<CORBA::Long>(value);
1210  return true;
1211  }
1212  case TK_INT32: {
1213  disc_val = it->second.get<CORBA::Long>();
1214  return true;
1215  }
1216  case TK_UINT32: {
1217  CORBA::ULong value = it->second.get<CORBA::ULong>();
1218  disc_val = static_cast<CORBA::Long>(value);
1219  return true;
1220  }
1221  case TK_INT64: {
1222  CORBA::LongLong value = it->second.get<CORBA::LongLong>();
1223  disc_val = static_cast<CORBA::Long>(value);
1224  return true;
1225  }
1226  case TK_UINT64: {
1227  CORBA::ULongLong value = it->second.get<CORBA::ULongLong>();
1228  disc_val = static_cast<CORBA::Long>(value);
1229  return true;
1230  }
1231  case TK_ENUM: {
1232  DDS::TypeDescriptor_var td;
1233  if (disc_type->get_descriptor(td) != DDS::RETCODE_OK) {
1234  return false;
1235  }
1236  const CORBA::ULong bitbound = td->bound()[0];
1237  if (bitbound >= 1 && bitbound <= 8) {
1238  const ACE_OutputCDR::from_int8& value = it->second.get<ACE_OutputCDR::from_int8>();
1239  disc_val = static_cast<CORBA::Long>(value.val_);
1240  } else if (bitbound >= 9 && bitbound <= 16) {
1241  CORBA::Short value = it->second.get<CORBA::Short>();
1242  disc_val = static_cast<CORBA::Long>(value);
1243  } else {
1244  disc_val = it->second.get<CORBA::Long>();
1245  }
1246  return true;
1247  }
1248  }
1249  return false;
1250 }
ACE_CDR::Long Long
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_BYTE
Definition: TypeObject.h:215
ACE_CDR::LongLong LongLong
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::Short Short
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_INT8
Definition: TypeObject.h:225
ACE_CDR::ULongLong ULongLong
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
ACE_CDR::UShort UShort
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_CHAR16
Definition: TypeObject.h:228

◆ serialize_i()

bool OpenDDS::XTypes::DynamicDataImpl::serialize_i ( DCPS::Serializer ser,
DCPS::Sample::Extent  ext 
) const
private

Definition at line 8517 of file DynamicDataImpl.cpp.

References ACE_ERROR, container_, LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_array(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_bitmask_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_enum_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_primitive_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_sequence(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_string_value(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_structure(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_union(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_wstring_value(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, 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_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, OpenDDS::XTypes::TK_UNION, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::DCPS::operator<<(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_aggregated_member_xcdr2(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_aggregated_member_xcdr2_default(), and OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_member_i().

8518 {
8519  const TypeKind tk = type_->get_kind();
8520  switch (tk) {
8521  case TK_INT32:
8523  case TK_UINT32:
8525  case TK_INT8:
8527  case TK_UINT8:
8528  return container_.serialize_primitive_value(ser, ACE_OutputCDR::from_uint8(CORBA::UInt8()));
8529  case TK_INT16:
8531  case TK_UINT16:
8533  case TK_INT64:
8535  case TK_UINT64:
8537  case TK_FLOAT32:
8539  case TK_FLOAT64:
8541  case TK_FLOAT128:
8543  case TK_CHAR8:
8545 #ifdef DDS_HAS_WCHAR
8546  case TK_CHAR16:
8548 #endif
8549  case TK_BYTE:
8551  case TK_BOOLEAN:
8553  case TK_ENUM:
8554  return container_.serialize_enum_value(ser);
8555  case TK_BITMASK:
8556  return container_.serialize_bitmask_value(ser);
8557  case TK_STRING8:
8558  return container_.serialize_string_value(ser);
8559 #ifdef DDS_HAS_WCHAR
8560  case TK_STRING16:
8561  return container_.serialize_wstring_value(ser);
8562 #endif
8563  case TK_STRUCTURE:
8564  return container_.serialize_structure(ser, ext);
8565  case TK_UNION:
8566  return container_.serialize_union(ser, ext);
8567  case TK_SEQUENCE:
8568  return container_.serialize_sequence(ser, ext);
8569  case TK_ARRAY:
8570  return container_.serialize_array(ser, ext);
8571  case TK_MAP:
8572  if (log_level >= LogLevel::Notice) {
8573  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::serialize_i: Serialization of map types is not supported\n"));
8574  }
8575  }
8576  return false;
8577 }
bool serialize_array(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_CDR::Long Long
#define ACE_ERROR(X)
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UNION
Definition: TypeObject.h:244
bool serialize_wstring_value(DCPS::Serializer &ser) const
ACE_CDR::LongLong LongLong
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::Short Short
bool serialize_string_value(DCPS::Serializer &ser) const
bool serialize_enum_value(DCPS::Serializer &ser) const
const TypeKind TK_UINT16
Definition: TypeObject.h:219
bool serialize_primitive_value(DCPS::Serializer &ser, PrimitiveType default_value) const
bool serialize_bitmask_value(DCPS::Serializer &ser) const
const TypeKind TK_INT8
Definition: TypeObject.h:225
bool serialize_sequence(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
ACE_CDR::ULongLong ULongLong
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
ACE_CDR::Boolean Boolean
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
ACE_CDR::UShort UShort
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
bool serialize_union(DCPS::Serializer &ser, DCPS::Sample::Extent ext) const
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export LogLevel log_level
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
ACE_CDR::Char Char
bool serialize_structure(DCPS::Serializer &ser, DCPS::Sample::Extent) const
ACE_CDR::Octet Octet
const TypeKind TK_ENUM
Definition: TypeObject.h:238
ACE_CDR::WChar WChar
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_MAP
Definition: TypeObject.h:250
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223

◆ serialized_size_i()

bool OpenDDS::XTypes::DynamicDataImpl::serialized_size_i ( const DCPS::Encoding encoding,
size_t &  size,
DCPS::Sample::Extent  ext 
) const
private

Definition at line 8449 of file DynamicDataImpl.cpp.

References ACE_ERROR, container_, LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, OpenDDS::DCPS::primitive_serialized_size(), OpenDDS::DCPS::primitive_serialized_size_boolean(), OpenDDS::DCPS::primitive_serialized_size_char(), OpenDDS::DCPS::primitive_serialized_size_octet(), OpenDDS::DCPS::primitive_serialized_size_wchar(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_array(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_bitmask(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_enum(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_sequence(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_string(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_structure(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_union(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_wstring(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_ENUM, 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_SEQUENCE, OpenDDS::XTypes::TK_STRING16, OpenDDS::XTypes::TK_STRING8, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, OpenDDS::XTypes::TK_UINT8, OpenDDS::XTypes::TK_UNION, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_aggregated_member_xcdr2(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialize_complex_aggregated_member_xcdr2_default(), OpenDDS::DCPS::serialized_size(), OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_aggregated_member_xcdr2(), and OpenDDS::XTypes::DynamicDataImpl::DataContainer::serialized_size_complex_member_i().

8450 {
8451  const TypeKind tk = type_->get_kind();
8452  switch (tk) {
8453  case TK_INT32:
8455  case TK_UINT32:
8457  case TK_INT8:
8458  primitive_serialized_size_int8(encoding, size);
8459  return true;
8460  case TK_UINT8:
8461  primitive_serialized_size_uint8(encoding, size);
8462  return true;
8463  case TK_INT16:
8465  case TK_UINT16:
8467  case TK_INT64:
8469  case TK_UINT64:
8471  case TK_FLOAT32:
8473  case TK_FLOAT64:
8475  case TK_FLOAT128:
8477  case TK_CHAR8:
8479  return true;
8480 #ifdef DDS_HAS_WCHAR
8481  case TK_CHAR16:
8483  return true;
8484 #endif
8485  case TK_BYTE:
8487  return true;
8488  case TK_BOOLEAN:
8490  return true;
8491  case TK_ENUM:
8493  case TK_BITMASK:
8495  case TK_STRING8:
8497 #ifdef DDS_HAS_WCHAR
8498  case TK_STRING16:
8500 #endif
8501  case TK_STRUCTURE:
8502  return container_.serialized_size_structure(encoding, size, ext);
8503  case TK_UNION:
8504  return container_.serialized_size_union(encoding, size, ext);
8505  case TK_SEQUENCE:
8506  return container_.serialized_size_sequence(encoding, size, ext);
8507  case TK_ARRAY:
8508  return container_.serialized_size_array(encoding, size, ext);
8509  case TK_MAP:
8510  if (log_level >= LogLevel::Notice) {
8511  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::serialized_size_i: Serialization of map types is not supported\n"));
8512  }
8513  }
8514  return false;
8515 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
ACE_CDR::Long Long
#define ACE_ERROR(X)
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_STRING16
Definition: TypeObject.h:232
const TypeKind TK_FLOAT128
Definition: TypeObject.h:224
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_UNION
Definition: TypeObject.h:244
ACE_CDR::LongLong LongLong
const TypeKind TK_INT16
Definition: TypeObject.h:216
ACE_CDR::Short Short
bool serialized_size_union(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
const TypeKind TK_UINT16
Definition: TypeObject.h:219
OpenDDS_Dcps_Export void primitive_serialized_size_octet(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_INT8
Definition: TypeObject.h:225
ACE_CDR::ULongLong ULongLong
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
OpenDDS_Dcps_Export void primitive_serialized_size_char(const Encoding &encoding, size_t &size, size_t count=1)
ACE_CDR::ULong ULong
bool serialized_size_wstring(const DCPS::Encoding &encoding, size_t &size) const
bool serialized_size_structure(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
OpenDDS_Dcps_Export void primitive_serialized_size_wchar(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
bool serialized_size_bitmask(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &bitmask_type) const
ACE_CDR::UShort UShort
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
const TypeKind TK_FLOAT32
Definition: TypeObject.h:222
const TypeKind TK_STRING8
Definition: TypeObject.h:231
const TypeKind TK_UINT64
Definition: TypeObject.h:221
OpenDDS_Dcps_Export LogLevel log_level
bool serialized_size_sequence(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_ENUM
Definition: TypeObject.h:238
bool serialized_size_enum(const DCPS::Encoding &encoding, size_t &size, const DDS::DynamicType_var &enum_type) const
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
const TypeKind TK_MAP
Definition: TypeObject.h:250
OpenDDS_Dcps_Export void primitive_serialized_size_boolean(const Encoding &encoding, size_t &size, size_t count=1)
const TypeKind TK_CHAR16
Definition: TypeObject.h:228
const TypeKind TK_FLOAT64
Definition: TypeObject.h:223
bool serialized_size_array(const DCPS::Encoding &encoding, size_t &size, DCPS::Sample::Extent ext) const
bool serialized_size_string(const DCPS::Encoding &encoding, size_t &size) const
OpenDDS_Dcps_Export bool primitive_serialized_size(const Encoding &encoding, size_t &size, const ACE_CDR::Short &value, size_t count=1)

◆ set_boolean_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_boolean_value ( DDS::MemberId  id,
CORBA::Boolean  value 
)

Definition at line 1805 of file DynamicDataImpl.cpp.

References ACE_ERROR, check_index_from_id(), insert_single(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_BITMASK, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, and OpenDDS::XTypes::typekind_to_string().

Referenced by clear_value().

1806 {
1807  const TypeKind tk = type_->get_kind();
1808  bool good = true;
1809 
1810  switch (tk) {
1811  case TK_BOOLEAN:
1813  break;
1814  case TK_BITMASK: {
1815  const CORBA::ULong bit_bound = type_desc_->bound()[0];
1816  if (!check_index_from_id(tk, id, bit_bound)) {
1817  good = false;
1818  } else {
1820  }
1821  break;
1822  }
1823  case TK_STRUCTURE:
1824  good = set_value_to_struct<TK_BOOLEAN>(id, ACE_OutputCDR::from_boolean(value));
1825  break;
1826  case TK_UNION:
1827  good = set_value_to_union<TK_BOOLEAN>(id, ACE_OutputCDR::from_boolean(value));
1828  break;
1829  case TK_SEQUENCE:
1830  case TK_ARRAY:
1831  case TK_MAP:
1832  good = set_value_to_collection<TK_BOOLEAN>(id, ACE_OutputCDR::from_boolean(value), tk);
1833  break;
1834  default:
1835  good = false;
1836  break;
1837  }
1838 
1839  if (!good && log_level >= LogLevel::Notice) {
1840  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_boolean_value:"
1841  " Failed to write boolean to DynamicData object of type %C\n",
1842  typekind_to_string(tk)));
1843  }
1844  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
1845 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
DDS::TypeDescriptor_var type_desc_
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
bool check_index_from_id(TypeKind tk, DDS::MemberId id, CORBA::ULong bound) const
ACE_CDR::ULong ULong
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const char * typekind_to_string(TypeKind tk)
const TypeKind TK_BITMASK
Definition: TypeObject.h:239
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ set_boolean_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_boolean_values ( DDS::MemberId  id,
const DDS::BooleanSeq value 
)

Definition at line 2456 of file DynamicDataImpl.cpp.

References value.

2457 {
2458  return set_sequence_values<TK_BOOLEAN>(id, value);
2459 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_byte_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_byte_value ( DDS::MemberId  id,
CORBA::Octet  value 
)

Definition at line 1800 of file DynamicDataImpl.cpp.

1801 {
1802  return set_single_value<TK_BYTE>(id, ACE_OutputCDR::from_octet(value));
1803 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_byte_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_byte_values ( DDS::MemberId  id,
const DDS::ByteSeq value 
)

Definition at line 2451 of file DynamicDataImpl.cpp.

References value.

2452 {
2453  return set_sequence_values<TK_BYTE>(id, value);
2454 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_char16_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_char16_value ( DDS::MemberId  id,
CORBA::WChar  value 
)

Definition at line 1791 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

1792 {
1793 #ifdef DDS_HAS_WCHAR
1794  return set_char_common<TK_CHAR16, TK_STRING16>(id, ACE_OutputCDR::from_wchar(value));
1795 #else
1796  return DDS::RETCODE_UNSUPPORTED;
1797 #endif
1798 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ set_char16_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_char16_values ( DDS::MemberId  id,
const DDS::WcharSeq value 
)

Definition at line 2442 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED, and value.

2443 {
2444 #ifdef DDS_HAS_WCHAR
2445  return set_sequence_values<TK_CHAR16>(id, value);
2446 #else
2447  return DDS::RETCODE_UNSUPPORTED;
2448 #endif
2449 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ set_char8_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_char8_value ( DDS::MemberId  id,
CORBA::Char  value 
)

Definition at line 1786 of file DynamicDataImpl.cpp.

1787 {
1788  return set_char_common<TK_CHAR8, TK_STRING8>(id, ACE_OutputCDR::from_char(value));
1789 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_char8_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_char8_values ( DDS::MemberId  id,
const DDS::CharSeq value 
)

Definition at line 2437 of file DynamicDataImpl.cpp.

References value.

2438 {
2439  return set_sequence_values<TK_CHAR8>(id, value);
2440 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_char_common()

template<TypeKind CharKind, TypeKind StringKind, typename FromCharT >
DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_char_common ( DDS::MemberId  id,
const FromCharT &  value 
)
private

Definition at line 1745 of file DynamicDataImpl.cpp.

References ACE_ERROR, check_index_from_id(), insert_single(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and value.

1746 {
1747  const TypeKind tk = type_->get_kind();
1748  bool good = true;
1749 
1750  switch (tk) {
1751  case CharKind:
1752  good = id == MEMBER_ID_INVALID && insert_single(id, value);
1753  break;
1754  case StringKind: {
1755  const CORBA::ULong bound = type_desc_->bound()[0];
1756  if (!check_index_from_id(tk, id, bound)) {
1757  good = false;
1758  } else {
1759  good = insert_single(id, value);
1760  }
1761  break;
1762  }
1763  case TK_STRUCTURE:
1764  good = set_value_to_struct<CharKind>(id, value);
1765  break;
1766  case TK_UNION:
1767  good = set_value_to_union<CharKind>(id, value);
1768  break;
1769  case TK_SEQUENCE:
1770  case TK_ARRAY:
1771  case TK_MAP:
1772  good = set_value_to_collection<CharKind>(id, value, tk);
1773  break;
1774  default:
1775  good = false;
1776  break;
1777  }
1778 
1779  if (!good && log_level >= LogLevel::Notice) {
1780  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_char_common:"
1781  " Failed to write DynamicData object of type %C\n", typekind_to_string(tk)));
1782  }
1783  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
1784 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
DDS::TypeDescriptor_var type_desc_
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
bool check_index_from_id(TypeKind tk, DDS::MemberId id, CORBA::ULong bound) const
ACE_CDR::ULong ULong
const char * typekind_to_string(TypeKind tk)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ set_complex_to_collection()

bool OpenDDS::XTypes::DynamicDataImpl::set_complex_to_collection ( DDS::MemberId  id,
DDS::DynamicData_var  value,
TypeKind  tk 
)
private

Definition at line 2140 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_base_type(), insert_complex(), OpenDDS::XTypes::DynamicDataBase::type_desc_, and validate_member_id_collection().

Referenced by set_complex_value().

2142 {
2143  const DDS::DynamicType_var elem_type = get_base_type(type_desc_->element_type());
2144  const DDS::DynamicType_var value_type = value->type();
2145  if (!elem_type->equals(value_type)) {
2146  return false;
2147  }
2148 
2149  return validate_member_id_collection(id, collection_tk) && insert_complex(id, value);
2150 }
const LogLevel::Value value
Definition: debug.cpp:61
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DDS::TypeDescriptor_var type_desc_
bool validate_member_id_collection(DDS::MemberId id, TypeKind collection_tk) const
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)

◆ set_complex_to_struct()

bool OpenDDS::XTypes::DynamicDataImpl::set_complex_to_struct ( DDS::MemberId  id,
DDS::DynamicData_var  value 
)
private

Definition at line 2040 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_base_type(), insert_complex(), DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

Referenced by set_complex_value().

2041 {
2042  DDS::DynamicTypeMember_var member;
2043  if (type_->get_member(member, id) != DDS::RETCODE_OK) {
2044  return false;
2045  }
2046  DDS::MemberDescriptor_var md;
2047  if (member->get_descriptor(md) != DDS::RETCODE_OK) {
2048  return false;
2049  }
2050 
2051  const DDS::DynamicType_var member_type = get_base_type(md->type());
2052  const DDS::DynamicType_var value_type = value->type();
2053  if (!member_type || !value_type || !member_type->equals(value_type)) {
2054  return false;
2055  }
2056  return insert_complex(id, value);
2057 }
const LogLevel::Value value
Definition: debug.cpp:61
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const ReturnCode_t RETCODE_OK
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)

◆ set_complex_to_union()

bool OpenDDS::XTypes::DynamicDataImpl::set_complex_to_union ( DDS::MemberId  id,
DDS::DynamicData_var  value 
)
private

Definition at line 2059 of file DynamicDataImpl.cpp.

References ACE_ERROR, clear_container(), OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::DynamicDataBase::discriminator_selects_no_member(), OpenDDS::XTypes::DynamicDataBase::equals(), find_selected_member(), OpenDDS::XTypes::get_base_type(), insert_complex(), insert_valid_discriminator(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, read_discriminator(), DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, and validate_discriminator().

Referenced by set_complex_value().

2060 {
2061  if (id == DISCRIMINATOR_ID) {
2062  DDS::DynamicType_var disc_type = get_base_type(type_desc_->discriminator_type());
2063  const DDS::DynamicType_var value_type = value->type();
2064  if (!disc_type->equals(value_type)) {
2065  return false;
2066  }
2067 
2068  CORBA::Long disc_val;
2069  const DynamicDataImpl* dd_impl = dynamic_cast<const DynamicDataImpl*>(value.in());
2070  if (!dd_impl || !dd_impl->read_discriminator(disc_val)) {
2071  return false;
2072  }
2073 
2074  const DDS::MemberId selected_id = find_selected_member();
2075  if (selected_id != MEMBER_ID_INVALID) {
2076  DDS::DynamicTypeMember_var selected_member;
2077  if (type_->get_member(selected_member, selected_id) != DDS::RETCODE_OK) {
2078  return false;
2079  }
2080  DDS::MemberDescriptor_var selected_md;
2081  if (selected_member->get_descriptor(selected_md) != DDS::RETCODE_OK) {
2082  return false;
2083  }
2084  if (!validate_discriminator(disc_val, selected_md)) {
2085  if (log_level >= LogLevel::Notice) {
2086  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_complex_to_union:"
2087  " Discriminator value %d does not select the activated member (ID %u)\n",
2088  disc_val, selected_id));
2089  }
2090  return false;
2091  }
2092  return insert_complex(id, value);
2093  } else {
2094  if (discriminator_selects_no_member(disc_val)) {
2095  return insert_complex(id, value);
2096  }
2097  if (log_level >= LogLevel::Notice) {
2098  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_complex_to_union:"
2099  " Can't directly set a discriminator that selects a member."
2100  " Activate the member first!\n"));
2101  }
2102  return false;
2103  }
2104  }
2105 
2106  // Activate a member
2107  clear_container();
2108 
2109  DDS::DynamicTypeMember_var member;
2110  if (type_->get_member(member, id) != DDS::RETCODE_OK) {
2111  return false;
2112  }
2113  DDS::MemberDescriptor_var md;
2114  if (member->get_descriptor(md) != DDS::RETCODE_OK) {
2115  return false;
2116  }
2117  const DDS::DynamicType_var value_type = value->type();
2118  if (get_base_type(md->type())->equals(value_type)) {
2119  return false;
2120  }
2121 
2122  return insert_valid_discriminator(md) && insert_complex(id, value);
2123 }
ACE_CDR::Long Long
#define ACE_ERROR(X)
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_valid_discriminator(DDS::MemberDescriptor *memberSelected)
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
DynamicDataImpl(DDS::DynamicType_ptr type)
DDS::TypeDescriptor_var type_desc_
DDS::Boolean equals(DDS::DynamicData_ptr other)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
OpenDDS_Dcps_Export LogLevel log_level
bool validate_discriminator(CORBA::Long disc_val, const DDS::MemberDescriptor_var &md) const
const ReturnCode_t RETCODE_OK
bool discriminator_selects_no_member(DDS::Int32 disc) const
DDS::MemberId find_selected_member() const
bool insert_complex(DDS::MemberId id, const DDS::DynamicData_var &value)

◆ set_complex_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_complex_value ( DDS::MemberId  id,
DDS::DynamicData_ptr  value 
)

Definition at line 2152 of file DynamicDataImpl.cpp.

References ACE_ERROR, LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, set_complex_to_collection(), set_complex_to_struct(), set_complex_to_union(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, and OpenDDS::XTypes::DynamicDataBase::type_.

2153 {
2154  DDS::DynamicData_var value_var = DDS::DynamicData::_duplicate(value);
2155  const TypeKind tk = type_->get_kind();
2156  bool good = false;
2157 
2158  switch (tk) {
2159  case TK_STRUCTURE:
2160  good = set_complex_to_struct(id, value_var);
2161  break;
2162  case TK_UNION:
2163  good = set_complex_to_union(id, value_var);
2164  break;
2165  case TK_SEQUENCE:
2166  case TK_ARRAY:
2167  case TK_MAP:
2168  good = set_complex_to_collection(id, value_var, tk);
2169  break;
2170  default:
2171  good = false;
2172  break;
2173  }
2174 
2175  if (!good && log_level >= LogLevel::Notice) {
2176  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_complex_value:"
2177  " Failed to write complex value for member with ID %d\n", id));
2178  }
2179  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
2180 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
bool set_complex_to_union(DDS::MemberId id, DDS::DynamicData_var value)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
bool set_complex_to_collection(DDS::MemberId id, DDS::DynamicData_var value, TypeKind tk)
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
bool set_complex_to_struct(DDS::MemberId id, DDS::DynamicData_var value)
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ set_descriptor()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_descriptor ( MemberId  id,
DDS::MemberDescriptor value 
)

Definition at line 44 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED.

45 {
47 }
const ReturnCode_t RETCODE_UNSUPPORTED

◆ set_float128_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_float128_value ( DDS::MemberId  id,
CORBA::LongDouble  value 
)

Definition at line 1739 of file DynamicDataImpl.cpp.

References value.

1740 {
1741  return set_single_value<TK_FLOAT128>(id, value);
1742 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_float128_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_float128_values ( DDS::MemberId  id,
const DDS::Float128Seq value 
)

Definition at line 2432 of file DynamicDataImpl.cpp.

References value.

2433 {
2434  return set_sequence_values<TK_FLOAT128>(id, value);
2435 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_float32_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_float32_value ( DDS::MemberId  id,
CORBA::Float  value 
)

Definition at line 1729 of file DynamicDataImpl.cpp.

References value.

1730 {
1731  return set_single_value<TK_FLOAT32>(id, value);
1732 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_float32_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_float32_values ( DDS::MemberId  id,
const DDS::Float32Seq value 
)

Definition at line 2422 of file DynamicDataImpl.cpp.

References value.

2423 {
2424  return set_sequence_values<TK_FLOAT32>(id, value);
2425 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_float64_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_float64_value ( DDS::MemberId  id,
CORBA::Double  value 
)

Definition at line 1734 of file DynamicDataImpl.cpp.

References value.

1735 {
1736  return set_single_value<TK_FLOAT64>(id, value);
1737 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_float64_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_float64_values ( DDS::MemberId  id,
const DDS::Float64Seq value 
)

Definition at line 2427 of file DynamicDataImpl.cpp.

References value.

2428 {
2429  return set_sequence_values<TK_FLOAT64>(id, value);
2430 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_int16_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int16_value ( DDS::MemberId  id,
CORBA::Short  value 
)

Definition at line 1709 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ENUM, and value.

1710 {
1711  return set_single_value<TK_INT16>(id, value, TK_ENUM, 9, 16);
1712 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_ENUM
Definition: TypeObject.h:238

◆ set_int16_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int16_values ( DDS::MemberId  id,
const DDS::Int16Seq value 
)

Definition at line 2402 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ENUM, and value.

2403 {
2404  return set_sequence_values<TK_INT16>(id, value, TK_ENUM, 9, 16);
2405 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_ENUM
Definition: TypeObject.h:238

◆ set_int32_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int32_value ( DDS::MemberId  id,
CORBA::Long  value 
)

Definition at line 1689 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ENUM, and value.

1690 {
1691  return set_single_value<TK_INT32>(id, value, TK_ENUM, 17, 32);
1692 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_ENUM
Definition: TypeObject.h:238

◆ set_int32_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int32_values ( DDS::MemberId  id,
const DDS::Int32Seq value 
)

Definition at line 2382 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ENUM, and value.

2383 {
2384  return set_sequence_values<TK_INT32>(id, value, TK_ENUM, 17, 32);
2385 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_ENUM
Definition: TypeObject.h:238

◆ set_int64_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int64_value ( DDS::MemberId  id,
CORBA::LongLong  value 
)

Definition at line 1719 of file DynamicDataImpl.cpp.

References value.

1720 {
1721  return set_single_value<TK_INT64>(id, value);
1722 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_int64_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int64_values ( DDS::MemberId  id,
const DDS::Int64Seq value 
)

Definition at line 2412 of file DynamicDataImpl.cpp.

References value.

2413 {
2414  return set_sequence_values<TK_INT64>(id, value);
2415 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_int8_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int8_value ( DDS::MemberId  id,
CORBA::Int8  value 
)

Definition at line 1699 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ENUM.

1700 {
1701  return set_single_value<TK_INT8>(id, ACE_OutputCDR::from_int8(value), TK_ENUM, 1, 8);
1702 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_ENUM
Definition: TypeObject.h:238

◆ set_int8_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_int8_values ( DDS::MemberId  id,
const DDS::Int8Seq value 
)

Definition at line 2392 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_ENUM, and value.

2393 {
2394  return set_sequence_values<TK_INT8>(id, value, TK_ENUM, 1, 8);
2395 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_ENUM
Definition: TypeObject.h:238

◆ set_sequence_values()

template<TypeKind ElementTypeKind, typename SequenceType >
DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_sequence_values ( DDS::MemberId  id,
const SequenceType &  value,
TypeKind  enum_or_bitmask = TK_NONE,
LBound  lower = 0,
LBound  upper = 0 
)
private

Definition at line 2336 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::DynamicDataBase::is_type_supported(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::typekind_to_string(), and value.

2339 {
2340  if (!is_type_supported(ElementTypeKind, "set_sequence_values")) {
2341  return DDS::RETCODE_ERROR;
2342  }
2343 
2344  const TypeKind tk = type_->get_kind();
2345  bool good = true;
2346 
2347  switch (tk) {
2348  case TK_STRUCTURE:
2349  good = set_values_to_struct<ElementTypeKind>(id, value, enum_or_bitmask, lower, upper);
2350  break;
2351  case TK_UNION:
2352  good = set_values_to_union<ElementTypeKind>(id, value, enum_or_bitmask, lower, upper);
2353  break;
2354  case TK_SEQUENCE:
2355  good = set_values_to_sequence<ElementTypeKind>(id, value, enum_or_bitmask, lower, upper);
2356  break;
2357  case TK_ARRAY:
2358  good = set_values_to_array<ElementTypeKind>(id, value, enum_or_bitmask, lower, upper);
2359  break;
2360  case TK_MAP:
2361  if (log_level >= LogLevel::Notice) {
2362  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_sequence_values:"
2363  " Map is currently not supported\n"));
2364  }
2365  return DDS::RETCODE_ERROR;
2366  default:
2367  if (log_level >= LogLevel::Notice) {
2368  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_sequence_values:"
2369  " Write to unsupported type (%C)\n", typekind_to_string(tk)));
2370  }
2371  return DDS::RETCODE_ERROR;
2372  }
2373 
2374  if (!good && log_level >= LogLevel::Notice) {
2375  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_sequence_values:"
2376  " Failed to write sequence of %C to member with ID %d\n",
2377  typekind_to_string(ElementTypeKind), id));
2378  }
2379  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
2380 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
bool is_type_supported(TypeKind tk, const char *func_name)
Verify that a given type is primitive or string or wstring.
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
const char * typekind_to_string(TypeKind tk)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ set_single_value()

template<TypeKind ValueTypeKind, typename ValueType >
DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_single_value ( DDS::MemberId  id,
const ValueType &  value,
TypeKind  enum_or_bitmask = TK_NONE,
LBound  lower = 0,
LBound  upper = 0 
)
private

Definition at line 1639 of file DynamicDataImpl.cpp.

References ACE_ERROR, insert_single(), OpenDDS::XTypes::is_primitive(), OpenDDS::XTypes::DynamicDataBase::is_type_supported(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_ERROR, DDS::RETCODE_OK, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::TK_STRUCTURE, OpenDDS::XTypes::TK_UNION, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and value.

1641 {
1642  if (!is_type_supported(ValueTypeKind, "set_single_value")) {
1643  return DDS::RETCODE_ERROR;
1644  }
1645 
1646  const TypeKind tk = type_->get_kind();
1647  bool good = true;
1648 
1649  // TODO: Bitmask can be stored as a whole as a unsigned integer using MEMBER_ID_INVALID
1650  // (this is an extension to the XTypes spec). Elements of the bitmask can also be set
1651  // using the set_boolean_value interface. The two copies of the bitmask value must be
1652  // made consistent. For example, when a bit in the bitmask is updated, either update
1653  // the unsigned integer representation or invalidate it. Similarly, when the unsigned
1654  // integer value is updated, either update the stored elements or invalidate them all.
1655  if (tk == enum_or_bitmask) {
1656  const CORBA::ULong bit_bound = type_desc_->bound()[0];
1657  good = id == MEMBER_ID_INVALID && bit_bound >= lower && bit_bound <= upper &&
1658  insert_single(id, value);
1659  } else {
1660  switch (tk) {
1661  case ValueTypeKind:
1662  good = is_primitive(tk) && id == MEMBER_ID_INVALID && insert_single(id, value);
1663  break;
1664  case TK_STRUCTURE:
1665  good = set_value_to_struct<ValueTypeKind>(id, value);
1666  break;
1667  case TK_UNION:
1668  good = set_value_to_union<ValueTypeKind>(id, value, enum_or_bitmask, lower, upper);
1669  break;
1670  case TK_SEQUENCE:
1671  case TK_ARRAY:
1672  case TK_MAP:
1673  good = set_value_to_collection<ValueTypeKind>(id, value, tk, enum_or_bitmask, lower, upper);
1674  break;
1675  default:
1676  good = false;
1677  break;
1678  }
1679  }
1680 
1681  if (!good && log_level >= LogLevel::Notice) {
1682  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_single_value: "
1683  "Failed to write a value of %C to DynamicData object of type %C\n",
1684  typekind_to_string(ValueTypeKind), typekind_to_string(tk)));
1685  }
1686  return good ? DDS::RETCODE_OK : DDS::RETCODE_ERROR;
1687 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_UNION
Definition: TypeObject.h:244
bool is_type_supported(TypeKind tk, const char *func_name)
Verify that a given type is primitive or string or wstring.
DDS::TypeDescriptor_var type_desc_
bool is_primitive(TypeKind tk)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
ACE_CDR::ULong ULong
const char * typekind_to_string(TypeKind tk)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_STRUCTURE
Definition: TypeObject.h:243
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_ERROR
const ReturnCode_t RETCODE_OK
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ set_string_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_string_value ( DDS::MemberId  id,
const char *  value 
)

Definition at line 1847 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::get_enumerator_value(), OpenDDS::XTypes::get_member_type(), DDS::RETCODE_OK, OpenDDS::XTypes::set_enum_value(), OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::DynamicDataBase::type_, and value.

1848 {
1849  DDS::DynamicType_var mtype;
1850  DDS::ReturnCode_t rc = get_member_type(mtype, type_, id);
1851  if (rc != DDS::RETCODE_OK) {
1852  return rc;
1853  }
1854  if (mtype->get_kind() == TK_ENUM) {
1855  DDS::Int32 intValue;
1856  rc = get_enumerator_value(intValue, value, mtype);
1857  if (rc != DDS::RETCODE_OK) {
1858  return rc;
1859  }
1860  return set_enum_value(mtype, this, id, intValue);
1861  }
1862  return set_single_value<TK_STRING8>(id, value);
1863 }
const LogLevel::Value value
Definition: debug.cpp:61
DDS::ReturnCode_t get_enumerator_value(DDS::Int32 &value, const char *name, DDS::DynamicType_ptr type)
DDS::ReturnCode_t get_member_type(DDS::DynamicType_var &member_type, DDS::DynamicType_ptr container_type, DDS::MemberId id)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK
DDS::ReturnCode_t set_enum_value(DDS::DynamicType_ptr enum_type, DDS::DynamicData_ptr dest, DDS::MemberId id, DDS::Int32 value)

◆ set_string_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_string_values ( DDS::MemberId  id,
const DDS::StringSeq value 
)

Definition at line 2461 of file DynamicDataImpl.cpp.

References value.

2462 {
2463  return set_sequence_values<TK_STRING8>(id, value);
2464 }
const LogLevel::Value value
Definition: debug.cpp:61

◆ set_uint16_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint16_value ( DDS::MemberId  id,
CORBA::UShort  value 
)

Definition at line 1714 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

1715 {
1716  return set_single_value<TK_UINT16>(id, value, TK_BITMASK, 9, 16);
1717 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint16_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint16_values ( DDS::MemberId  id,
const DDS::UInt16Seq value 
)

Definition at line 2407 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

2408 {
2409  return set_sequence_values<TK_UINT16>(id, value, TK_BITMASK, 9, 16);
2410 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint32_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint32_value ( DDS::MemberId  id,
CORBA::ULong  value 
)

Definition at line 1694 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

1695 {
1696  return set_single_value<TK_UINT32>(id, value, TK_BITMASK, 17, 32);
1697 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint32_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint32_values ( DDS::MemberId  id,
const DDS::UInt32Seq value 
)

Definition at line 2387 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

2388 {
2389  return set_sequence_values<TK_UINT32>(id, value, TK_BITMASK, 17, 32);
2390 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint64_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint64_value ( DDS::MemberId  id,
CORBA::ULongLong  value 
)

Definition at line 1724 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

1725 {
1726  return set_single_value<TK_UINT64>(id, value, TK_BITMASK, 33, 64);
1727 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint64_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint64_values ( DDS::MemberId  id,
const DDS::UInt64Seq value 
)

Definition at line 2417 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

2418 {
2419  return set_sequence_values<TK_UINT64>(id, value, TK_BITMASK, 33, 64);
2420 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint8_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint8_value ( DDS::MemberId  id,
CORBA::UInt8  value 
)

Definition at line 1704 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK.

1705 {
1706  return set_single_value<TK_UINT8>(id, ACE_OutputCDR::from_uint8(value), TK_BITMASK, 1, 8);
1707 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_uint8_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_uint8_values ( DDS::MemberId  id,
const DDS::UInt8Seq value 
)

Definition at line 2397 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::TK_BITMASK, and value.

2398 {
2399  return set_sequence_values<TK_UINT8>(id, value, TK_BITMASK, 1, 8);
2400 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_BITMASK
Definition: TypeObject.h:239

◆ set_value_to_collection()

template<TypeKind ElementTypeKind, typename ElementType >
bool OpenDDS::XTypes::DynamicDataImpl::set_value_to_collection ( DDS::MemberId  id,
const ElementType &  value,
TypeKind  coll_tk,
TypeKind  enum_or_bitmask = TK_NONE,
LBound  lower = 0,
LBound  upper = 0 
)
private

Definition at line 1608 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::get_base_type(), insert_single(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and validate_member_id_collection().

1610 {
1611  const DDS::DynamicType_var elem_type = get_base_type(type_desc_->element_type());
1612  const TypeKind elem_tk = elem_type->get_kind();
1613 
1614  if (elem_tk != ElementTypeKind && elem_tk != enum_or_bitmask) {
1615  if (log_level >= LogLevel::Notice) {
1616  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_value_to_collection:"
1617  " Could not write a value of type %C to %C with element type %C\n",
1618  typekind_to_string(ElementTypeKind), typekind_to_string(collection_tk),
1619  typekind_to_string(elem_tk)));
1620  }
1621  return false;
1622  }
1623 
1624  if (elem_tk == enum_or_bitmask) {
1625  DDS::TypeDescriptor_var elem_td;
1626  if (elem_type->get_descriptor(elem_td) != DDS::RETCODE_OK) {
1627  return false;
1628  }
1629  const CORBA::ULong bit_bound = elem_td->bound()[0];
1630  if (bit_bound < lower || bit_bound > upper) {
1631  return false;
1632  }
1633  }
1634 
1635  return validate_member_id_collection(id, collection_tk) && insert_single(id, value);
1636 }
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
DDS::TypeDescriptor_var type_desc_
bool validate_member_id_collection(DDS::MemberId id, TypeKind collection_tk) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
ACE_CDR::ULong ULong
const char * typekind_to_string(TypeKind tk)
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_OK

◆ set_value_to_struct()

template<TypeKind MemberTypeKind, typename MemberType >
bool OpenDDS::XTypes::DynamicDataImpl::set_value_to_struct ( DDS::MemberId  id,
const MemberType &  value 
)
private

Definition at line 689 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::DynamicDataBase::check_member(), insert_single(), and DDS::RETCODE_OK.

690 {
691  DDS::MemberDescriptor_var md;
692  DDS::DynamicType_var member_type;
693  const DDS::ReturnCode_t rc = check_member(
694  md, member_type, "DynamicDataImpl::set_value_to_struct", "set", id, MemberTypeKind);
695  if (rc != DDS::RETCODE_OK) {
696  return false;
697  }
698  return insert_single(id, value);
699 }
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
DDS::ReturnCode_t check_member(DDS::MemberDescriptor_var &member_desc, DDS::DynamicType_var &member_type, const char *method, const char *action, DDS::MemberId id, DDS::TypeKind tk=TK_NONE)
const ReturnCode_t RETCODE_OK

◆ set_value_to_union()

template<TypeKind MemberTypeKind, typename MemberType >
bool OpenDDS::XTypes::DynamicDataImpl::set_value_to_union ( DDS::MemberId  id,
const MemberType &  value,
TypeKind  enum_or_bitmask = TK_NONE,
LBound  lower = 0,
LBound  upper = 0 
)
private

Definition at line 1414 of file DynamicDataImpl.cpp.

References ACE_ERROR, cast_to_discriminator_value(), clear_container(), OpenDDS::XTypes::DISCRIMINATOR_ID, OpenDDS::XTypes::DynamicDataBase::discriminator_selects_no_member(), find_selected_member(), OpenDDS::XTypes::get_base_type(), insert_single(), insert_valid_discriminator(), is_valid_discriminator_type(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_OK, OpenDDS::XTypes::DynamicDataBase::type_, OpenDDS::XTypes::DynamicDataBase::type_desc_, OpenDDS::XTypes::typekind_to_string(), and validate_discriminator().

1416 {
1417  // This follows the IDL-to-C++ mapping for union.
1418  DDS::DynamicType_var member_type;
1419  if (id == DISCRIMINATOR_ID) {
1420  // Discriminator can only be of certain types (XTypes spec, 7.2.2.4.4.3)
1421  if (!is_valid_discriminator_type(MemberTypeKind)) {
1422  if (log_level >= LogLevel::Notice) {
1423  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_value_to_union:"
1424  " Type %C cannot be used for union discriminator\n",
1425  typekind_to_string(MemberTypeKind)));
1426  }
1427  return false;
1428  }
1429 
1430  member_type = get_base_type(type_desc_->discriminator_type());
1431 
1432  const TypeKind member_tk = member_type->get_kind();
1433  if (member_tk != MemberTypeKind && member_tk != enum_or_bitmask) {
1434  return false;
1435  }
1436 
1437  if (member_tk == enum_or_bitmask) {
1438  DDS::TypeDescriptor_var member_td;
1439  if (member_type->get_descriptor(member_td) != DDS::RETCODE_OK) {
1440  return false;
1441  }
1442  const CORBA::ULong bit_bound = member_td->bound()[0];
1443  if (bit_bound < lower || bit_bound > upper) {
1444  return false;
1445  }
1446  }
1447 
1448  CORBA::Long disc_value;
1449  if (!cast_to_discriminator_value(disc_value, value)) {
1450  return false;
1451  }
1452 
1453  const DDS::MemberId selected_id = find_selected_member();
1454  if (selected_id != MEMBER_ID_INVALID) {
1455  DDS::DynamicTypeMember_var selected_member;
1456  if (type_->get_member(selected_member, selected_id) != DDS::RETCODE_OK) {
1457  return false;
1458  }
1459  DDS::MemberDescriptor_var selected_md;
1460  if (selected_member->get_descriptor(selected_md) != DDS::RETCODE_OK) {
1461  return false;
1462  }
1463 
1464  if (!validate_discriminator(disc_value, selected_md)) {
1465  if (log_level >= LogLevel::Notice) {
1466  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_value_to_union:"
1467  " Discriminator value %d does not select the activated member (ID %u)\n",
1468  disc_value, selected_id));
1469  }
1470  return false;
1471  }
1472  return insert_single(id, value);
1473  } else {
1474  // In case the union has implicit default member and the input discriminator value
1475  // selects that implicit default member, store the discriminator value. The semantics
1476  // of this is similar to the _default() method of the IDL-to-C++ mapping for union.
1477  if (discriminator_selects_no_member(disc_value)) {
1478  return insert_single(id, value);
1479  }
1480  if (log_level >= LogLevel::Notice) {
1481  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_value_to_union:"
1482  " Can't directly set a discriminator that selects a member."
1483  " Activate the member first!\n"));
1484  }
1485  return false;
1486  }
1487  }
1488 
1489  // Activate a member
1490  clear_container();
1491 
1492  DDS::DynamicTypeMember_var member;
1493  if (type_->get_member(member, id) != DDS::RETCODE_OK) {
1494  return false;
1495  }
1496  DDS::MemberDescriptor_var md;
1497  if (member->get_descriptor(md) != DDS::RETCODE_OK) {
1498  return false;
1499  }
1500  member_type = get_base_type(md->type());
1501 
1502  const TypeKind member_tk = member_type->get_kind();
1503  if (member_tk != MemberTypeKind && member_tk != enum_or_bitmask) {
1504  return false;
1505  }
1506 
1507  return insert_valid_discriminator(md) && insert_single(id, value);
1508 }
ACE_CDR::Long Long
#define ACE_ERROR(X)
ACE_CDR::ULong MemberId
Definition: TypeObject.h:910
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_valid_discriminator(DDS::MemberDescriptor *memberSelected)
DDS::DynamicType_var get_base_type(DDS::DynamicType_ptr type)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
DDS::TypeDescriptor_var type_desc_
bool cast_to_discriminator_value(CORBA::Long &disc_value, const ACE_OutputCDR::from_boolean &value) const
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
ACE_CDR::ULong ULong
const char * typekind_to_string(TypeKind tk)
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
OpenDDS_Dcps_Export LogLevel log_level
static bool is_valid_discriminator_type(TypeKind tk)
bool validate_discriminator(CORBA::Long disc_val, const DDS::MemberDescriptor_var &md) const
const ReturnCode_t RETCODE_OK
bool discriminator_selects_no_member(DDS::Int32 disc) const
DDS::MemberId find_selected_member() const

◆ set_values_to_array()

template<TypeKind ElementTypeKind, typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::set_values_to_array ( DDS::MemberId  id,
const SequenceType &  value,
TypeKind  enum_or_bitmask,
LBound  lower,
LBound  upper 
)
private

Definition at line 2324 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::bound_total(), insert_sequence(), OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::DynamicDataBase::type_desc_, and validate_member_id_collection().

2327 {
2328  const DDS::UInt32 length = bound_total(type_desc_);
2329  return
2330  check_seqmem_in_sequence_and_array<ElementTypeKind>(id, length, enum_or_bitmask, lower, upper) &&
2332  insert_sequence(id, value);
2333 }
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_sequence(DDS::MemberId id, const SequenceType &value)
DDS::TypeDescriptor_var type_desc_
bool validate_member_id_collection(DDS::MemberId id, TypeKind collection_tk) const
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
const TypeKind TK_ARRAY
Definition: TypeObject.h:249

◆ set_values_to_sequence()

template<TypeKind ElementTypeKind, typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::set_values_to_sequence ( DDS::MemberId  id,
const SequenceType &  value,
TypeKind  enum_or_bitmask,
LBound  lower,
LBound  upper 
)
private

Definition at line 2312 of file DynamicDataImpl.cpp.

References insert_sequence(), OpenDDS::XTypes::TK_SEQUENCE, OpenDDS::XTypes::DynamicDataBase::type_desc_, and validate_member_id_collection().

2315 {
2316  const DDS::UInt32 bound = type_desc_->bound()[0];
2317  return
2318  check_seqmem_in_sequence_and_array<ElementTypeKind>(id, bound, enum_or_bitmask, lower, upper) &&
2320  insert_sequence(id, value);
2321 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_sequence(DDS::MemberId id, const SequenceType &value)
DDS::TypeDescriptor_var type_desc_
bool validate_member_id_collection(DDS::MemberId id, TypeKind collection_tk) const

◆ set_values_to_struct()

template<TypeKind ElementTypeKind, typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::set_values_to_struct ( DDS::MemberId  id,
const SequenceType &  value,
TypeKind  enum_or_bitmask,
LBound  lower,
LBound  upper 
)
private

Definition at line 2235 of file DynamicDataImpl.cpp.

References insert_sequence().

2238 {
2239  return check_seqmem_in_struct_and_union<ElementTypeKind>(id, enum_or_bitmask, lower, upper) &&
2240  insert_sequence(id, value);
2241 }
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_sequence(DDS::MemberId id, const SequenceType &value)

◆ set_values_to_union()

template<TypeKind ElementTypeKind, typename SequenceType >
bool OpenDDS::XTypes::DynamicDataImpl::set_values_to_union ( DDS::MemberId  id,
const SequenceType &  value,
TypeKind  enum_or_bitmask,
LBound  lower,
LBound  upper 
)
private

Definition at line 2244 of file DynamicDataImpl.cpp.

References ACE_ERROR, clear_container(), OpenDDS::XTypes::DISCRIMINATOR_ID, insert_sequence(), insert_valid_discriminator(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, DDS::RETCODE_OK, and OpenDDS::XTypes::DynamicDataBase::type_.

2247 {
2248  if (id == DISCRIMINATOR_ID) {
2249  if (log_level >= LogLevel::Notice) {
2250  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::set_values_to_union:"
2251  " Union discriminator cannot be a sequence\n"));
2252  }
2253  return false;
2254  }
2255 
2256  // Check the member type against the input type parameters.
2257  if (!check_seqmem_in_struct_and_union<ElementTypeKind>(id, enum_or_bitmask, lower, upper)) {
2258  return false;
2259  }
2260 
2261  clear_container();
2262 
2263  DDS::DynamicTypeMember_var member;
2264  if (type_->get_member(member, id) != DDS::RETCODE_OK) {
2265  return false;
2266  }
2267  DDS::MemberDescriptor_var md;
2268  if (member->get_descriptor(md) != DDS::RETCODE_OK) {
2269  return false;
2270  }
2272 }
#define ACE_ERROR(X)
const LogLevel::Value value
Definition: debug.cpp:61
bool insert_valid_discriminator(DDS::MemberDescriptor *memberSelected)
const ACE_CDR::ULong DISCRIMINATOR_ID
Implementation specific sentinel for a union discriminator used in DynamicData.
Definition: TypeObject.h:913
bool insert_sequence(DDS::MemberId id, const SequenceType &value)
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
OpenDDS_Dcps_Export LogLevel log_level
const ReturnCode_t RETCODE_OK

◆ set_wstring_value()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_wstring_value ( DDS::MemberId  id,
const CORBA::WChar value 
)

Definition at line 1865 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED, and value.

1866 {
1867 #ifdef DDS_HAS_WCHAR
1868  return set_single_value<TK_STRING16>(id, value);
1869 #else
1870  return DDS::RETCODE_UNSUPPORTED;
1871 #endif
1872 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ set_wstring_values()

DDS::ReturnCode_t OpenDDS::XTypes::DynamicDataImpl::set_wstring_values ( DDS::MemberId  id,
const DDS::WstringSeq value 
)

Definition at line 2466 of file DynamicDataImpl.cpp.

References DDS::RETCODE_UNSUPPORTED, and value.

2467 {
2468 #ifdef DDS_HAS_WCHAR
2469  return set_sequence_values<TK_STRING16>(id, value);
2470 #else
2471  return DDS::RETCODE_UNSUPPORTED;
2472 #endif
2473 }
const LogLevel::Value value
Definition: debug.cpp:61
const ReturnCode_t RETCODE_UNSUPPORTED

◆ validate_discriminator()

bool OpenDDS::XTypes::DynamicDataImpl::validate_discriminator ( CORBA::Long  disc_val,
const DDS::MemberDescriptor_var &  md 
) const
private

Definition at line 1297 of file DynamicDataImpl.cpp.

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

Referenced by set_complex_to_union(), and set_value_to_union().

1299 {
1300  // If the selected member is not default, the discriminator value must equal one of its
1301  // labels. If the selected member is default, the discriminator value must not equal
1302  // any label of the non-default members.
1303  if (!md->is_default_label()) {
1304  const DDS::UnionCaseLabelSeq& labels = md->label();
1305  bool found = false;
1306  for (CORBA::ULong i = 0; !found && i < labels.length(); ++i) {
1307  if (disc_val == labels[i]) {
1308  found = true;
1309  }
1310  }
1311  if (!found) {
1312  return false;
1313  }
1314  } else if (!is_default_member_selected(disc_val, md->id())) {
1315  return false;
1316  }
1317  return true;
1318 }
bool is_default_member_selected(CORBA::Long disc_val, DDS::MemberId default_id) const
ACE_CDR::ULong ULong
ACE_CDR::ULong length() const
Definition: TypeObject.h:167

◆ validate_member_id_collection()

bool OpenDDS::XTypes::DynamicDataImpl::validate_member_id_collection ( DDS::MemberId  id,
TypeKind  collection_tk 
) const
private

Definition at line 2125 of file DynamicDataImpl.cpp.

References ACE_ERROR, OpenDDS::XTypes::bound_total(), check_index_from_id(), LM_NOTICE, OpenDDS::DCPS::log_level, OpenDDS::DCPS::LogLevel::Notice, OpenDDS::XTypes::TK_ARRAY, OpenDDS::XTypes::TK_MAP, OpenDDS::XTypes::TK_SEQUENCE, and OpenDDS::XTypes::DynamicDataBase::type_desc_.

Referenced by set_complex_to_collection(), set_value_to_collection(), set_values_to_array(), and set_values_to_sequence().

2126 {
2127  switch (tk) {
2128  case TK_SEQUENCE:
2129  case TK_ARRAY:
2130  return check_index_from_id(tk, id, bound_total(type_desc_));
2131  case TK_MAP:
2132  if (log_level >= LogLevel::Notice) {
2133  ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: DynamicDataImpl::validate_member_id_collection::"
2134  " Map is currently not supported\n"));
2135  }
2136  }
2137  return false;
2138 }
const TypeKind TK_SEQUENCE
Definition: TypeObject.h:248
#define ACE_ERROR(X)
DDS::TypeDescriptor_var type_desc_
bool check_index_from_id(TypeKind tk, DDS::MemberId id, CORBA::ULong bound) const
DDS::UInt32 bound_total(DDS::TypeDescriptor_var descriptor)
OpenDDS_Dcps_Export LogLevel log_level
const TypeKind TK_ARRAY
Definition: TypeObject.h:249
const TypeKind TK_MAP
Definition: TypeObject.h:250

◆ write_discriminator()

bool OpenDDS::XTypes::DynamicDataImpl::write_discriminator ( CORBA::Long  value)
private

Definition at line 3647 of file DynamicDataImpl.cpp.

References OpenDDS::XTypes::enum_bound(), DDS::RETCODE_OK, OpenDDS::XTypes::TK_ENUM, OpenDDS::XTypes::DynamicDataBase::type_, and write_discriminator_helper().

Referenced by get_complex_from_union().

3648 {
3649  TypeKind treat_as = type_->get_kind();
3650  if (treat_as == TK_ENUM) {
3651  if (enum_bound(type_, treat_as) != DDS::RETCODE_OK) {
3652  return false;
3653  }
3654  }
3655  return write_discriminator_helper(value, treat_as);
3656 }
const LogLevel::Value value
Definition: debug.cpp:61
bool write_discriminator_helper(CORBA::Long value, TypeKind treat_as)
ACE_CDR::Octet TypeKind
Definition: TypeObject.h:210
DDS::DynamicType_var type_
The actual (i.e., non-alias) DynamicType of the associated type.
DDS::ReturnCode_t enum_bound(DDS::DynamicType_ptr enum_type, DDS::TypeKind &bound_kind)
const TypeKind TK_ENUM
Definition: TypeObject.h:238
const ReturnCode_t RETCODE_OK

◆ write_discriminator_helper()

bool OpenDDS::XTypes::DynamicDataImpl::write_discriminator_helper ( CORBA::Long  value,
TypeKind  treat_as 
)
private

Definition at line 3612 of file DynamicDataImpl.cpp.

References insert_single(), OpenDDS::XTypes::MEMBER_ID_INVALID, OpenDDS::XTypes::TK_BOOLEAN, OpenDDS::XTypes::TK_BYTE, OpenDDS::XTypes::TK_CHAR16, OpenDDS::XTypes::TK_CHAR8, OpenDDS::XTypes::TK_INT16, OpenDDS::XTypes::TK_INT32, OpenDDS::XTypes::TK_INT64, OpenDDS::XTypes::TK_INT8, OpenDDS::XTypes::TK_UINT16, OpenDDS::XTypes::TK_UINT32, OpenDDS::XTypes::TK_UINT64, and OpenDDS::XTypes::TK_UINT8.

Referenced by write_discriminator().

3613 {
3614  switch (treat_as) {
3615  case TK_BOOLEAN:
3617  case TK_BYTE:
3619  case TK_CHAR8:
3621 #ifdef DDS_HAS_WCHAR
3622  case TK_CHAR16:
3624 #endif
3625  case TK_INT8:
3627  case TK_UINT8:
3629  case TK_INT16:
3630  return insert_single(MEMBER_ID_INVALID, static_cast<CORBA::Short>(value));
3631  case TK_UINT16:
3632  return insert_single(MEMBER_ID_INVALID, static_cast<CORBA::UShort>(value));
3633  case TK_INT32:
3635  case TK_UINT32:
3636  return insert_single(MEMBER_ID_INVALID, static_cast<CORBA::ULong>(value));
3637  case TK_INT64:
3638  return insert_single(MEMBER_ID_INVALID, static_cast<CORBA::LongLong>(value));
3639  case TK_UINT64:
3640  return insert_single(MEMBER_ID_INVALID, static_cast<CORBA::ULongLong>(value));
3641  default:
3642  return false;
3643  }
3644 }
const LogLevel::Value value
Definition: debug.cpp:61
const TypeKind TK_INT32
Definition: TypeObject.h:217
const TypeKind TK_BYTE
Definition: TypeObject.h:215
const TypeKind TK_INT16
Definition: TypeObject.h:216
const TypeKind TK_UINT16
Definition: TypeObject.h:219
const TypeKind TK_INT8
Definition: TypeObject.h:225
bool insert_single(DDS::MemberId id, const ACE_OutputCDR::from_int8 &value)
const TypeKind TK_BOOLEAN
Definition: TypeObject.h:214
const TypeKind TK_CHAR8
Definition: TypeObject.h:227
const ACE_CDR::ULong MEMBER_ID_INVALID
Definition: TypeObject.h:911
const TypeKind TK_UINT64
Definition: TypeObject.h:221
const TypeKind TK_INT64
Definition: TypeObject.h:218
const TypeKind TK_UINT32
Definition: TypeObject.h:220
const TypeKind TK_UINT8
Definition: TypeObject.h:226
const TypeKind TK_CHAR16
Definition: TypeObject.h:228

Friends And Related Function Documentation

◆ DCPS::operator<< [1/2]

OpenDDS_Dcps_Export bool DCPS::operator<< ( DCPS::Serializer ser,
const DynamicDataImpl data 
)
friend

◆ DCPS::operator<< [2/2]

OpenDDS_Dcps_Export bool DCPS::operator<< ( DCPS::Serializer ser,
const DCPS::KeyOnly< const DynamicDataImpl > &  data 
)
friend

◆ DCPS::serialized_size [1/2]

OpenDDS_Dcps_Export bool DCPS::serialized_size ( const DCPS::Encoding encoding,
size_t &  size,
const DynamicDataImpl data 
)
friend

◆ DCPS::serialized_size [2/2]

OpenDDS_Dcps_Export bool DCPS::serialized_size ( const DCPS::Encoding encoding,
size_t &  size,
const DCPS::KeyOnly< const DynamicDataImpl > &  data 
)
friend

Member Data Documentation

◆ container_

DataContainer OpenDDS::XTypes::DynamicDataImpl::container_
private

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