diff options
Diffstat (limited to 'config_complex_types_1/Config_Handlers/DynAny_Handler/DynSequence_Handler.cpp')
-rw-r--r-- | config_complex_types_1/Config_Handlers/DynAny_Handler/DynSequence_Handler.cpp | 98 |
1 files changed, 27 insertions, 71 deletions
diff --git a/config_complex_types_1/Config_Handlers/DynAny_Handler/DynSequence_Handler.cpp b/config_complex_types_1/Config_Handlers/DynAny_Handler/DynSequence_Handler.cpp index f2725a42d82..b31243960ca 100644 --- a/config_complex_types_1/Config_Handlers/DynAny_Handler/DynSequence_Handler.cpp +++ b/config_complex_types_1/Config_Handlers/DynAny_Handler/DynSequence_Handler.cpp @@ -15,107 +15,63 @@ namespace CIAO namespace Config_Handlers { DynamicAny::DynAny_ptr - DynSequence_Handler::extract_into_dynany (const DataType &type, - const DataValue &value) + DynSequence_Handler::extract_into_dynany (const Any &any) { - CORBA::TypeCode_ptr tc = DynSequence_Handler::create_typecode (type); + CORBA::TypeCode_ptr tc = DynSequence_Handler::create_typecode (any.type ()); // Make the actual DynSequence DynamicAny::DynAny_var temp = DYNANY_HANDLER->daf ()->create_dyn_any_from_type_code (tc); DynamicAny::DynSequence_var retval = DynamicAny::DynSequence::_narrow (temp.in ()); - switch (type.kind ().integral ()) + CORBA::TypeCode_ptr element_tc = + DynAny_Handler::create_typecode (any.type ().sequence ().elementType ()); + + switch (any.type ().kind ().integral ()) { // ========== BASIC TYPES case TCKind::tk_null_l: case TCKind::tk_void_l: ACE_ERROR ((LM_WARNING, "I don't know how to handle null or void types\n")); + throw 1; case TCKind::tk_short_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_short); - retval->insert_short (CORBA::Short (static_cast < ::XMLSchema::short_ const & > (*value.begin_short ()))); - break; - case TCKind::tk_long_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_long); - retval->insert_long (CORBA::Long (static_cast < ::XMLSchema::int_ const& > (*value.begin_long ()))); - break; - case TCKind::tk_ushort_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_ushort); - retval->insert_ushort (CORBA::UShort (static_cast< ::XMLSchema::unsignedShort const & > (*value.begin_ushort ()))); - break; - case TCKind::tk_ulong_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_ulong); - retval->insert_ulong (CORBA::ULong (static_cast < ::XMLSchema::unsignedInt const& > (*value.begin_ulong ()))); - break; - case TCKind::tk_float_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_float); - retval->insert_float (CORBA::Float (*value.begin_float ())); - break; - case TCKind::tk_double_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_double); - retval->insert_double (CORBA::Double (*value.begin_double ())); - break; - case TCKind::tk_boolean_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_boolean); - retval->insert_boolean (static_cast < ::XMLSchema::boolean const& > (*value.begin_boolean ())); - break; - - case TCKind::tk_char_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_char); - retval->insert_char (CORBA::Char (*value.begin_string ()->c_str ())); - break; - case TCKind::tk_octet_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_octet); - retval->insert_octet (static_cast <const unsigned char &> (*value.begin_octet ())); - break; - case TCKind::tk_string_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_string); - retval->insert_string (value.begin_string ()->c_str ()); - break; - case TCKind::tk_longlong_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_longlong); - retval->insert_longlong (CORBA::LongLong (static_cast < ::XMLSchema::long_ const& > (*value.begin_longlong ()))); - break; - case TCKind::tk_ulonglong_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_ulonglong); - retval->insert_ulonglong (CORBA::ULongLong (static_cast < ::XMLSchema::unsignedLong const& > (*value.begin_ulonglong ()))); - break; - - case TCKind::tk_longdouble_l: - break; - - case TCKind::tk_wchar_l: - retval = this->daf_->create_dyn_any_from_type_code (CORBA::_tc_wchar); - retval->insert_wchar (CORBA::WChar (*value.begin_string ()->c_str ())); - break; - + case TCKind::tk_longdouble_l: case TCKind::tk_wstring_l: - break; - case TCKind::tk_enum_l: - ACE_ERROR ((LM_ERROR, "Preparing to extract into enum\n")); - return DynEnum_Handler::extract_into_dynany (type, value); - + case TCKind::tk_objref_l: + case TCKind::tk_fixed_l: case TCKind::tk_wfixed_l: + case TCKind::tk_component_l: + case TCKind::tk_home_l: + // special case where multiplicity of data value iterator is greater than one + // and is equal to length of sequence. + for (Any::value_const_iterator i = values; + values + case TCKind::tk_char_l: + case TCKind::tk_wchar_l: + // special case where value iterataor multiplicity should be one, and should + // represent a string, each character of which becomes a element of the sequence. + + case TCKind::tk_sequence_l: + case TCKind::tk_array_l: + // Several special cases here. + case TCKind::tk_any_l: case TCKind::tk_TypeCode_l: case TCKind::tk_Principal_l: - case TCKind::tk_objref_l: case TCKind::tk_struct_l: case TCKind::tk_union_l: - case TCKind::tk_sequence_l: - case TCKind::tk_array_l: case TCKind::tk_alias_l: case TCKind::tk_except_l: case TCKind::tk_value_l: @@ -123,9 +79,9 @@ namespace CIAO case TCKind::tk_native_l: case TCKind::tk_abstract_interface_l: case TCKind::tk_local_interface_l: - case TCKind::tk_component_l: - case TCKind::tk_home_l: case TCKind::tk_event_l: + // Special case where element association in datavalue contains another datavalue. + ACE_ERROR ((LM_ERROR, "Type not supported\n")); throw 1; } |