summaryrefslogtreecommitdiff
path: root/ACE/TAO/tao/AnyTypeCode/Marshal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/tao/AnyTypeCode/Marshal.cpp')
-rw-r--r--ACE/TAO/tao/AnyTypeCode/Marshal.cpp250
1 files changed, 250 insertions, 0 deletions
diff --git a/ACE/TAO/tao/AnyTypeCode/Marshal.cpp b/ACE/TAO/tao/AnyTypeCode/Marshal.cpp
new file mode 100644
index 00000000000..ca5c7b2dfc1
--- /dev/null
+++ b/ACE/TAO/tao/AnyTypeCode/Marshal.cpp
@@ -0,0 +1,250 @@
+
+//=============================================================================
+/**
+ * @file Marshal.cpp
+ *
+ * $Id$
+ *
+ * Implements the Marshal_Object class and the factory
+ * The original encoder and decoder code now appears in files encode.cpp and
+ * decode.cpp
+ *
+ * @author Aniruddha S. Gokhale
+ * @author Copyright 1994-1995 by Sun Microsystems Inc.
+ */
+//=============================================================================
+
+#include "tao/AnyTypeCode/Marshal.h"
+#include "tao/AnyTypeCode/TypeCode.h"
+
+#if !defined (__ACE_INLINE__)
+# include "tao/AnyTypeCode/Marshal.inl"
+#endif /* ! __ACE_INLINE__ */
+
+ACE_RCSID (AnyTypeCode,
+ Marshal,
+ "$Id$")
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_Marshal_Object::~TAO_Marshal_Object (void)
+{
+}
+
+TAO::traverse_status
+TAO_Marshal_Object::perform_skip (CORBA::TypeCode_ptr tc, TAO_InputCDR *stream)
+{
+ CORBA::ULong const kind = tc->kind ();
+
+ switch (kind)
+ {
+ default:
+ case CORBA::tk_fixed:
+ case CORBA::tk_native:
+ case CORBA::tk_abstract_interface:
+ case CORBA::tk_component:
+ case CORBA::tk_home:
+ // @@ We don't know how to handle any of them yet.
+ return TAO::TRAVERSE_STOP;
+
+ case CORBA::tk_null:
+ case CORBA::tk_void:
+ case CORBA::tk_short:
+ case CORBA::tk_long:
+ case CORBA::tk_ushort:
+ case CORBA::tk_ulong:
+ case CORBA::tk_float:
+ case CORBA::tk_double:
+ case CORBA::tk_boolean:
+ case CORBA::tk_char:
+ case CORBA::tk_octet:
+ case CORBA::tk_longlong:
+ case CORBA::tk_ulonglong:
+ case CORBA::tk_longdouble:
+ case CORBA::tk_wchar:
+ case CORBA::tk_enum:
+ {
+ TAO_Marshal_Primitive marshal;
+ return marshal.skip (tc, stream);
+ }
+
+ case CORBA::tk_any:
+ {
+ TAO_Marshal_Any marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_TypeCode:
+ {
+ TAO_Marshal_TypeCode marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_Principal:
+ {
+ TAO_Marshal_Principal marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_objref:
+ {
+ TAO_Marshal_ObjRef marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_struct:
+ {
+ TAO_Marshal_Struct marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_union:
+ {
+ TAO_Marshal_Union marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_string:
+ {
+ TAO_Marshal_String marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_sequence:
+ {
+ TAO_Marshal_Sequence marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_array:
+ {
+ TAO_Marshal_Array marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_alias:
+ {
+ TAO_Marshal_Alias marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_except:
+ {
+ TAO_Marshal_Except marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_wstring:
+ {
+ TAO_Marshal_WString marshal;
+ return marshal.skip (tc, stream);
+ }
+ case CORBA::tk_value_box:
+ case CORBA::tk_value:
+ case CORBA::tk_event:
+ {
+ TAO_Marshal_Value marshal;
+ return marshal.skip (tc, stream);
+ }
+ }
+}
+
+TAO::traverse_status
+TAO_Marshal_Object::perform_append (CORBA::TypeCode_ptr tc,
+ TAO_InputCDR *src,
+ TAO_OutputCDR *dest)
+{
+ CORBA::ULong kind = tc->kind ();
+
+ switch (kind)
+ {
+ default:
+ case CORBA::tk_fixed:
+ case CORBA::tk_native:
+ case CORBA::tk_abstract_interface:
+ case CORBA::tk_component:
+ case CORBA::tk_home:
+ // @@ We don't know how to handle any of them yet.
+ return TAO::TRAVERSE_STOP;
+
+ case CORBA::tk_null:
+ case CORBA::tk_void:
+ case CORBA::tk_short:
+ case CORBA::tk_long:
+ case CORBA::tk_ushort:
+ case CORBA::tk_ulong:
+ case CORBA::tk_float:
+ case CORBA::tk_double:
+ case CORBA::tk_boolean:
+ case CORBA::tk_char:
+ case CORBA::tk_octet:
+ case CORBA::tk_longlong:
+ case CORBA::tk_ulonglong:
+ case CORBA::tk_longdouble:
+ case CORBA::tk_wchar:
+ case CORBA::tk_enum:
+ {
+ TAO_Marshal_Primitive marshal;
+ return marshal.append (tc, src, dest);
+ }
+
+ case CORBA::tk_any:
+ {
+ TAO_Marshal_Any marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_TypeCode:
+ {
+ TAO_Marshal_TypeCode marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_Principal:
+ {
+ TAO_Marshal_Principal marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_objref:
+ {
+ TAO_Marshal_ObjRef marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_struct:
+ {
+ TAO_Marshal_Struct marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_union:
+ {
+ TAO_Marshal_Union marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_string:
+ {
+ TAO_Marshal_String marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_sequence:
+ {
+ TAO_Marshal_Sequence marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_array:
+ {
+ TAO_Marshal_Array marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_alias:
+ {
+ TAO_Marshal_Alias marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_except:
+ {
+ TAO_Marshal_Except marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_wstring:
+ {
+ TAO_Marshal_WString marshal;
+ return marshal.append (tc, src, dest);
+ }
+ case CORBA::tk_value_box:
+ case CORBA::tk_value:
+ case CORBA::tk_event:
+ {
+ TAO_Marshal_Value marshal;
+ return marshal.append (tc, src, dest);
+ }
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL