From d761759e938dffbfe0d1d5026b5677fb34db6a92 Mon Sep 17 00:00:00 2001 From: parsons Date: Wed, 26 May 2004 18:51:02 +0000 Subject: ChangeLogTag: Wed May 26 13:44:32 2004 Jeff Parsons --- TAO/tao/skip.cpp | 55 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'TAO/tao/skip.cpp') 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; -- cgit v1.2.1