summaryrefslogtreecommitdiff
path: root/TAO/tao/skip.cpp
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-05-26 18:51:02 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-05-26 18:51:02 +0000
commitd761759e938dffbfe0d1d5026b5677fb34db6a92 (patch)
tree6b0186d44bfe1345f70c2333caadf3c243c21e6f /TAO/tao/skip.cpp
parent7d7290ba0d8bca374eb0a388382a54a013a23f55 (diff)
downloadATCD-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.cpp55
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;