diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2004-05-26 18:51:02 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2004-05-26 18:51:02 +0000 |
commit | d761759e938dffbfe0d1d5026b5677fb34db6a92 (patch) | |
tree | 6b0186d44bfe1345f70c2333caadf3c243c21e6f /TAO/tao/skip.cpp | |
parent | 7d7290ba0d8bca374eb0a388382a54a013a23f55 (diff) | |
download | ATCD-d761759e938dffbfe0d1d5026b5677fb34db6a92.tar.gz |
ChangeLogTag: Wed May 26 13:44:32 2004 Jeff Parsons <j.parsons@vanderbilt.edu>
Diffstat (limited to 'TAO/tao/skip.cpp')
-rw-r--r-- | TAO/tao/skip.cpp | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/TAO/tao/skip.cpp b/TAO/tao/skip.cpp index ec87a233a43..0f72534cdda 100644 --- a/TAO/tao/skip.cpp +++ b/TAO/tao/skip.cpp @@ -24,7 +24,7 @@ #include "Valuetype_Adapter.h" #include "ORB_Core.h" #include "Typecode.h" -#include "Any.h" +#include "Any_Impl.h" #include "tao/CDR.h" #include "ace/Dynamic_Service.h" @@ -498,35 +498,38 @@ TAO_Marshal_Union::skip (CORBA::TypeCode_ptr tc, case CORBA::tk_enum: { ACE_Message_Block *mb = any->_tao_get_cdr (); + CORBA::ULong d; + bool type_known = false; - if (mb != 0) + if (mb == 0) + { + ACE_NEW_RETURN (mb, + ACE_Message_Block, + TAO::TRAVERSE_STOP); + TAO_OutputCDR out; + any->impl ()->marshal_value (out); + ACE_CDR::consolidate (mb, out.begin ()); + type_known = true; + } + + TAO_InputCDR cdr (mb->data_block (), + ACE_Message_Block::DONT_DELETE, + mb->rd_ptr () - mb->base (), + mb->wr_ptr () - mb->base (), + any->_tao_byte_order (), + TAO_DEF_GIOP_MAJOR, + TAO_DEF_GIOP_MINOR); + + cdr.read_ulong (d); + + if (type_known) { - CORBA::ULong d; - TAO_InputCDR cdr (mb->data_block (), - ACE_Message_Block::DONT_DELETE, - mb->rd_ptr () - mb->base (), - mb->wr_ptr () - mb->base (), - ACE_CDR_BYTE_ORDER, - TAO_DEF_GIOP_MAJOR, - TAO_DEF_GIOP_MINOR); - - cdr.read_ulong (d); - - if (d == enum_v) - { - current_member = i; - } + mb->release (); } - else + + if (d == enum_v) { - const CORBA::ULong *d = - ACE_reinterpret_cast (const CORBA::ULong *, - any->value ()); - - if (*d == enum_v) - { - current_member = i; - } + current_member = i; } } break; |