diff options
Diffstat (limited to 'TAO/tao/DynAny_i.cpp')
-rw-r--r-- | TAO/tao/DynAny_i.cpp | 887 |
1 files changed, 223 insertions, 664 deletions
diff --git a/TAO/tao/DynAny_i.cpp b/TAO/tao/DynAny_i.cpp index bc1cbf0aaf9..ba08af1e6a8 100644 --- a/TAO/tao/DynAny_i.cpp +++ b/TAO/tao/DynAny_i.cpp @@ -23,49 +23,38 @@ #include "tao/DynArray_i.h" #include "tao/DynUnion_i.h" #include "tao/InconsistentTypeCodeC.h" -#include "ace/Auto_Ptr.h" // Constructor from typecode TAO_DynAny_i::TAO_DynAny_i (CORBA_TypeCode_ptr tc) : value_ (CORBA::TypeCode::_duplicate (tc)) { - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Check to see if it's a simple type. - int tk = unalias (tc, ACE_TRY_ENV); - ACE_TRY_CHECK; - switch (tk) - { - 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_longlong: - case CORBA::tk_ulonglong: - case CORBA::tk_boolean: - case CORBA::tk_char: - case CORBA::tk_wchar: - case CORBA::tk_octet: - case CORBA::tk_any: - case CORBA::tk_TypeCode: - case CORBA::tk_objref: - case CORBA::tk_string: - break; - default: - ACE_THROW (CORBA_ORB_InconsistentTypeCode ()); - } - } - ACE_CATCHANY + CORBA::Environment env; + // Check to see if it's a simple type. + switch (unalias (tc, env)) { - // do nothing + 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_longlong: + case CORBA::tk_ulonglong: + case CORBA::tk_boolean: + case CORBA::tk_char: + case CORBA::tk_wchar: + case CORBA::tk_octet: + case CORBA::tk_any: + case CORBA::tk_TypeCode: + case CORBA::tk_objref: + case CORBA::tk_string: + break; + default: + env.exception (new CORBA_ORB_InconsistentTypeCode); + break; } - ACE_ENDTRY; - ACE_CHECK; } // Constructor from Any @@ -73,43 +62,32 @@ TAO_DynAny_i::TAO_DynAny_i (const CORBA_Any& any) : value_ (any) { // Check to see if it's a simple type. - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // @@ Is the typecode duplicate in Any.type()??? - int tk = unalias (any.type (), ACE_TRY_ENV); - ACE_TRY_CHECK; - switch (tk) - { - 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_longlong: - case CORBA::tk_ulonglong: - case CORBA::tk_boolean: - case CORBA::tk_char: - case CORBA::tk_wchar: - case CORBA::tk_octet: - case CORBA::tk_any: - case CORBA::tk_TypeCode: - case CORBA::tk_objref: - case CORBA::tk_string: - break; - default: - ACE_THROW (CORBA_DynAny::Invalid ()); - } - } - ACE_CATCHANY + CORBA::Environment env; + switch (unalias (any.type (), env)) { - // do nothing + 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_longlong: + case CORBA::tk_ulonglong: + case CORBA::tk_boolean: + case CORBA::tk_char: + case CORBA::tk_wchar: + case CORBA::tk_octet: + case CORBA::tk_any: + case CORBA::tk_TypeCode: + case CORBA::tk_objref: + case CORBA::tk_string: + break; + default: + env.exception (new CORBA_DynAny::Invalid); + break; } - ACE_ENDTRY; - ACE_CHECK; } // Destructor @@ -127,35 +105,20 @@ TAO_DynAny_i::type (CORBA::Environment &) void TAO_DynAny_i::assign (CORBA_DynAny_ptr dyn_any, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TypeCode_ptr tp = dyn_any->type (ACE_TRY_ENV); - ACE_CHECK; - - CORBA::Boolean equal = this->value_.type ()->equal (tp, - ACE_TRY_ENV); - ACE_CHECK; - - if (equal) - { - this->value_ = *dyn_any->to_any (ACE_TRY_ENV); - ACE_CHECK; - } + if (this->value_.type ()->equal (dyn_any->type (env), + env)) + this->value_ = *dyn_any->to_any (env); else - { - ACE_THROW (CORBA_DynAny::Invalid ()); - } + env.exception (new CORBA_DynAny::Invalid); } CORBA_DynAny_ptr -TAO_DynAny_i::copy (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::copy (CORBA::Environment &env) { TAO_DynAny_i* tmp = new TAO_DynAny_i (this->value_); - - CORBA_DynAny_ptr retval = tmp->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - - return retval; + return tmp->_this (env); } void @@ -166,48 +129,34 @@ TAO_DynAny_i::destroy (CORBA::Environment &) void TAO_DynAny_i::from_any (const CORBA_Any& any, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::Boolean equal = - this->value_.type ()->equal (any.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (!equal || any._tao_get_cdr () == 0) + if (!this->value_.type ()->equal (any.type (), + env) + || any._tao_get_cdr () == 0) { - ACE_THROW (CORBA_DynAny::Invalid ()); + env.exception (new CORBA_DynAny::Invalid); } this->value_ = any; } CORBA::Any_ptr -TAO_DynAny_i::to_any (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::to_any (CORBA::Environment &env) { if (this->value_._tao_get_cdr ()) - { - CORBA_Any_ptr retval; - - ACE_NEW_RETURN (retval, - CORBA::Any (this->value_), - 0); - - return retval; - } + return new CORBA::Any (this->value_); else { - ACE_THROW_RETURN (CORBA_DynAny::Invalid (), - 0); + env.exception (new CORBA_DynAny::Invalid); + return 0; } } CORBA_DynAny_ptr -TAO_DynAny_i::current_component (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::current_component (CORBA::Environment &env) { - CORBA_DynAny_ptr retval = this->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); - - return retval; + return this->_this (env); } CORBA::Boolean @@ -220,7 +169,10 @@ CORBA::Boolean TAO_DynAny_i::seek (CORBA::Long slot, CORBA::Environment &) { - return slot == 0 ? 1 : 0; + if (slot == 0) + return 1; + else + return 0; } // Nothing to rewind in this class. @@ -233,505 +185,331 @@ TAO_DynAny_i::rewind (CORBA::Environment &) void TAO_DynAny_i::insert_boolean (CORBA::Boolean value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_boolean) - { - CORBA::Any::from_boolean tmp (value); - this->value_ <<= tmp; - } + if (unalias (this->value_.type (), env) == CORBA::tk_boolean) + this->value_ <<= CORBA::Any::from_boolean (value); else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_octet (CORBA::Octet value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_octet) - { - CORBA::Any::from_octet tmp (value); - this->value_ <<= tmp; - } + if (this->value_.type ()->kind (env) == CORBA::tk_octet) + this->value_ <<= CORBA::Any::from_octet (value); else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_char (CORBA::Char value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_char) - { - CORBA::Any::from_char tmp (value); - this->value_ <<= tmp; - } + if (this->value_.type ()->kind (env) == CORBA::tk_char) + this->value_ <<= CORBA::Any::from_char (value); else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_short (CORBA::Short value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_short) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_short) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_ushort (CORBA::UShort value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_ushort) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_ushort) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_long (CORBA::Long value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_long) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_long) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_ulong (CORBA::ULong value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_ulong) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_ulong) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_float (CORBA::Float value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_float) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_float) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_double (CORBA::Double value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_double) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_double) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_string (const char * value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = this->value_.type ()->kind (ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_string) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_string) + this->value_ <<= CORBA::Any::from_string (CORBA::string_dup (value), + 0, + 1); else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_reference (CORBA::Object_ptr value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = this->value_.type ()->kind (ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_objref) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_objref) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_typecode (CORBA::TypeCode_ptr value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = this->value_.type ()->kind (ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_TypeCode) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_TypeCode) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_longlong (CORBA::LongLong value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_longlong) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_longlong) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_ulonglong (CORBA::ULongLong value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_ulonglong) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_ulonglong) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_wchar (CORBA::WChar value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_wchar) - { - CORBA::Any::from_wchar tmp (value); - this->value_ <<= tmp; - } + if (this->value_.type ()->kind (env) == CORBA::tk_wchar) + this->value_ <<= CORBA::Any::from_wchar (value); else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } void TAO_DynAny_i::insert_any (const CORBA::Any& value, - CORBA::Environment &ACE_TRY_ENV) + CORBA::Environment &env) { - CORBA::TCKind kind = this->value_.type ()->kind (ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_any) - { - this->value_ <<= value; - } + if (this->value_.type ()->kind (env) == CORBA::tk_any) + this->value_ <<= value; else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } + env.exception (new CORBA_DynAny::InvalidValue); } // Get functions CORBA::Boolean -TAO_DynAny_i::get_boolean (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_boolean (CORBA::Environment &env) { CORBA::Boolean val; - CORBA::Any::to_boolean tmp (val); - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + if (!(this->value_ >>= CORBA_Any::to_boolean (val))) + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::Octet -TAO_DynAny_i::get_octet (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_octet (CORBA::Environment &env) { CORBA::Octet val; - CORBA::Any::to_octet tmp (val); - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + if (!(this->value_ >>= CORBA_Any::to_octet (val))) + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::Char -TAO_DynAny_i::get_char (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_char (CORBA::Environment &env) { CORBA::Char val; - CORBA::Any::to_char tmp (val); - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + if (!(this->value_ >>= CORBA_Any::to_char (val))) + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::Short -TAO_DynAny_i::get_short (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_short (CORBA::Environment &env) { CORBA::Short val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::UShort -TAO_DynAny_i::get_ushort (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_ushort (CORBA::Environment &env) { CORBA::UShort val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::Long -TAO_DynAny_i::get_long (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_long (CORBA::Environment &env) { CORBA::Long val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::ULong -TAO_DynAny_i::get_ulong (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_ulong (CORBA::Environment &env) { CORBA::ULong val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::Float -TAO_DynAny_i::get_float (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_float (CORBA::Environment &env) { CORBA::Float val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::Double -TAO_DynAny_i::get_double (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_double (CORBA::Environment &env) { CORBA::Double val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } char * -TAO_DynAny_i::get_string (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_string (CORBA::Environment &env) { CORBA::Char *val; + CORBA::Any::to_string ts (val, 0); - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + if (!(this->value_ >>= ts)) + env.exception (new CORBA_DynAny::TypeMismatch); - return val; + return ts.val_; } CORBA::Object_ptr -TAO_DynAny_i::get_reference (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_reference (CORBA::Environment &env) { CORBA_Object_ptr val; - CORBA::Any::to_object tmp (val); + CORBA_Any_var a = this->to_any (env); - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + if (!(this->value_ >>= CORBA_Any::to_object (val))) + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::TypeCode_ptr -TAO_DynAny_i::get_typecode (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_typecode (CORBA::Environment &env) { CORBA_TypeCode_ptr val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::LongLong -TAO_DynAny_i::get_longlong (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_longlong (CORBA::Environment &env) { CORBA::LongLong val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::ULongLong -TAO_DynAny_i::get_ulonglong (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_ulonglong (CORBA::Environment &env) { CORBA::ULongLong val; if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + env.exception (new CORBA_DynAny::TypeMismatch); return val; } CORBA::WChar -TAO_DynAny_i::get_wchar (CORBA::Environment &ACE_TRY_ENV) +TAO_DynAny_i::get_wchar (CORBA::Environment &env) { CORBA::WChar val; - CORBA::Any::to_wchar tmp (val); - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } + if (!(this->value_ >>= CORBA_Any::to_wchar (val))) + env.exception (new CORBA_DynAny::TypeMismatch); return val; } @@ -762,11 +540,7 @@ CORBA_DynAny_ptr TAO_DynAny_i::create_dyn_any (const CORBA_Any &any, CORBA::Environment &ACE_TRY_ENV) { - CORBA::TCKind kind = TAO_DynAny_i::unalias (any.type (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); - - switch (kind) + switch (TAO_DynAny_i::unalias (any.type (), ACE_TRY_ENV)) { case CORBA::tk_null: case CORBA::tk_void: @@ -787,136 +561,58 @@ TAO_DynAny_i::create_dyn_any (const CORBA_Any &any, case CORBA::tk_objref: case CORBA::tk_string: { - CORBA_DynAny_var retval; - TAO_DynAny_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynAny_i (any), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynAny_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); + return dp->_this (ACE_TRY_ENV); } case CORBA::tk_struct: case CORBA::tk_except: { - CORBA_DynAny_var retval; - TAO_DynStruct_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynStruct_i (any), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynStruct_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynStruct::_nil ()); + return dp->_this (ACE_TRY_ENV); } case CORBA::tk_sequence: { - CORBA_DynAny_var retval; - TAO_DynSequence_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynSequence_i (any), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynSequence_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynSequence::_nil ()); + return dp->_this (ACE_TRY_ENV); } case CORBA::tk_union: { - CORBA_DynAny_var retval; - TAO_DynUnion_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynUnion_i (any), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynUnion_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynUnion::_nil ()); + return dp->_this (ACE_TRY_ENV); } case CORBA::tk_enum: { - CORBA_DynAny_var retval; - TAO_DynEnum_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynEnum_i (any), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynEnum_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynEnum::_nil ()); + return dp->_this (ACE_TRY_ENV); } case CORBA::tk_array: { - CORBA_DynAny_var retval; - TAO_DynArray_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynArray_i (any), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynArray_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynArray::_nil ()); + return dp->_this (ACE_TRY_ENV); } default: break; @@ -929,163 +625,79 @@ CORBA_DynAny_ptr TAO_DynAny_i::create_basic_dyn_any (CORBA_TypeCode_ptr tc, CORBA::Environment& ACE_TRY_ENV) { - CORBA_DynAny_var retval; - TAO_DynAny_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynAny_i (tc), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynAny_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); + return dp->_this (ACE_TRY_ENV); } CORBA_DynStruct_ptr TAO_DynAny_i::create_dyn_struct (CORBA_TypeCode_ptr tc, CORBA::Environment& ACE_TRY_ENV) { - CORBA_DynStruct_var retval; - TAO_DynStruct_i *dp; - ACE_NEW_THROW_EX (dp, TAO_DynStruct_i (tc), CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynStruct_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + ACE_CHECK_RETURN (CORBA_DynStruct::_nil ()); + return dp->_this (ACE_TRY_ENV); } CORBA_DynSequence_ptr TAO_DynAny_i::create_dyn_sequence (CORBA_TypeCode_ptr tc, CORBA::Environment& ACE_TRY_ENV) { - CORBA_DynSequence_var retval; - TAO_DynSequence_i *dp; - ACE_NEW_THROW_EX (dp, - TAO_DynSequence_i (tc), - CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynSequence_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + TAO_DynSequence_i (tc), + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (CORBA_DynSequence::_nil ()); + return dp->_this (ACE_TRY_ENV); } CORBA_DynArray_ptr TAO_DynAny_i::create_dyn_array (CORBA_TypeCode_ptr tc, CORBA::Environment& ACE_TRY_ENV) { - CORBA_DynArray_var retval; - TAO_DynArray_i *dp; - ACE_NEW_THROW_EX (dp, - TAO_DynArray_i (tc), - CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynArray_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + TAO_DynArray_i (tc), + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (CORBA_DynArray::_nil ()); + return dp->_this (ACE_TRY_ENV); } CORBA_DynUnion_ptr TAO_DynAny_i::create_dyn_union (CORBA_TypeCode_ptr tc, CORBA::Environment& ACE_TRY_ENV) { - CORBA_DynUnion_var retval; - TAO_DynUnion_i *dp; - ACE_NEW_THROW_EX (dp, - TAO_DynUnion_i (tc), - CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynUnion_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + TAO_DynUnion_i (tc), + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (CORBA_DynUnion::_nil ()); + return dp->_this (ACE_TRY_ENV); } CORBA_DynEnum_ptr TAO_DynAny_i::create_dyn_enum (CORBA_TypeCode_ptr tc, CORBA::Environment& ACE_TRY_ENV) { - CORBA_DynEnum_var retval; - TAO_DynEnum_i *dp; - ACE_NEW_THROW_EX (dp, - TAO_DynEnum_i (tc), - CORBA::NO_MEMORY ()); - - ACE_CHECK_RETURN (retval._retn ()); - - ACE_Auto_Basic_Ptr<TAO_DynEnum_i> temp (dp); - - retval = dp->_this (ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - temp.release (); - - return retval._retn (); + TAO_DynEnum_i (tc), + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (CORBA_DynEnum::_nil ()); + return dp->_this (ACE_TRY_ENV); } CORBA_DynAny_ptr TAO_DynAny_i::create_dyn_any (CORBA_TypeCode_ptr tc, - CORBA::Environment& ACE_TRY_ENV) + CORBA::Environment& env) { - CORBA_DynAny_var retval; - - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, - ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); - - switch (kind) + switch (TAO_DynAny_i::unalias (tc, env)) { case CORBA::tk_null: case CORBA::tk_void: @@ -1105,92 +717,39 @@ TAO_DynAny_i::create_dyn_any (CORBA_TypeCode_ptr tc, case CORBA::tk_TypeCode: case CORBA::tk_objref: case CORBA::tk_string: - retval = create_basic_dyn_any (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); + return create_basic_dyn_any (tc, env); case CORBA::tk_struct: case CORBA::tk_except: - retval = create_dyn_struct (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); + return create_dyn_struct (tc, env); case CORBA::tk_sequence: - retval = create_dyn_sequence (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); + return create_dyn_sequence (tc, env); case CORBA::tk_union: - retval = create_dyn_union (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); + return create_dyn_union (tc, env); case CORBA::tk_enum: - retval = create_dyn_enum (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); + return create_dyn_enum (tc, env); case CORBA::tk_array: - retval = create_dyn_array (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); + return create_dyn_array (tc, env); default: break; } - ACE_THROW_RETURN (CORBA_ORB_InconsistentTypeCode (), - CORBA_DynAny::_nil ()); + env.exception (new CORBA_ORB_InconsistentTypeCode); + return CORBA_DynAny::_nil (); } // Utility function called by all the DynAny classes // to extract the TCKind of possibly aliased types. CORBA::TCKind TAO_DynAny_i::unalias (CORBA_TypeCode_ptr tc, - CORBA::Environment& ACE_TRY_ENV) + CORBA::Environment& env) { - CORBA::TCKind tck = tc->kind (ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA::tk_null); + CORBA::TCKind tck = tc->kind (env); while (tck == CORBA::tk_alias) - { - CORBA_TypeCode_ptr temp = tc->content_type (ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA::tk_null); - - tck = TAO_DynAny_i::unalias (temp, - ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA::tk_null); - } + tck = TAO_DynAny_i::unalias (tc->content_type (env), + env); return tck; } -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class ACE_Auto_Basic_Ptr<TAO_DynAny_i>; -template class ACE_Auto_Basic_Ptr<TAO_DynArray_i>; -template class ACE_Auto_Basic_Ptr<TAO_DynEnum_i>; -template class ACE_Auto_Basic_Ptr<TAO_DynSequence_i>; -template class ACE_Auto_Basic_Ptr<TAO_DynStruct_i>; -template class ACE_Auto_Basic_Ptr<TAO_DynUnion_i>; -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_DynAny_i> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_DynArray_i> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_DynEnum_i> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_DynSequence_i> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_DynStruct_i> -#pragma instantiate ACE_Auto_Basic_Ptr<TAO_DynUnion_i> -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ - #endif /* TAO_HAS_MINIMUM_CORBA */ |