diff options
Diffstat (limited to 'TAO/tao/TypeCodeFactory/Recursive_TypeCode.cpp')
-rw-r--r-- | TAO/tao/TypeCodeFactory/Recursive_TypeCode.cpp | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/TAO/tao/TypeCodeFactory/Recursive_TypeCode.cpp b/TAO/tao/TypeCodeFactory/Recursive_TypeCode.cpp new file mode 100644 index 00000000000..c96562341a2 --- /dev/null +++ b/TAO/tao/TypeCodeFactory/Recursive_TypeCode.cpp @@ -0,0 +1,229 @@ +// $Id$ + +#include "tao/TypeCodeFactory/Recursive_TypeCode.h" + +#ifndef __ACE_INLINE__ +# include "tao/TypeCodeFactory/Recursive_TypeCode.inl" +#endif /* __ACE_INLINE__ */ + +#include "tao/SystemException.h" +#include "tao/ORB_Constants.h" + + +ACE_RCSID (TypeCodeFactory, + Recursive_TypeCode, + "$Id$") + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +bool +TAO::TypeCodeFactory::Recursive_TypeCode::tao_marshal ( + TAO_OutputCDR & cdr, + CORBA::ULong offset) const +{ + + if (CORBA::is_nil (this->the_typecode_.in ())) + { + // Marshaling an incomplete recursive TypeCode placeholder is + // not allowed. + + throw ::CORBA::BAD_TYPECODE (CORBA::OMGVMCID | 1, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->tao_marshal (cdr, offset); +} + +bool +TAO::TypeCodeFactory::Recursive_TypeCode::tao_marshal_kind ( + TAO_OutputCDR & cdr) const +{ + + if (CORBA::is_nil (this->the_typecode_.in ())) + { + // Marshaling an incomplete recursive TypeCode placeholder is + // not allowed. + + throw ::CORBA::BAD_TYPECODE (CORBA::OMGVMCID | 1, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->tao_marshal_kind (cdr); +} + +void +TAO::TypeCodeFactory::Recursive_TypeCode::tao_duplicate (void) +{ + this->add_ref (); +} + +void +TAO::TypeCodeFactory::Recursive_TypeCode::tao_release (void) +{ + this->remove_ref (); +} + +CORBA::Boolean +TAO::TypeCodeFactory::Recursive_TypeCode::equal_i (CORBA::TypeCode_ptr tc) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + // Nothing to compare yet. + + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->equal (tc); +} + +CORBA::Boolean +TAO::TypeCodeFactory::Recursive_TypeCode::equivalent_i ( + CORBA::TypeCode_ptr tc) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + // Nothing to compare yet. + + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->equivalent (tc); +} + +CORBA::TypeCode_ptr +TAO::TypeCodeFactory::Recursive_TypeCode::get_compact_typecode_i ( + void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + // Nothing to compare yet. + + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->get_compact_typecode (); +} + +char const * +TAO::TypeCodeFactory::Recursive_TypeCode::id_i (void) const +{ + // Ownership is retained by the TypeCode, as required by the C++ + // mapping. + return this->id_.in (); +} + +char const * +TAO::TypeCodeFactory::Recursive_TypeCode::name_i (void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->name (); +} + +CORBA::ULong +TAO::TypeCodeFactory::Recursive_TypeCode::member_count_i (void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->member_count (); +} + +char const * +TAO::TypeCodeFactory::Recursive_TypeCode::member_name_i ( + CORBA::ULong index) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->member_name (index); +} + +CORBA::TypeCode_ptr +TAO::TypeCodeFactory::Recursive_TypeCode::member_type_i ( + CORBA::ULong index) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->member_type (index); +} + +CORBA::Any * +TAO::TypeCodeFactory::Recursive_TypeCode::member_label_i ( + CORBA::ULong index) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->member_label (index); +} + +CORBA::TypeCode_ptr +TAO::TypeCodeFactory::Recursive_TypeCode::discriminator_type_i ( + void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->discriminator_type (); +} + +CORBA::Long +TAO::TypeCodeFactory::Recursive_TypeCode::default_index_i ( + void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->default_index (); +} + +CORBA::Visibility +TAO::TypeCodeFactory::Recursive_TypeCode::member_visibility_i ( + CORBA::ULong index) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->member_visibility (index); +} + +CORBA::ValueModifier +TAO::TypeCodeFactory::Recursive_TypeCode::type_modifier_i (void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->type_modifier (); +} + +CORBA::TypeCode_ptr +TAO::TypeCodeFactory::Recursive_TypeCode::concrete_base_type_i (void) const +{ + if (CORBA::is_nil (this->the_typecode_.in ())) + { + throw ::CORBA::BAD_TYPECODE (0, CORBA::COMPLETED_NO); + } + + return this->the_typecode_->concrete_base_type (); +} + +TAO_END_VERSIONED_NAMESPACE_DECL |