00001 // Interpreter_Utils.cpp,v 1.17 2006/04/25 11:35:29 jwillemsen Exp 00002 00003 #include "orbsvcs/Trader/Interpreter_Utils.h" 00004 00005 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00006 00007 // TAO_Sequence_Extracter_Base 00008 00009 CORBA::TCKind 00010 TAO_Sequence_Extracter_Base:: 00011 sequence_type (CORBA::TypeCode* type_code 00012 ACE_ENV_ARG_DECL) 00013 ACE_THROW_SPEC ((CORBA::SystemException)) 00014 { 00015 // @@ Seth, why do you use a comma to separate the two statements? 00016 CORBA::TCKind return_value = CORBA::tk_void, 00017 type_kind = type_code->kind (ACE_ENV_SINGLE_ARG_PARAMETER); 00018 ACE_CHECK_RETURN (return_value); 00019 00020 if (type_kind == CORBA::tk_alias 00021 || type_kind == CORBA::tk_sequence) 00022 { 00023 CORBA::TypeCode_var base = CORBA::TypeCode::_duplicate (type_code); 00024 00025 for (;;) 00026 { 00027 CORBA::TCKind base_kind = base->kind (ACE_ENV_SINGLE_ARG_PARAMETER); 00028 ACE_CHECK_RETURN (return_value); 00029 00030 if (base_kind == CORBA::tk_alias) 00031 { 00032 base = base->content_type (ACE_ENV_SINGLE_ARG_PARAMETER); 00033 ACE_CHECK_RETURN (return_value); 00034 } 00035 else 00036 break; 00037 } 00038 00039 CORBA::TCKind base_kind = base->kind (ACE_ENV_SINGLE_ARG_PARAMETER); 00040 ACE_CHECK_RETURN (return_value); 00041 00042 if (base_kind == CORBA::tk_sequence) 00043 { 00044 base = base->content_type (ACE_ENV_SINGLE_ARG_PARAMETER); 00045 ACE_CHECK_RETURN (return_value); 00046 00047 base_kind = base->kind (ACE_ENV_SINGLE_ARG_PARAMETER); 00048 ACE_CHECK_RETURN (return_value); 00049 return_value = base_kind; 00050 } 00051 } 00052 00053 return return_value; 00054 } 00055 00056 TAO_END_VERSIONED_NAMESPACE_DECL