summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/IIOP/lib/marshal.cpp35
-rw-r--r--TAO/IIOP/lib/marshal.h9
-rw-r--r--TAO/IIOP/lib/marshal.i17
3 files changed, 60 insertions, 1 deletions
diff --git a/TAO/IIOP/lib/marshal.cpp b/TAO/IIOP/lib/marshal.cpp
index e03f9c59e29..d39276bad39 100644
--- a/TAO/IIOP/lib/marshal.cpp
+++ b/TAO/IIOP/lib/marshal.cpp
@@ -39,6 +39,7 @@ extern "C"
// cosntructor for the factory
TAO_MarshalFactory::TAO_MarshalFactory()
+#if 0
: m_primitive_(TAO_MARSHAL_PRIMITIVE::instance()),
m_any_(TAO_MARSHAL_ANY::instance()),
m_typecode_(TAO_MARSHAL_TYPECODE::instance()),
@@ -52,13 +53,44 @@ TAO_MarshalFactory::TAO_MarshalFactory()
m_alias_(TAO_MARSHAL_ALIAS::instance()),
m_except_(TAO_MARSHAL_EXCEPT::instance()),
m_wstring_(TAO_MARSHAL_WSTRING::instance())
+#endif
{
+ // initialize the mobj table
+ mobj_table_[tk_null].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_void].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_short].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_long].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_ushort].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_ulong].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_float].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_double].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_boolean].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_char].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_octet].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_any].obj_ = TAO_MARSHAL_ANY::instance();
+ mobj_table_[tk_TypeCode].obj_ = TAO_MARSHAL_TYPECODE::instance();
+ mobj_table_[tk_Principal].obj_ = TAO_MARSHAL_PRINCIPAL::instance();
+ mobj_table_[tk_objref].obj_ = TAO_MARSHAL_OBJREF::instance();
+ mobj_table_[tk_struct].obj_ = TAO_MARSHAL_STRUCT::instance();
+ mobj_table_[tk_union].obj_ = TAO_MARSHAL_UNION::instance();
+ mobj_table_[tk_enum].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_string].obj_ = TAO_MARSHAL_STRING::instance();
+ mobj_table_[tk_sequence].obj_ = TAO_MARSHAL_SEQUENCE::instance();
+ mobj_table_[tk_array].obj_ = TAO_MARSHAL_ARRAY::instance();
+ mobj_table_[tk_alias].obj_ = TAO_MARSHAL_ALIAS::instance();
+ mobj_table_[tk_except].obj_ = TAO_MARSHAL_EXCEPT::instance();
+ mobj_table_[tk_longlong].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_ulonglong].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_longdouble].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_wchar].obj_ = TAO_MARSHAL_PRIMITIVE::instance();
+ mobj_table_[tk_wstring].obj_ = TAO_MARSHAL_WSTRING::instance();
}
TAO_MarshalFactory::~TAO_MarshalFactory()
{
}
+#if 0
// factory method
//
// Based on the kind of the typecode, return the appropriate marshal object
@@ -119,10 +151,11 @@ TAO_MarshalObject* TAO_MarshalFactory::make_marshal_object(CORBA_TypeCode_ptr tc
}
else
{
+ env.exception (new CORBA_BAD_TYPECODE(COMPLETED_NO));
return (TAO_MarshalObject *)0;
}
}
-
+#endif
// define a default factory
TAO_MarshalFactory *TAO_DEFAULT_MARSHAL_FACTORY = TAO_MARSHAL_FACTORY::instance();
diff --git a/TAO/IIOP/lib/marshal.h b/TAO/IIOP/lib/marshal.h
index 4ddb74d3625..acbf9792dfe 100644
--- a/TAO/IIOP/lib/marshal.h
+++ b/TAO/IIOP/lib/marshal.h
@@ -71,6 +71,14 @@ public:
CORBA_Environment &env);
// factory method that returns the appropriate marshal object
private:
+ struct TAO_MarshalObject_Entry
+ {
+ TAO_MarshalObject *obj_;
+ };
+ // A table of specialized marshal objects indexed by the _kind field
+ TAO_MarshalObject_Entry mobj_table_[TC_KIND_COUNT];
+
+#if 0
// define data members that are instances of various MarshalObject classes
TAO_Marshal_Primitive *m_primitive_;
TAO_Marshal_Any *m_any_;
@@ -85,6 +93,7 @@ private:
TAO_Marshal_Alias *m_alias_;
TAO_Marshal_Except *m_except_;
TAO_Marshal_WString *m_wstring_;
+#endif
};
// Create a type for the singleton factory
diff --git a/TAO/IIOP/lib/marshal.i b/TAO/IIOP/lib/marshal.i
index 346dbfaf479..b88b3edd6fb 100644
--- a/TAO/IIOP/lib/marshal.i
+++ b/TAO/IIOP/lib/marshal.i
@@ -55,6 +55,23 @@ ACE_INLINE TAO_Marshal_WString::TAO_Marshal_WString()
{
}
+// factory method
+//
+// Based on the kind of the typecode, return the appropriate marshal object
+ACE_INLINE TAO_MarshalObject* TAO_MarshalFactory::make_marshal_object(CORBA_TypeCode_ptr tc,
+ CORBA_Environment &env)
+{
+ if ((tc) && (tc->_kind >= 0) && (tc->_kind < TC_KIND_COUNT))
+ {
+ return this->mobj_table_[tc->_kind].obj_;
+ }
+ else
+ {
+ env.exception(new CORBA_BAD_TYPECODE(COMPLETED_NO));
+ return 0;
+ }
+}
+
//destructor for the MarshalObject class
ACE_INLINE TAO_MarshalObject::~TAO_MarshalObject()
{