📄 interfacedef_i.cpp
字号:
ACE_THROW_RETURN (CORBA::BAD_PARAM (31,
CORBA::COMPLETED_NO),
CORBA::OperationDef::_nil ());
}
ACE_Configuration_Section_Key excepts_key;
this->repo_->config ()->open_section (new_key,
"excepts",
1,
excepts_key);
char *type_path = 0;
for (i = 0; i < length; ++i)
{
type_path =
TAO_IFR_Service_Utils::reference_to_path (exceptions[i].in ());
char *stringified = TAO_IFR_Service_Utils::int_to_string (i);
this->repo_->config ()->set_string_value (excepts_key,
stringified,
type_path);
}
}
// Store the operation's context info.
length = contexts.length ();
if (length > 0)
{
ACE_Configuration_Section_Key contexts_key;
this->repo_->config ()->open_section (new_key,
"contexts",
1,
contexts_key);
for (i = 0; i < length; ++i)
{
char *stringified = TAO_IFR_Service_Utils::int_to_string (i);
this->repo_->config ()->set_string_value (contexts_key,
stringified,
contexts[i].in ());
}
}
// Create the object reference.
CORBA::Object_var obj =
TAO_IFR_Service_Utils::create_objref (CORBA::dk_Operation,
path.c_str (),
this->repo_
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::OperationDef::_nil ());
CORBA::OperationDef_var retval =
CORBA::OperationDef::_narrow (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::OperationDef::_nil ());
return retval._retn ();
}
void
TAO_InterfaceDef_i::interface_contents (
ACE_Unbounded_Queue<CORBA::DefinitionKind> &kind_queue,
ACE_Unbounded_Queue<ACE_TString> &path_queue,
CORBA::DefinitionKind limit_type,
CORBA::Boolean exclude_inherited
ACE_ENV_ARG_DECL
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
ACE_TString id;
this->repo_->config ()->get_string_value (this->section_key_,
"id",
id);
ACE_TString path;
this->repo_->config ()->get_string_value (this->repo_->repo_ids_key (),
id.c_str (),
path);
ACE_TString section_name;
int index = 0;
int status = 0;
// Attributes
if (limit_type == CORBA::dk_Attribute
|| limit_type == CORBA::dk_all)
{
ACE_Configuration_Section_Key attrs_key;
status =
this->repo_->config ()->open_section (this->section_key_,
"attrs",
0,
attrs_key);
// Only if we have any.
if (status == 0)
{
while (this->repo_->config ()->enumerate_sections (attrs_key,
index++,
section_name)
== 0)
{
kind_queue.enqueue_tail (CORBA::dk_Attribute);
path_queue.enqueue_tail (
path + "\\attrs\\" + section_name.c_str ()
);
}
}
}
// Operations
if (limit_type == CORBA::dk_Operation
|| limit_type == CORBA::dk_all)
{
index = 0;
ACE_Configuration_Section_Key ops_key;
status =
this->repo_->config ()->open_section (this->section_key_,
"ops",
0,
ops_key);
// Only if we have any.
if (status == 0)
{
while (this->repo_->config ()->enumerate_sections (ops_key,
index++,
section_name)
== 0)
{
kind_queue.enqueue_tail (CORBA::dk_Operation);
path_queue.enqueue_tail (
path + "\\ops\\" + section_name.c_str ()
);
}
}
}
if (exclude_inherited == 0)
{
// Must recurse through the base interfaces.
ACE_Configuration_Section_Key inherited_key;
status =
this->repo_->config ()->open_section (this->section_key_,
"inherited",
0,
inherited_key);
if (status == 0)
{
ACE_TString base_path;
ACE_Configuration_Section_Key base_key;
ACE_Configuration::VALUETYPE type;
index = 0;
while (this->repo_->config ()->enumerate_values (inherited_key,
index++,
section_name,
type)
== 0)
{
this->repo_->config ()->get_string_value (inherited_key,
section_name.c_str (),
base_path);
this->repo_->config ()->expand_path (this->repo_->root_key (),
base_path,
base_key,
0);
TAO_InterfaceDef_i base_iface (this->repo_);
base_iface.section_key (base_key);
base_iface.interface_contents (kind_queue,
path_queue,
limit_type,
exclude_inherited
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
}
}
int
TAO_InterfaceDef_i::name_clash (const char *name)
{
ACE_TRY_NEW_ENV
{
TAO_Container_i::tmp_name_holder_ = name;
TAO_IFR_Service_Utils::name_exists (&TAO_Container_i::same_as_tmp_name,
TAO_IFR_Service_Utils::tmp_key_,
TAO_IFR_Service_Utils::repo_,
CORBA::dk_Interface
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
return 1;
}
ACE_ENDTRY;
return 0;
}
void
TAO_InterfaceDef_i::base_interfaces_recursive (
ACE_Unbounded_Queue<CORBA::DefinitionKind> &kind_queue,
ACE_Unbounded_Queue<ACE_TString> &path_queue
)
{
ACE_Configuration_Section_Key inherited_key;
int status =
this->repo_->config ()->open_section (this->section_key_,
"inherited",
0,
inherited_key);
// No base interfaces.
if (status != 0)
{
return;
}
int index = 0;
u_int kind = 0;
ACE_Configuration::VALUETYPE type;
ACE_TString section_name, inherited_path;
CORBA::DefinitionKind def_kind = CORBA::dk_none;
ACE_Configuration_Section_Key base_key;
while (this->repo_->config ()->enumerate_values (inherited_key,
index++,
section_name,
type)
== 0)
{
this->repo_->config ()->get_string_value (inherited_key,
section_name.c_str (),
inherited_path);
status =
this->repo_->config ()->expand_path (this->repo_->root_key (),
inherited_path,
base_key,
0);
if (status == 0)
{
TAO_InterfaceDef_i tmp (this->repo_);
tmp.section_key (base_key);
tmp.base_interfaces_recursive (kind_queue,
path_queue);
path_queue.enqueue_tail (inherited_path);
this->repo_->config ()->get_integer_value (base_key,
"def_kind",
kind);
def_kind = ACE_static_cast (CORBA::DefinitionKind, kind);
kind_queue.enqueue_tail (def_kind);
}
}
}
void
TAO_InterfaceDef_i::inherited_attributes (
ACE_Unbounded_Queue<ACE_Configuration_Section_Key> &key_queue
)
{
ACE_Unbounded_Queue<CORBA::DefinitionKind> kind_queue;
ACE_Unbounded_Queue<ACE_TString> path_queue;
this->base_interfaces_recursive (kind_queue,
path_queue);
size_t size = path_queue.size ();
ACE_Configuration_Section_Key base_key, attrs_key, attr_key;
int status = 0;
ACE_TString path_name;
u_int count = 0;
for (size_t i = 0; i < size; ++i)
{
path_queue.dequeue_head (path_name);
status =
this->repo_->config ()->expand_path (this->repo_->root_key (),
path_name,
base_key,
0);
if (status == 0)
{
this->repo_->config ()->open_section (base_key,
"attrs",
0,
attrs_key);
this->repo_->config ()->get_integer_value (attrs_key,
"count",
count);
for (u_int j = 0; j < count; ++j)
{
char *stringified = TAO_IFR_Service_Utils::int_to_string (j);
this->repo_->config ()->open_section (attrs_key,
stringified,
0,
attr_key);
key_queue.enqueue_tail (attr_key);
}
}
}
}
void
TAO_InterfaceDef_i::inherited_operations (
ACE_Unbounded_Queue<ACE_Configuration_Section_Key> &key_queue
)
{
ACE_Unbounded_Queue<CORBA::DefinitionKind> kind_queue;
ACE_Unbounded_Queue<ACE_TString> path_queue;
this->base_interfaces_recursive (kind_queue,
path_queue);
size_t size = path_queue.size ();
ACE_Configuration_Section_Key base_key, ops_key, op_key;
int status = 0;
ACE_TString path_name;
u_int count = 0;
for (size_t i = 0; i < size; ++i)
{
path_queue.dequeue_head (path_name);
status =
this->repo_->config ()->expand_path (this->repo_->root_key (),
path_name,
base_key,
0);
if (status == 0)
{
this->repo_->config ()->open_section (base_key,
"ops",
0,
ops_key);
this->repo_->config ()->get_integer_value (ops_key,
"count",
count);
for (u_int j = 0; j < count; ++j)
{
char *stringified = TAO_IFR_Service_Utils::int_to_string (j);
this->repo_->config ()->open_section (ops_key,
stringified,
0,
op_key);
key_queue.enqueue_tail (op_key);
}
}
}
}
void
TAO_InterfaceDef_i::check_inherited (const char *name,
CORBA::DefinitionKind kind
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
ACE_Unbounded_Queue<ACE_Configuration_Section_Key> key_queue;
switch (kind)
{
case CORBA::dk_Attribute:
this->inherited_attributes (key_queue);
break;
case CORBA::dk_Operation:
this->inherited_operations (key_queue);
break;
default:
break;
}
size_t size = key_queue.size ();
ACE_Configuration_Section_Key inherited_key;
ACE_TString inherited_name;
for (u_int i = 0; i < size; ++i)
{
key_queue.dequeue_head (inherited_key);
this->repo_->config ()->get_string_value (inherited_key,
"name",
inherited_name);
if (inherited_name == name)
{
ACE_THROW (CORBA::BAD_PARAM (5,
CORBA::COMPLETED_NO));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -