diff options
author | gokhale <asgokhale@users.noreply.github.com> | 1998-04-23 21:18:52 +0000 |
---|---|---|
committer | gokhale <asgokhale@users.noreply.github.com> | 1998-04-23 21:18:52 +0000 |
commit | 531f8207adb685c1e6ca972583ecd8c9ec39d62e (patch) | |
tree | 705167126a9f07fc34d50ee0ce41dee68800ff8e /TAO/tao/decode.cpp | |
parent | 019120f651ffedb250ad8a17571eb1935b155558 (diff) | |
download | ATCD-531f8207adb685c1e6ca972583ecd8c9ec39d62e.tar.gz |
*** empty log message ***
Diffstat (limited to 'TAO/tao/decode.cpp')
-rw-r--r-- | TAO/tao/decode.cpp | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/TAO/tao/decode.cpp b/TAO/tao/decode.cpp index 5ffe49a84a1..391fd4dbfcb 100644 --- a/TAO/tao/decode.cpp +++ b/TAO/tao/decode.cpp @@ -859,32 +859,68 @@ TAO_Marshal_Union::decode (CORBA::TypeCode_ptr tc, switch (member_label->type ()->kind (env)) { case CORBA::tk_short: + { + CORBA::Short s; + *member_label >>= s; + if (s == *(CORBA::Short *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } + break; case CORBA::tk_ushort: - if (*(CORBA::Short *) member_label->value () == - *(CORBA::Short *) discrim_val) - discrim_matched = CORBA::B_TRUE; + { + CORBA::UShort s; + *member_label >>= s; + if (s == *(CORBA::UShort *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } break; case CORBA::tk_long: + { + CORBA::Long l; + *member_label >>= l; + if (l == *(CORBA::Long *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } + break; case CORBA::tk_ulong: + { + CORBA::ULong l; + *member_label >>= l; + if (l == *(CORBA::ULong *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } + break; case CORBA::tk_enum: - if (*(CORBA::ULong *) member_label->value () == - *(CORBA::ULong *) discrim_val) - discrim_matched = CORBA::B_TRUE; + { + CORBA::Long l; + TAO_InputCDR stream ((ACE_Message_Block *) + member_label->value + ()); + (void)stream.decode (discrim_tc, &l, 0, env); + if (l == *(CORBA::Long *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } break; case CORBA::tk_char: - if (*(CORBA::Char *) member_label->value () == - *(CORBA::Char *) discrim_val) - discrim_matched = CORBA::B_TRUE; + { + CORBA::Char c; + *member_label >>= CORBA::Any::to_char (c); + if (c == *(CORBA::Char *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } break; case CORBA::tk_wchar: - if (*(CORBA::WChar *) member_label->value () == - *(CORBA::WChar *) discrim_val) + // @@ ASG TO-DO + if (*(CORBA::WChar *) member_label->value () == *(CORBA::WChar *) discrim_val) discrim_matched = CORBA::B_TRUE; break; case CORBA::tk_boolean: - if (*(CORBA::Boolean *) member_label->value () == - *(CORBA::Boolean *) discrim_val) - discrim_matched = CORBA::B_TRUE; + { + CORBA::Boolean b; + *member_label >>= CORBA::Any::to_boolean (b); + if (b == *(CORBA::Boolean *) discrim_val) + discrim_matched = CORBA::B_TRUE; + } break; default: env.exception (new CORBA::BAD_TYPECODE (CORBA::COMPLETED_NO)); |