diff options
Diffstat (limited to 'TAO/tao/DynAny_i.cpp')
-rw-r--r-- | TAO/tao/DynAny_i.cpp | 1213 |
1 files changed, 0 insertions, 1213 deletions
diff --git a/TAO/tao/DynAny_i.cpp b/TAO/tao/DynAny_i.cpp deleted file mode 100644 index ae06478c57d..00000000000 --- a/TAO/tao/DynAny_i.cpp +++ /dev/null @@ -1,1213 +0,0 @@ -/* -*- C++ -*- */ -// $Id$ -// ================================================================= -// -// = LIBRARY -// TAO -// -// = FILENAME -// DynAny_i.cpp -// -// = AUTHOR -// Jeff Parsons <parsons@cs.wustl.edu> -// -// ================================================================= - -#include "tao/DynAny_i.h" - -#if !defined (TAO_HAS_MINIMUM_CORBA) - -#include "tao/DynStruct_i.h" -#include "tao/DynSequence_i.h" -#include "tao/DynEnum_i.h" -#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 - { - // do nothing - } - ACE_ENDTRY; - ACE_CHECK; -} - -// Constructor from Any -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 - { - // do nothing - } - ACE_ENDTRY; - ACE_CHECK; -} - -// Destructor -TAO_DynAny_i::~TAO_DynAny_i (void) -{ -} - -// Common functions - -CORBA::TypeCode_ptr -TAO_DynAny_i::type (CORBA::Environment &) -{ - return CORBA_TypeCode::_duplicate (this->value_.type ()); -} - -void -TAO_DynAny_i::assign (CORBA_DynAny_ptr dyn_any, - CORBA::Environment &ACE_TRY_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; - } - else - { - ACE_THROW (CORBA_DynAny::Invalid ()); - } -} - -CORBA_DynAny_ptr -TAO_DynAny_i::copy (CORBA::Environment &ACE_TRY_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; -} - -void -TAO_DynAny_i::destroy (CORBA::Environment &) -{ - delete this; -} - -void -TAO_DynAny_i::from_any (const CORBA_Any& any, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Boolean equal = - this->value_.type ()->equal (any.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (!equal || any._tao_get_cdr () == 0) - { - ACE_THROW (CORBA_DynAny::Invalid ()); - } - - this->value_ = any; -} - -CORBA::Any_ptr -TAO_DynAny_i::to_any (CORBA::Environment &ACE_TRY_ENV) -{ - if (this->value_._tao_get_cdr ()) - { - CORBA_Any_ptr retval; - - ACE_NEW_RETURN (retval, - CORBA::Any (this->value_), - 0); - - return retval; - } - else - { - ACE_THROW_RETURN (CORBA_DynAny::Invalid (), - 0); - } -} - -CORBA_DynAny_ptr -TAO_DynAny_i::current_component (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA_DynAny_ptr retval = this->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); - - return retval; -} - -CORBA::Boolean -TAO_DynAny_i::next (CORBA::Environment &) -{ - return 0; -} - -CORBA::Boolean -TAO_DynAny_i::seek (CORBA::Long slot, - CORBA::Environment &) -{ - return (CORBA::Boolean) (slot == 0 ? 1 : 0); -} - -// Nothing to rewind in this class. -void -TAO_DynAny_i::rewind (CORBA::Environment &) -{ -} - -// Insert functions - -void -TAO_DynAny_i::insert_boolean (CORBA::Boolean value, - CORBA::Environment &ACE_TRY_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; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_octet (CORBA::Octet value, - CORBA::Environment &ACE_TRY_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; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_char (CORBA::Char value, - CORBA::Environment &ACE_TRY_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; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_short (CORBA::Short value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_short) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_ushort (CORBA::UShort value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_ushort) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_long (CORBA::Long value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_long) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_ulong (CORBA::ULong value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_ulong) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_float (CORBA::Float value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_float) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_double (CORBA::Double value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_double) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_string (const char * value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_string) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_reference (CORBA::Object_ptr value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_objref) - { - CORBA::Object_ptr *_tao_object_ptr; - - ACE_NEW (_tao_object_ptr, - CORBA::Object_ptr); - - *_tao_object_ptr = CORBA::Object::_duplicate (value); - - this->value_.replace (this->value_.type (), - (void*)_tao_object_ptr, - 1, - ACE_TRY_ENV); - ACE_CHECK; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_typecode (CORBA::TypeCode_ptr value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_TypeCode) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_longlong (CORBA::LongLong value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_longlong) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_ulonglong (CORBA::ULongLong value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_ulonglong) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_wchar (CORBA::WChar value, - CORBA::Environment &ACE_TRY_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; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -void -TAO_DynAny_i::insert_any (const CORBA::Any& value, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::TCKind kind = TAO_DynAny_i::unalias (this->value_.type (), - ACE_TRY_ENV); - ACE_CHECK; - - if (kind == CORBA::tk_any) - { - this->value_ <<= value; - } - else - { - ACE_THROW (CORBA_DynAny::InvalidValue ()); - } -} - -// Get functions - -CORBA::Boolean -TAO_DynAny_i::get_boolean (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Boolean val; - CORBA::Any::to_boolean tmp (val); - - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Octet -TAO_DynAny_i::get_octet (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Octet val; - CORBA::Any::to_octet tmp (val); - - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Char -TAO_DynAny_i::get_char (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Char val; - CORBA::Any::to_char tmp (val); - - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Short -TAO_DynAny_i::get_short (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Short val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::UShort -TAO_DynAny_i::get_ushort (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::UShort val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Long -TAO_DynAny_i::get_long (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Long val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::ULong -TAO_DynAny_i::get_ulong (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::ULong val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Float -TAO_DynAny_i::get_float (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Float val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Double -TAO_DynAny_i::get_double (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Double val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -char * -TAO_DynAny_i::get_string (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::Char *val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Object_ptr -TAO_DynAny_i::get_reference (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA_Object_ptr val; - CORBA::Any::to_object tmp (val); - - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::TypeCode_ptr -TAO_DynAny_i::get_typecode (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA_TypeCode_ptr val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::LongLong -TAO_DynAny_i::get_longlong (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::LongLong val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::ULongLong -TAO_DynAny_i::get_ulonglong (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::ULongLong val; - - if (!(this->value_ >>= val)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::WChar -TAO_DynAny_i::get_wchar (CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::WChar val; - CORBA::Any::to_wchar tmp (val); - - if (!(this->value_ >>= tmp)) - { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); - } - - return val; -} - -CORBA::Any_ptr -TAO_DynAny_i::get_any (CORBA::Environment& ACE_TRY_ENV) -{ - CORBA_Any_ptr tmp = 0; - - ACE_NEW_THROW_EX (tmp, - CORBA_Any, - CORBA::NO_MEMORY ()); - ACE_CHECK_RETURN (0); - - CORBA_Any_var val = tmp; - - if (!(this->value_ >>= *tmp)) - { - val = 0; - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - 0); - } - - return val._retn (); -} - -// The factory functions - -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) - { - 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: - { - 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 (); - } - 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 (); - } - 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 (); - } - 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 (); - } - 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 (); - } - 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 (); - } - default: - break; - } - - return CORBA_DynAny::_nil (); -} - -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 (); -} - -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 (); -} - -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 (); -} - -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 (); -} - -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 (); -} - -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 (); -} - -CORBA_DynAny_ptr -TAO_DynAny_i::create_dyn_any (CORBA_TypeCode_ptr tc, - CORBA::Environment& ACE_TRY_ENV) -{ - CORBA_DynAny_var retval; - - CORBA::TCKind kind = TAO_DynAny_i::unalias (tc, - ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA_DynAny::_nil ()); - - switch (kind) - { - 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: - retval = create_basic_dyn_any (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); - case CORBA::tk_struct: - case CORBA::tk_except: - retval = create_dyn_struct (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); - case CORBA::tk_sequence: - retval = create_dyn_sequence (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); - case CORBA::tk_union: - retval = create_dyn_union (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); - case CORBA::tk_enum: - retval = create_dyn_enum (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); - case CORBA::tk_array: - retval = create_dyn_array (tc, - ACE_TRY_ENV); - - ACE_CHECK_RETURN (retval._retn ()); - - return retval._retn (); - default: - break; - } - - ACE_THROW_RETURN (CORBA_ORB_InconsistentTypeCode (), - 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::TCKind tck = tc->kind (ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA::tk_null); - - while (tck == CORBA::tk_alias) - { - CORBA_TypeCode_var temp = tc->content_type (ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA::tk_null); - - tck = TAO_DynAny_i::unalias (temp.in (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (CORBA::tk_null); - } - - 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 */ |