#include <Marshal.h>


Public Member Functions | |
| TAO_Marshal_Array (void) | |
| virtual TAO::traverse_status | skip (CORBA::TypeCode_ptr tc, TAO_InputCDR *context) |
| skip operation | |
| virtual TAO::traverse_status | append (CORBA::TypeCode_ptr tc, TAO_InputCDR *src, TAO_OutputCDR *dest) |
| append operation | |
marshal an array
Definition at line 312 of file Marshal.h.
| TAO_Marshal_Array::TAO_Marshal_Array | ( | void | ) |
Definition at line 58 of file Marshal.inl.
{
}
| TAO::traverse_status TAO_Marshal_Array::append | ( | CORBA::TypeCode_ptr | tc, | |
| TAO_InputCDR * | src, | |||
| TAO_OutputCDR * | dest | |||
| ) | [virtual] |
append operation
Implements TAO_Marshal_Object.
Definition at line 840 of file append.cpp.
{
// retrieve the bounds of the array
CORBA::ULong bounds = tc->length ();
// get element typecode
CORBA::TypeCode_var tc2 = tc->content_type ();
// For CORBA basic types, the copy can be optimized
CORBA::TCKind kind = tc2->kind ();
// Return status.
TAO::traverse_status retval =
TAO::TRAVERSE_CONTINUE;
switch (kind)
{
case CORBA::tk_octet:
{
char* buf;
if (dest->adjust (ACE_CDR::OCTET_SIZE * bounds,
ACE_CDR::OCTET_ALIGN, buf) == 0)
{
if (src->read_octet_array ((ACE_CDR::Octet*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_boolean:
{
char* buf;
if (dest->adjust (ACE_CDR::OCTET_SIZE * bounds,
ACE_CDR::OCTET_ALIGN, buf) == 0)
{
if (src->read_boolean_array ((ACE_CDR::Boolean*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_char:
{
char* buf;
if (dest->adjust (ACE_CDR::OCTET_SIZE * bounds,
ACE_CDR::OCTET_ALIGN, buf) == 0)
{
if (src->read_char_array ((ACE_CDR::Char*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_short:
{
char* buf;
if (dest->adjust (ACE_CDR::SHORT_SIZE * bounds,
ACE_CDR::SHORT_ALIGN, buf) == 0)
{
if (src->read_short_array ((ACE_CDR::Short*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_ushort:
{
char* buf;
if (dest->adjust (ACE_CDR::SHORT_SIZE * bounds,
ACE_CDR::SHORT_ALIGN, buf) == 0)
{
if (src->read_ushort_array ((ACE_CDR::UShort*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_wchar:
{
char* buf;
if (dest->adjust (ACE_CDR::SHORT_SIZE * bounds,
ACE_CDR::SHORT_ALIGN, buf) == 0)
{
if (src->read_wchar_array ((ACE_CDR::WChar*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_long:
{
char* buf;
if (dest->adjust (ACE_CDR::LONG_SIZE * bounds,
ACE_CDR::LONG_ALIGN, buf) == 0)
{
if (src->read_long_array ((ACE_CDR::Long*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_ulong:
{
char* buf;
if (dest->adjust (ACE_CDR::LONG_SIZE * bounds,
ACE_CDR::LONG_ALIGN, buf) == 0)
{
if (src->read_ulong_array ((ACE_CDR::ULong*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_float:
{
char* buf;
if (dest->adjust (ACE_CDR::LONG_SIZE * bounds,
ACE_CDR::LONG_ALIGN, buf) == 0)
{
if (src->read_float_array ((ACE_CDR::Float*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_double:
{
char* buf;
if (dest->adjust (ACE_CDR::LONGLONG_SIZE * bounds,
ACE_CDR::LONGLONG_ALIGN, buf) == 0)
{
if (src->read_double_array ((ACE_CDR::Double*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_longlong:
{
char* buf;
if (dest->adjust (ACE_CDR::LONGLONG_SIZE * bounds,
ACE_CDR::LONGLONG_ALIGN, buf) == 0)
{
if (src->read_longlong_array ((ACE_CDR::LongLong*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_ulonglong:
{
char* buf;
if (dest->adjust (ACE_CDR::LONGLONG_SIZE * bounds,
ACE_CDR::LONGLONG_ALIGN, buf) == 0)
{
if (src->read_ulonglong_array ((ACE_CDR::ULongLong*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
case CORBA::tk_longdouble:
{
char* buf;
if (dest->adjust (ACE_CDR::LONGDOUBLE_SIZE * bounds,
ACE_CDR::LONGDOUBLE_ALIGN, buf) == 0)
{
if (src->read_longdouble_array ((ACE_CDR::LongDouble*)buf, bounds) == 0)
retval = TAO::TRAVERSE_STOP;
}
}
break;
default:
while (bounds-- && retval == TAO::TRAVERSE_CONTINUE)
{
retval = TAO_Marshal_Object::perform_append (tc2.in (),
src,
dest
);
}
break;
}// end of switch
if (retval == TAO::TRAVERSE_CONTINUE)
return retval;
// error exit
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO_Marshal_Sequence::append detected error\n")));
throw ::CORBA::MARSHAL ();
}
| TAO::traverse_status TAO_Marshal_Array::skip | ( | CORBA::TypeCode_ptr | tc, | |
| TAO_InputCDR * | context | |||
| ) | [virtual] |
skip operation
Implements TAO_Marshal_Object.
Definition at line 676 of file skip.cpp.
{
CORBA::Boolean continue_skipping = true;
// retrieve the bounds of the array
CORBA::ULong bounds = tc->length ();
// get element typecode
// Typecode of the element.
CORBA::TypeCode_var tc2 = tc->content_type ();
// For CORBA basic types, the skip can be optimized
CORBA::TCKind const kind = tc2->kind ();
char *dummy;
switch (kind)
{
case CORBA::tk_octet:
case CORBA::tk_boolean:
case CORBA::tk_char:
{
stream->adjust (0, ACE_CDR::OCTET_ALIGN, dummy);
continue_skipping =
stream->skip_bytes (ACE_CDR::OCTET_SIZE * bounds);
}
break;
case CORBA::tk_short:
case CORBA::tk_ushort:
case CORBA::tk_wchar:
{
stream->adjust (0, ACE_CDR::SHORT_ALIGN, dummy);
continue_skipping =
stream->skip_bytes (ACE_CDR::SHORT_SIZE * bounds);
}
break;
case CORBA::tk_long:
case CORBA::tk_ulong:
case CORBA::tk_float:
{
stream->adjust (0, ACE_CDR::LONG_ALIGN, dummy);
continue_skipping =
stream->skip_bytes (ACE_CDR::LONG_SIZE * bounds);
}
break;
case CORBA::tk_double:
case CORBA::tk_longlong:
case CORBA::tk_ulonglong:
{
stream->adjust (0, ACE_CDR::LONGLONG_ALIGN, dummy);
continue_skipping =
stream->skip_bytes (ACE_CDR::LONGLONG_SIZE * bounds);
}
break;
case CORBA::tk_longdouble:
{
stream->adjust (0, ACE_CDR::LONGDOUBLE_ALIGN, dummy);
continue_skipping =
stream->skip_bytes (ACE_CDR::LONGDOUBLE_SIZE * bounds);
}
break;
default:
while (bounds-- && continue_skipping)
{
int stop =
TAO_Marshal_Object::perform_skip (tc2.in (), stream);
if (stop == TAO::TRAVERSE_STOP)
continue_skipping = false;
}
break;
}// end of switch
if (continue_skipping)
return TAO::TRAVERSE_CONTINUE;
// error exit
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO_Marshal_Sequence::skip detected error\n")));
throw ::CORBA::MARSHAL ();
}
1.7.0