| typedef bool(* TAO::TypeCodeFactory::factory)(CORBA::TCKind, TAO_InputCDR &, CORBA::TypeCode_ptr &, TC_Info_List &) |
Definition at line 39 of file TypeCode_CDR_Extraction.h.
Definition at line 41 of file TypeCode_CDR_Extraction.cpp.
| bool TAO::TypeCodeFactory::tc_abstract_interface_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1158 of file TypeCode_CDR_Extraction.cpp.
{
return tc_objref_factory (CORBA::tk_abstract_interface, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_alias_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 911 of file TypeCode_CDR_Extraction.cpp.
{
// The remainder of a tk_alias or tk_value_box TypeCode is encoded
// in a CDR encapsulation.
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID, name and content type.
CORBA::String_var id, name;
CORBA::TypeCode_var content_type;
if (!(cdr >> TAO_InputCDR::to_string (id.out (), 0)
&& cdr >> TAO_InputCDR::to_string (name.out (), 0)
&& tc_demarshal (cdr, content_type.out (), infos)))
{
return false;
}
typedef TAO::TypeCode::Alias<
CORBA::String_var,
CORBA::TypeCode_var,
TAO::True_RefCount_Policy> typecode_type;
ACE_NEW_RETURN (tc,
typecode_type (kind,
id.in (),
name.in (),
content_type),
false);
return true;
}
| bool TAO::TypeCodeFactory::tc_any_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 301 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_any);
return true;
}
| bool TAO::TypeCodeFactory::tc_array_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 902 of file TypeCode_CDR_Extraction.cpp.
{
return tc_sequence_factory (kind, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_boolean_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 268 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_boolean);
return true;
}
| bool TAO::TypeCodeFactory::tc_char_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 279 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_char);
return true;
}
| bool TAO::TypeCodeFactory::tc_component_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1176 of file TypeCode_CDR_Extraction.cpp.
{
return tc_objref_factory (CORBA::tk_component, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_double_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 257 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_double);
return true;
}
| bool TAO::TypeCodeFactory::tc_enum_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 790 of file TypeCode_CDR_Extraction.cpp.
{
// The remainder of a tk_enum TypeCode is encoded in a CDR
// encapsulation.
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID, name and number of fields.
CORBA::String_var id, name;
CORBA::ULong nenumerators;
if (!(cdr >> TAO_InputCDR::to_string (id.out (), 0)
&& cdr >> TAO_InputCDR::to_string (name.out (), 0)
&& cdr >> nenumerators))
return false;
ACE_Array_Base<CORBA::String_var> enumerators (nenumerators);
for (CORBA::ULong i = 0; i < nenumerators; ++i)
{
if (!(cdr >> TAO_InputCDR::to_string (enumerators[i].out (), 0)))
return false;
}
typedef TAO::TypeCode::Enum<
CORBA::String_var,
ACE_Array_Base<CORBA::String_var>,
TAO::True_RefCount_Policy> typecode_type;
ACE_NEW_RETURN (tc,
typecode_type (id.in (),
name.in (),
enumerators, // Will be copied.
nenumerators),
false);
return true;
}
| bool TAO::TypeCodeFactory::tc_event_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1194 of file TypeCode_CDR_Extraction.cpp.
{
return tc_value_factory (kind, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_except_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 947 of file TypeCode_CDR_Extraction.cpp.
{
return tc_struct_factory (kind, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_fixed_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1009 of file TypeCode_CDR_Extraction.cpp.
{
// A tk_fixed TypeCode has a simple parameter list, i.e. it is not
// encoded in a CDR encapsulation.
CORBA::UShort digits, scale;
if (!(cdr >> digits && cdr >> scale))
return false;
typedef TAO::TypeCode::Fixed<TAO::True_RefCount_Policy> typecode_type;
ACE_NEW_RETURN (tc,
typecode_type (digits, scale),
false);
return true;
}
| bool TAO::TypeCodeFactory::tc_float_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 246 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_float);
return true;
}
| bool TAO::TypeCodeFactory::tc_home_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1185 of file TypeCode_CDR_Extraction.cpp.
{
return tc_objref_factory (CORBA::tk_home, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_local_interface_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1167 of file TypeCode_CDR_Extraction.cpp.
{
return tc_objref_factory (CORBA::tk_local_interface, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_long_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 213 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_long);
return true;
}
| bool TAO::TypeCodeFactory::tc_longdouble_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 978 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_longdouble);
return true;
}
| bool TAO::TypeCodeFactory::tc_longlong_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 956 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_longlong);
return true;
}
| bool TAO::TypeCodeFactory::tc_native_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1149 of file TypeCode_CDR_Extraction.cpp.
{
return tc_objref_factory (CORBA::tk_native, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_null_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 180 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_null);
return true;
}
| bool TAO::TypeCodeFactory::tc_objref_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 334 of file TypeCode_CDR_Extraction.cpp.
{
// The remainder of a tk_objref TypeCode is encoded in a CDR
// encapsulation.
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID and name.
CORBA::String_var id;
if (!(cdr >> TAO_InputCDR::to_string (id.out (), 0)))
return false;
static char const Object_id[] = "IDL:omg.org/CORBA/Object:1.0";
static char const CCMObject_id[] = "IDL:omg.org/CORBA/CCMObject:1.0";
static char const CCMHome_id[] = "IDL:omg.org/CORBA/CCMHome:1.0";
char const * tc_constant_id = "";
switch (kind)
{
case CORBA::tk_component:
tc_constant_id = CCMObject_id;
break;
case CORBA::tk_home:
tc_constant_id = CCMHome_id;
break;
case CORBA::tk_objref:
tc_constant_id = Object_id;
break;
default:
break;
}
if (ACE_OS::strcmp (id.in (), // len >= 0!!!
tc_constant_id) == 0)
{
if (!cdr.skip_string ()) // No need to demarshal the name.
return false;
CORBA::TypeCode_ptr tc_constant = CORBA::TypeCode::_nil ();
switch (kind)
{
case CORBA::tk_component:
tc_constant = CORBA::_tc_Component;
break;
case CORBA::tk_home:
tc_constant = CORBA::_tc_Home;
break;
case CORBA::tk_objref:
tc_constant = CORBA::_tc_Object;
break;
default:
break;
}
// No need to create a TypeCode. Just use the TypeCode
// constant.
tc =
CORBA::TypeCode::_duplicate (tc_constant);
}
else
{
CORBA::String_var name;
if (!(cdr >> TAO_InputCDR::to_string (name.out (), 0)))
return false;
typedef TAO::TypeCode::Objref<CORBA::String_var,
TAO::True_RefCount_Policy> typecode_type;
ACE_NEW_RETURN (tc,
typecode_type (kind,
id.in (),
name.in ()),
false);
}
return true;
}
| bool TAO::TypeCodeFactory::tc_octet_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 290 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_octet);
return true;
}
| bool TAO::TypeCodeFactory::tc_Principal_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 323 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_Principal);
return true;
}
| bool TAO::TypeCodeFactory::tc_sequence_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 869 of file TypeCode_CDR_Extraction.cpp.
{
ACE_ASSERT (kind == CORBA::tk_sequence || kind == CORBA::tk_array);
// The remainder of a tk_sequence TypeCode is encoded in a CDR
// encapsulation.
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID, name and content type.
CORBA::TypeCode_var content_type;
CORBA::ULong length;
if (!(tc_demarshal (cdr, content_type.out (), infos)
&& cdr >> length))
return false;
typedef TAO::TypeCode::Sequence<
CORBA::TypeCode_var,
TAO::True_RefCount_Policy> typecode_type;
ACE_NEW_RETURN (tc,
typecode_type (kind, content_type, length),
false);
return true;
}
| bool TAO::TypeCodeFactory::tc_short_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 202 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_short);
return true;
}
| bool TAO::TypeCodeFactory::tc_string_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 834 of file TypeCode_CDR_Extraction.cpp.
{
// A tk_string/tk_wstring TypeCode has a simple parameter list,
// i.e. it is not encoded in a CDR encapsulation.
CORBA::ULong bound;
if (!(cdr >> bound))
return false;
if (bound == 0)
{
// Just use the TypeCode constant.
if (kind == CORBA::tk_string)
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
else if (kind == CORBA::tk_wstring)
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_wstring);
else
return false;
return true;
}
typedef TAO::TypeCode::String<TAO::True_RefCount_Policy> typecode_type;
ACE_NEW_RETURN (tc,
typecode_type (kind, bound),
false);
return true;
}
| bool TAO::TypeCodeFactory::tc_struct_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 419 of file TypeCode_CDR_Extraction.cpp.
{
ACE_ASSERT (kind == CORBA::tk_struct || kind == CORBA::tk_except);
// The remainder of a tk_struct/tk_except TypeCode is encoded in
// a CDR encapsulation.
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID, name and number of fields.
CORBA::String_var id, name;
CORBA::ULong nfields;
if (!(cdr >> TAO_InputCDR::to_string (id.out (), 0)
&& cdr >> TAO_InputCDR::to_string (name.out (), 0)
&& cdr >> nfields))
return false;
typedef ACE_Array_Base<TAO::TypeCode::Struct_Field<CORBA::String_var,
CORBA::TypeCode_var> >
member_array_type;
member_array_type fields (nfields);
for (CORBA::ULong i = 0; i < nfields; ++i)
{
if (!(cdr >> TAO_InputCDR::to_string (fields[i].name.out (), 0)
&& tc_demarshal (cdr, fields[i].type.out (), infos)))
return false;
}
typedef TAO::TypeCode::Struct<
CORBA::String_var,
CORBA::TypeCode_var,
member_array_type,
TAO::True_RefCount_Policy> typecode_type;
// Check if struct TypeCode is recursive.
TAO::TypeCodeFactory::TC_Info_List recursive_tc;
if (kind == CORBA::tk_struct && find_recursive_tc (id.in (), recursive_tc, infos))
{
// Set remaining parameters.
typedef TAO::TypeCode::Recursive_Type<typecode_type,
CORBA::TypeCode_var,
member_array_type>
recursive_typecode_type;
size_t const len = recursive_tc.size ();
bool assigned_params = false;
for (size_t i = 0; i < len; ++i)
{
TAO::TypeCodeFactory::TC_Info & info = recursive_tc[i];
recursive_typecode_type * const rtc =
dynamic_cast<recursive_typecode_type *> (info.type);
if (!rtc)
return false; // Should never occur.
assigned_params |= rtc->struct_parameters (name.in (), fields, nfields);
}
// If no parameters were assigned then the reference in the
// fields variable will be released when the variable is destroyed.
// Increment the reference count.
if ( !assigned_params)
{
tc = CORBA::TypeCode::_duplicate(recursive_tc[0].type);
}
else
{
tc = recursive_tc[0].type;
}
}
else
{
ACE_NEW_RETURN (tc,
typecode_type (kind,
id.in (),
name.in (),
fields, // Will be copied.
nfields),
false);
}
return true;
}
| bool TAO::TypeCodeFactory::tc_TypeCode_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 312 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_TypeCode);
return true;
}
| bool TAO::TypeCodeFactory::tc_ulong_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 235 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_ulong);
return true;
}
| bool TAO::TypeCodeFactory::tc_ulonglong_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 967 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_ulonglong);
return true;
}
| bool TAO::TypeCodeFactory::tc_union_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 513 of file TypeCode_CDR_Extraction.cpp.
{
// The remainder of a tk_enum TypeCode is encoded in a CDR
// encapsulation.
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID, name, discriminant type, default index
// and case count.
CORBA::String_var id, name;
CORBA::TypeCode_var discriminant_type;
CORBA::Long default_index = -1;
CORBA::ULong ncases = 0; // Just 'n case :-)
if (!(cdr >> TAO_InputCDR::to_string (id.out (), 0)
&& cdr >> TAO_InputCDR::to_string (name.out (), 0)
&& cdr >> discriminant_type.out ())) // No need to use tc_demarshal()
return false;
CORBA::TCKind const discriminant_kind =
discriminant_type->kind ();
// Check for valid discriminant type.
if (!(discriminant_kind == CORBA::tk_enum
|| discriminant_kind == CORBA::tk_ulong
|| discriminant_kind == CORBA::tk_long
|| discriminant_kind == CORBA::tk_ushort
|| discriminant_kind == CORBA::tk_short
|| discriminant_kind == CORBA::tk_char
|| discriminant_kind == CORBA::tk_boolean
|| discriminant_kind == CORBA::tk_longlong
|| discriminant_kind == CORBA::tk_ulonglong))
return false;
if (!(cdr >> default_index
&& default_index >= -1
&& cdr >> ncases))
return false;
typedef union_elem_type elem_type;
typedef union_case_array_type case_array_type;
case_array_type cases (ncases);
for (CORBA::ULong i = 0; i < ncases; ++i)
{
elem_type & member = cases[i];
TAO::TypeCode::Case<CORBA::String_var, CORBA::TypeCode_var> * the_case = 0;
// Ugly. *sigh*
switch (discriminant_kind)
{
case CORBA::tk_enum:
{
CORBA::ULong label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_Enum_T<CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (discriminant_type.in(), label),
false);
}
break;
case CORBA::tk_ulong:
{
CORBA::ULong label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_T<CORBA::ULong,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
case CORBA::tk_long:
{
CORBA::Long label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_T<CORBA::Long,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
case CORBA::tk_ushort:
{
CORBA::UShort label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_T<CORBA::UShort,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
case CORBA::tk_short:
{
CORBA::Short label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_T<CORBA::Short,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
case CORBA::tk_char:
{
CORBA::Char label;
if (!(cdr >> CORBA::Any::to_char (label)))
return false;
typedef TypeCode::Case_T<CORBA::Char,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
case CORBA::tk_boolean:
{
CORBA::Boolean label;
if (!(cdr >> CORBA::Any::to_boolean (label)))
return false;
typedef TypeCode::Case_T<CORBA::Boolean,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
case CORBA::tk_longlong:
{
CORBA::LongLong label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_T<CORBA::LongLong,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
#if !defined (ACE_LACKS_LONGLONG_T)
case CORBA::tk_ulonglong:
{
CORBA::ULongLong label;
if (!(cdr >> label))
return false;
typedef TypeCode::Case_T<CORBA::ULongLong,
CORBA::String_var,
CORBA::TypeCode_var> case_type;
ACE_NEW_RETURN (the_case,
case_type (label),
false);
}
break;
#endif /* !ACE_LACKS_LONGLONG_T */
default:
return false;
}
elem_type case_value (the_case);
member.swap (case_value); // Exception-safe
CORBA::String_var the_name;
CORBA::TypeCode_var the_type;
if (!(cdr >> TAO_InputCDR::to_string (the_name.out (), 0)
&& tc_demarshal (cdr, the_type.out (), infos)))
return false;
member->name (the_name.in ());
member->type (the_type.in ());
}
typedef TAO::TypeCode::Union<CORBA::String_var,
CORBA::TypeCode_var,
case_array_type,
TAO::True_RefCount_Policy> typecode_type;
// Check if we have recursive members. There could be multiple.
TAO::TypeCodeFactory::TC_Info_List recursive_tc;
if (find_recursive_tc (id.in (), recursive_tc, infos))
{
// Set remaining parameters.
typedef TAO::TypeCode::Recursive_Type<typecode_type,
CORBA::TypeCode_var,
case_array_type>
recursive_typecode_type;
size_t const len = recursive_tc.size ();
bool assigned_params = false;
for (size_t i = 0; i < len; ++i)
{
TAO::TypeCodeFactory::TC_Info & info = recursive_tc[i];
recursive_typecode_type * const rtc =
dynamic_cast<recursive_typecode_type *> (info.type);
if (!rtc)
return false; // Should never occur.
assigned_params |= rtc->union_parameters (name.in (),
discriminant_type,
cases, // Will be copied.
ncases,
default_index);
}
// If no parameters were assigned then the reference in the
// cases variable will be released when the variable is destroyed.
// Increment the reference count.
if ( !assigned_params)
{
tc = CORBA::TypeCode::_duplicate(recursive_tc[0].type);
}
else
{
tc = recursive_tc[0].type;
}
}
else
{
ACE_NEW_RETURN (tc,
typecode_type (id.in (),
name.in (),
discriminant_type,
cases, // Will be copied.
ncases,
default_index),
false);
}
return true;
}
| bool TAO::TypeCodeFactory::tc_ushort_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 224 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_ushort);
return true;
}
| bool TAO::TypeCodeFactory::tc_value_box_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1140 of file TypeCode_CDR_Extraction.cpp.
{
return tc_alias_factory (kind, cdr, tc, infos);
}
| bool TAO::TypeCodeFactory::tc_value_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1031 of file TypeCode_CDR_Extraction.cpp.
{
// The remainder of a tk_value/tk_event TypeCode is encoded in a
// CDR encapsulation
TAO_InputCDRByteOrderGuard boguard (cdr);
if (!start_cdr_encap_extraction (cdr))
return false;
// Extract the repository ID, name and number of fields.
CORBA::String_var id;
if (!(cdr >> TAO_InputCDR::to_string (id.out (), 0)))
return false;
CORBA::String_var name;
CORBA::ValueModifier type_modifier;
CORBA::TypeCode_var concrete_base;
CORBA::ULong nfields;
if (!(cdr >> TAO_InputCDR::to_string (name.out (), 0)
&& cdr >> type_modifier
&& cdr >> concrete_base.out ()
&& cdr >> nfields))
return false;
typedef ACE_Array_Base<TAO::TypeCode::Value_Field<CORBA::String_var,
CORBA::TypeCode_var> >
member_array_type;
member_array_type fields (nfields);
for (CORBA::ULong i = 0; i < nfields; ++i)
{
TAO::TypeCode::Value_Field<CORBA::String_var,
CORBA::TypeCode_var> & field = fields[i];
if (!(cdr >> TAO_InputCDR::to_string (field.name.out (), 0)
&& tc_demarshal (cdr, field.type.out (), infos)
&& cdr >> field.visibility))
return false;
}
typedef TAO::TypeCode::Value<
CORBA::String_var,
CORBA::TypeCode_var,
member_array_type,
TAO::True_RefCount_Policy> typecode_type;
// Check if valuetype/eventtype TypeCode is recursive.
TAO::TypeCodeFactory::TC_Info_List recursive_tc;
if (find_recursive_tc (id.in (), recursive_tc, infos))
{
// Set remaining parameters.
typedef TAO::TypeCode::Recursive_Type<typecode_type,
CORBA::TypeCode_var,
member_array_type>
recursive_typecode_type;
size_t const len = recursive_tc.size ();
bool assigned_params = false;
for (size_t i = 0; i < len; ++i)
{
TAO::TypeCodeFactory::TC_Info & info = recursive_tc[i];
recursive_typecode_type * const rtc =
dynamic_cast<recursive_typecode_type *> (info.type);
if (!rtc)
return false; // Should never occur.
assigned_params |= rtc->valuetype_parameters (name.in (),
type_modifier,
concrete_base,
fields, // Will be copied.
nfields);
}
// If no parameters were assigned then the reference in the
// fields variable will be released when the variable is destroyed.
// Increment the reference count.
if ( !assigned_params)
{
tc = CORBA::TypeCode::_duplicate(recursive_tc[0].type);
}
else
{
tc = recursive_tc[0].type;
}
}
else
{
ACE_NEW_RETURN (tc,
typecode_type (kind,
id.in (),
name.in (),
type_modifier,
concrete_base,
fields, // Will be copied.
nfields),
false);
}
return true;
}
| bool TAO::TypeCodeFactory::tc_void_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 191 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
return true;
}
| bool TAO::TypeCodeFactory::tc_wchar_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 989 of file TypeCode_CDR_Extraction.cpp.
{
tc = CORBA::TypeCode::_duplicate (CORBA::_tc_wchar);
return true;
}
| bool TAO::TypeCodeFactory::tc_wstring_factory | ( | CORBA::TCKind | kind, | |
| TAO_InputCDR & | cdr, | |||
| CORBA::TypeCode_ptr & | tc, | |||
| TC_Info_List & | infos | |||
| ) |
Definition at line 1000 of file TypeCode_CDR_Extraction.cpp.
{
return tc_string_factory (kind, cdr, tc, infos);
}
1.7.0