diff options
author | gokhale <asgokhale@users.noreply.github.com> | 1997-07-01 16:48:28 +0000 |
---|---|---|
committer | gokhale <asgokhale@users.noreply.github.com> | 1997-07-01 16:48:28 +0000 |
commit | 3051c8de862cd0f18f4d97cc95bd58930144a18c (patch) | |
tree | bf85561e871b89618be76b271865c660218f19e7 /TAO/IIOP | |
parent | 89fdc6e130f57bc74ae92d6d4bc2411d8c4dd929 (diff) | |
download | ATCD-3051c8de862cd0f18f4d97cc95bd58930144a18c.tar.gz |
Added log entry - changes in marshal factory. Uses a private table for
object lookup.
Diffstat (limited to 'TAO/IIOP')
-rw-r--r-- | TAO/IIOP/lib/marshal.cpp | 35 | ||||
-rw-r--r-- | TAO/IIOP/lib/marshal.h | 9 | ||||
-rw-r--r-- | TAO/IIOP/lib/marshal.i | 17 |
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() { |