void TAO_ComponentDef_i::supported_interfaces_i ( const CORBA::InterfaceDefSeq &supported_interfaces ) { // Remove the old supported interfaces. this->repo_->config ()->remove_section (this->section_key_, "supported", 0); CORBA::ULong length = supported_interfaces.length (); ACE_Configuration_Section_Key inherited_key; this->repo_->config ()->open_section (this->section_key_, "supported", 1, inherited_key); CORBA::String_var name; char *supported_path = 0; ACE_Configuration_Section_Key supported_key; for (CORBA::ULong i = 0; i < length; ++i) { supported_path = TAO_IFR_Service_Utils::reference_to_path ( supported_interfaces[i] ); // Get the servant's key into the temporary key holder, because // the name clash checker for base interfaces is static, and has // no other way to know about a specific key. this->repo_->config ()->expand_path (this->repo_->root_key (), supported_path, TAO_IFR_Service_Utils::tmp_key_, 0); TAO_IFR_Service_Utils::name_exists (&TAO_InterfaceDef_i::name_clash, this->section_key_, this->repo_, this->def_kind ()); char *stringified = TAO_IFR_Service_Utils::int_to_string (i); this->repo_->config ()->set_string_value (supported_key, stringified, supported_path); } }
CORBA::InterfaceDefSeq * TAO_InterfaceDef_i::base_interfaces_i (void) { ACE_Unbounded_Queue<CORBA::DefinitionKind> kind_queue; ACE_Unbounded_Queue<ACE_TString> path_queue; this->base_interfaces_recursive (kind_queue, path_queue); CORBA::ULong size = static_cast<CORBA::ULong> (kind_queue.size ()); CORBA::InterfaceDefSeq *seq = 0; ACE_NEW_THROW_EX (seq, CORBA::InterfaceDefSeq (size), CORBA::NO_MEMORY ()); seq->length (size); CORBA::InterfaceDefSeq_var retval = seq; for (CORBA::ULong i = 0; i < size; ++i) { CORBA::DefinitionKind def_kind; kind_queue.dequeue_head (def_kind); ACE_TString path; path_queue.dequeue_head (path); CORBA::Object_var obj = TAO_IFR_Service_Utils::path_to_ir_object (path, this->repo_); retval[i] = CORBA::InterfaceDef::_narrow (obj.in ()); } return retval._retn (); }
void TAO_InterfaceDef_i::base_interfaces_i (const CORBA::InterfaceDefSeq &base_interfaces) { // If we are an abstract interface, all our base interfaces must be // abstract as well. CORBA::DefinitionKind def_kind = this->def_kind (); if (def_kind == CORBA::dk_AbstractInterface) { CORBA::ULong length = base_interfaces.length (); for (CORBA::ULong i = 0; i < length; ++i) { def_kind = base_interfaces[i]->def_kind (); if (def_kind != CORBA::dk_AbstractInterface) { throw CORBA::BAD_PARAM ( CORBA::OMGVMCID | 11, CORBA::COMPLETED_NO); } } } // Remove the old base interfaces. this->repo_->config ()->remove_section (this->section_key_, "inherited", 0); CORBA::ULong length = base_interfaces.length (); ACE_Configuration_Section_Key inherited_key; this->repo_->config ()->open_section (this->section_key_, "inherited", 1, inherited_key); CORBA::String_var name; char *inherited_path = 0; PortableServer::ObjectId_var oid; ACE_Configuration_Section_Key base_key; for (CORBA::ULong i = 0; i < length; ++i) { inherited_path = TAO_IFR_Service_Utils::reference_to_path (base_interfaces[i]); this->repo_->config ()->expand_path (this->repo_->root_key (), inherited_path, base_key, 0); TAO_InterfaceDef_i impl (this->repo_); impl.section_key (base_key); name = impl.name_i (); // None of these names can clash with any we may already have. TAO_Container_i::tmp_name_holder_ = name.in (); TAO_IFR_Service_Utils::name_exists (&TAO_Container_i::same_as_tmp_name, this->section_key_, this->repo_, this->def_kind ()); char *stringified = TAO_IFR_Service_Utils::int_to_string (i); this->repo_->config ()->set_string_value (inherited_key, stringified, inherited_path); } }