CORBA::Boolean TAO::TypeCode::Union<char const *, CORBA::TypeCode_ptr const *, TAO::TypeCode::Case<char const *, CORBA::TypeCode_ptr const *> const * const *, TAO::Null_RefCount_Policy>::equal_i ( CORBA::TypeCode_ptr tc ) const { // These calls shouldn't throw since CORBA::TypeCode::equal() // verified that the TCKind is the same as our's prior to invoking // this method, meaning that the CORBA::tk_union TypeCode methods // are supported. CORBA::ULong const tc_count = tc->member_count (); CORBA::Long tc_def = tc->default_index (); if (tc_count != this->ncases_ || tc_def != this->default_index_) return false; // Check the discriminator type. CORBA::TypeCode_var tc_discriminator = tc->discriminator_type (); CORBA::Boolean const equal_discriminators = Traits<char const *>::get_typecode (this->discriminant_type_)->equal ( tc_discriminator.in ()); if (!equal_discriminators) return false; for (CORBA::ULong i = 0; i < this->ncases_; ++i) { if (this->default_index_ > -1 && static_cast<CORBA::ULong> (this->default_index_) == i) { // Don't bother checking equality of default case label. It // will always be the zero octet (the CDR encoded value is // ignored). continue; } case_type const & lhs_case = *this->cases_[i]; bool const equal_case = lhs_case.equal (i, tc); if (!equal_case) return false; } return true; }
CORBA::Boolean TAO::TypeCode::Union<char const *, CORBA::TypeCode_ptr const *, TAO::TypeCode::Case<char const *, CORBA::TypeCode_ptr const *> const * const *, TAO::Null_RefCount_Policy>::equivalent_i ( CORBA::TypeCode_ptr tc) const { // Perform a structural comparison, excluding the name() and // member_name() operations. CORBA::ULong const tc_count = tc->member_count (); CORBA::Long tc_def = tc->default_index (); if (tc_count != this->ncases_ || tc_def != this->default_index_) return false; CORBA::TypeCode_var tc_discriminator = tc->discriminator_type (); CORBA::Boolean const equiv_discriminators = Traits<char const *>::get_typecode (this->discriminant_type_)->equivalent ( tc_discriminator.in ()); if (!equiv_discriminators) return false; for (CORBA::ULong i = 0; i < this->ncases_; ++i) { if (this->default_index_ > -1 && static_cast<CORBA::ULong> (this->default_index_) == i) { // Don't bother checking equality/equivalence of default // case label. It will always be the zero octet (the CDR // encoded value is ignored). continue; } case_type const & lhs_case = *this->cases_[i]; bool const equivalent_case = lhs_case.equivalent (i, tc); if (!equivalent_case) return false; } return true; }