📄 operationdef_i.cpp
字号:
}
void
TAO_OperationDef_i::mode_i (CORBA::OperationMode mode
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
this->repo_->config ()->set_integer_value (this->section_key_,
"mode",
mode);
}
CORBA::ContextIdSeq *
TAO_OperationDef_i::contexts (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
TAO_IFR_READ_GUARD_RETURN (0);
this->update_key (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return this->contexts_i (ACE_ENV_SINGLE_ARG_PARAMETER);
}
CORBA::ContextIdSeq *
TAO_OperationDef_i::contexts_i (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
ACE_Configuration_Section_Key contexts_key;
int status =
this->repo_->config ()->open_section (this->section_key_,
"contexts",
0,
contexts_key);
ACE_Unbounded_Queue<ACE_TString> context_queue;
// This section may not have been created.
if (status == 0)
{
int index = 0;
ACE_TString context;
// Don't have to worry about gaps here - contexts are not
// IR objects so they can't be destroyed one at a time. To
// make a change one has to call the mutator version of this
// function and make a completely new list.
char *stringified = TAO_IFR_Service_Utils::int_to_string (index);
while (this->repo_->config ()->get_string_value (contexts_key,
stringified,
context)
== 0)
{
context_queue.enqueue_tail (context);
++index;
stringified =
TAO_IFR_Service_Utils::int_to_string (index);
}
}
CORBA::ULong size = ACE_static_cast (CORBA::ULong, context_queue.size ());
CORBA::ContextIdSeq *ci_seq = 0;
ACE_NEW_THROW_EX (ci_seq,
CORBA::ContextIdSeq (size),
CORBA::NO_MEMORY ());
ACE_CHECK_RETURN (0);
ci_seq->length (size);
for (CORBA::ULong i = 0; i < size; ++i)
{
ACE_TString context_string;
context_queue.dequeue_head (context_string);
(*ci_seq)[i] = context_string.c_str ();
}
return ci_seq;
}
void
TAO_OperationDef_i::contexts (const CORBA::ContextIdSeq &contexts
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
TAO_IFR_WRITE_GUARD;
this->update_key (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
this->contexts_i (contexts
ACE_ENV_ARG_PARAMETER);
}
void
TAO_OperationDef_i::contexts_i (const CORBA::ContextIdSeq &contexts
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
this->repo_->config ()->remove_section (this->section_key_,
"contexts",
0);
CORBA::ULong length = contexts.length ();
if (length == 0)
return;
ACE_Configuration_Section_Key contexts_key;
this->repo_->config ()->open_section (this->section_key_,
"contexts",
1,
contexts_key);
for (CORBA::ULong 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 ());
}
}
CORBA::ExceptionDefSeq *
TAO_OperationDef_i::exceptions (ACE_ENV_SINGLE_ARG_DECL )
ACE_THROW_SPEC ((CORBA::SystemException))
{
TAO_IFR_READ_GUARD_RETURN (0);
this->update_key (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return this->exceptions_i (ACE_ENV_SINGLE_ARG_PARAMETER);
}
CORBA::ExceptionDefSeq *
TAO_OperationDef_i::exceptions_i (ACE_ENV_SINGLE_ARG_DECL )
ACE_THROW_SPEC ((CORBA::SystemException))
{
ACE_Configuration_Section_Key excepts_key;
int status =
this->repo_->config ()->open_section (this->section_key_,
"excepts",
0,
excepts_key);
int index = 0;
ACE_Unbounded_Queue<ACE_TString> path_queue;
// This section may not have been created.
if (status == 0)
{
ACE_TString field_name, type_path;
ACE_Configuration::VALUETYPE type;
while (this->repo_->config ()->enumerate_values (excepts_key,
index++,
field_name,
type)
== 0)
{
this->repo_->config ()->get_string_value (excepts_key,
field_name.c_str (),
type_path);
path_queue.enqueue_tail (type_path);
}
}
CORBA::ULong size = ACE_static_cast (CORBA::ULong, path_queue.size ());
CORBA::ExceptionDefSeq *ed_seq = 0;
ACE_NEW_THROW_EX (ed_seq,
CORBA::ExceptionDefSeq (size),
CORBA::NO_MEMORY ());
ACE_CHECK_RETURN (0);
ed_seq->length (size);
if (index == 0)
{
return ed_seq;
}
CORBA::ExceptionDefSeq_var retval = ed_seq;
for (CORBA::ULong i = 0; i < size; ++i)
{
ACE_TString path;
path_queue.dequeue_head (path);
CORBA::Object_var obj =
TAO_IFR_Service_Utils::create_objref (CORBA::dk_Exception,
path.c_str (),
this->repo_
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
retval[i] = CORBA::ExceptionDef::_narrow (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
}
return retval._retn ();
}
void
TAO_OperationDef_i::exceptions (const CORBA::ExceptionDefSeq &exceptions
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
TAO_IFR_WRITE_GUARD;
this->update_key (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
this->exceptions_i (exceptions
ACE_ENV_ARG_PARAMETER);
}
void
TAO_OperationDef_i::exceptions_i (const CORBA::ExceptionDefSeq &exceptions
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
this->repo_->config ()->remove_section (this->section_key_,
"excepts",
0);
TAO_IFR_Service_Utils::set_exceptions (this->repo_->config (),
this->section_key_,
"excepts",
exceptions);
}
void
TAO_OperationDef_i::make_description (
CORBA::OperationDescription &od
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
od.name = this->name_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
od.id = this->id_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
ACE_TString container_id;
this->repo_->config ()->get_string_value (this->section_key_,
"container_id",
container_id);
od.defined_in = container_id.c_str ();
od.version = this->version_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
od.result = this->result_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
od.mode = this->mode_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::ContextIdSeq_var cid_seq =
this->contexts_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
od.contexts = cid_seq.in ();
CORBA::ParDescriptionSeq_var pd_seq =
this->params_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
od.parameters = pd_seq.in ();
ACE_Configuration_Section_Key excepts_key;
int status =
this->repo_->config ()->open_section (this->section_key_,
"excepts",
0,
excepts_key);
// This section may not have been created.
if (status == 0)
{
int index = 0;
int status = 0;
ACE_TString field_name, type_path;
ACE_Configuration::VALUETYPE type;
ACE_Unbounded_Queue<ACE_TString> path_queue;
while (this->repo_->config ()->enumerate_values (excepts_key,
index++,
field_name,
type)
== 0)
{
status =
this->repo_->config ()->get_string_value (excepts_key,
field_name.c_str (),
type_path);
if (status == 0)
{
path_queue.enqueue_tail (type_path);
}
}
CORBA::ULong size = ACE_static_cast (CORBA::ULong, path_queue.size ());
od.exceptions.length (size);
for (CORBA::ULong i = 0; i < size; ++i)
{
ACE_TString type_path;
path_queue.dequeue_head (type_path);
ACE_Configuration_Section_Key type_key;
this->repo_->config ()->expand_path (this->repo_->root_key (),
type_path,
type_key,
0);
ACE_TString name;
this->repo_->config ()->get_string_value (type_key,
"name",
name);
od.exceptions[i].name = name.c_str ();
ACE_TString id;
this->repo_->config ()->get_string_value (type_key,
"id",
id);
od.exceptions[i].id = id.c_str ();
ACE_TString container_id;
this->repo_->config ()->get_string_value (type_key,
"container_id",
container_id);
od.exceptions[i].defined_in = container_id.c_str ();
ACE_TString version;
this->repo_->config ()->get_string_value (type_key,
"version",
version);
od.exceptions[i].version = version.c_str ();
TAO_ExceptionDef_i impl (this->repo_);
impl.section_key (type_key);
od.exceptions[i].type = impl.type_i (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
}
else
{
od.exceptions.length (0);
}
}
CORBA::TypeCode_ptr
TAO_OperationDef_i::type_i (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return this->result_i (ACE_ENV_SINGLE_ARG_PARAMETER);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -