📄 admin_client.cpp
字号:
e_members[0] = CORBA::string_dup ("ZERO");
e_members[1] = CORBA::string_dup ("ONE");
members[2].name = CORBA::string_dup ("my_struct_enum");
CORBA::EnumDef_var e_var =
this->repo_->create_enum ("IDL:my_enum:1.0",
"my_enum",
"1.0",
e_members
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
members[2].type_def = CORBA::EnumDef::_duplicate (e_var.in ());
members[2].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::StructDef_var svar =
this->repo_->create_struct ("IDL:my_struct:1.0",
"my_struct",
"1.0",
members
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// This also tests the members() function.
CORBA::TypeCode_var tc = svar->type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::ULong length = tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::type::length: %d\n"),
length));
ACE_ASSERT (length == 3);
CORBA::String_var str;
CORBA::ULong i = 0;
for (i = 0; i < length; i++)
{
str = tc->member_name (i ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::type::member_name[%d]: %s\n"),
i,
str.in ()));
ACE_ASSERT (!ACE_OS::strcmp (str.in (), members[i].name));
}
CORBA::Contained::Description_var desc =
svar->describe (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::TypeDescription *td;
desc->value >>= td;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nStructDef::describe::value::name: %s\n"),
td->name.in ()));
ACE_ASSERT (!ACE_OS::strcmp (td->name, "my_struct"));
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::describe::value::id: %s\n"),
td->id.in ()));
ACE_ASSERT (!ACE_OS::strcmp (td->id, "IDL:my_struct:1.0"));
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::describe::value::version: %s\n"),
td->version.in ()));
ACE_ASSERT (!ACE_OS::strcmp (td->version, "1.0"));
members.length (2);
members[0].name = CORBA::string_dup ("long_mem");
members[0].type_def = this->repo_->get_primitive (CORBA::pk_long
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
members[1].name = CORBA::string_dup ("array_mem");
members[1].type_def =
this->repo_->create_array (5,
members[0].type_def.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
svar->members (members
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nStructDef::members (set)\n\n")));
CORBA::EnumMemberSeq def_members (2);
def_members.length (2);
def_members[0] = CORBA::string_dup ("FIRST");
def_members[1] = CORBA::string_dup ("SECOND");
CORBA::EnumDef_var e_def_var = svar->create_enum ("IDL:my_def_enum:1.0",
"my_enum",
"1.0",
def_members
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::StructMemberSeq_var out_members = svar->members (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
length = out_members->length ();
for (i = 0; i < length; i++)
{
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::members[%d]::name: %s\n"),
i,
out_members[i].name.in ()));
if (i == length - 1)
ACE_ASSERT (!ACE_OS::strcmp (out_members[i].name, "my_enum"));
else
ACE_ASSERT (!ACE_OS::strcmp (out_members[i].name, members[i].name));
}
CORBA::Contained_var fox = this->repo_->lookup ("::my_struct::my_enum"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
str = fox->absolute_name (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Repository::lookup::absolute_name: %s\n"),
str.in ()));
ACE_ASSERT (!ACE_OS::strcmp (str.in (), "::my_struct::my_enum"));
fox = svar->lookup ("my_enum"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
str = fox->absolute_name (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::lookup::absolute_name: %s\n"),
str.in ()));
ACE_ASSERT (!ACE_OS::strcmp (str.in (), "::my_struct::my_enum"));
CORBA::Container_var outer = fox->defined_in (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::Contained_var schizo = CORBA::Contained::_narrow (outer.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
str = schizo->absolute_name (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::lookup::defined_in::")
ACE_TEXT ("absolute_name: %s\n"),
str.in ()));
ACE_ASSERT (!ACE_OS::strcmp (str.in (), "::my_struct"));
CORBA::ContainedSeq_var contents = this->repo_->contents (CORBA::dk_all,
0
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
length = contents->length ();
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nRepository::contents::length: %d\n"),
length));
ACE_ASSERT (length == 2);
contents = svar->contents (CORBA::dk_all,
0
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
length = contents->length ();
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::contents::length: %d\n"),
length));
ACE_ASSERT (length == 1);
for (i = 0; i < length; ++i)
{
str = contents[i]->absolute_name (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((
LM_DEBUG,
ACE_TEXT ("StructDef::contents[%d]::absolute_name: %s\n"),
i,
str.in ()
));
if (i == 0)
{
ACE_ASSERT (!ACE_OS::strcmp (str.in (), "::my_struct::my_enum"));
}
else
{
// No more found in lookup.
}
}
contents = this->repo_->lookup_name ("my_enum",
-1,
CORBA::dk_all,
0
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
length = contents->length ();
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nRepository::lookup_name::length: %d\n"),
length));
ACE_ASSERT (length == 2);
for (i = 0; i < length; i++)
{
str = contents[i]->absolute_name (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((
LM_DEBUG,
ACE_TEXT ("Repository::lookup_name[%d]::absolute_name: %s\n"),
i,
str.in ()
));
// Can't use ACE_ASSERT here because we don't know the order
// of the results of the search.
}
CORBA::Container::DescriptionSeq_var cont_desc =
this->repo_->describe_contents (CORBA::dk_all,
0,
-1
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
length = cont_desc->length ();
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nRepository::describe_contents::length: %d\n"),
length));
ACE_ASSERT (length == 2);
for (i = 0; i < length; i++)
{
CORBA::TypeDescription *td;
cont_desc[i].value >>= td;
str = td->type->id (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((
LM_DEBUG,
ACE_TEXT ("Repository::describe_contents[%d]::id: %s\n"),
i,
str.in ()
));
if (i == 0)
{
if (ACE_OS::strcmp (str.in (), "IDL:my_enum:1.0"))
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("struct_test::describe_contents -")
ACE_TEXT ("incorrect repo id in item %d"),
i));
return;
}
}
else if (i == 1)
{
if (ACE_OS::strcmp (str.in (), "IDL:my_struct:1.0"))
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("struct_test::describe_contents -")
ACE_TEXT ("incorrect repo id in item %d"),
i));
return;
}
}
}
svar->name ("your_struct"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nStructDef::name (set)\n")));
contents = svar->contents (CORBA::dk_all,
0
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
length = contents->length ();
if (this->debug_)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("StructDef::contents::length: %d\n"),
length));
ACE_ASSERT (length == 1);
const char *tmp = "::your_struct";
for (i = 0; i < length; i++)
{
str = contents[i]->absolute_name (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (this->debug_)
ACE_DEBUG ((
LM_DEBUG,
ACE_TEXT ("StructDef::contents[%d]::absolute_name: %s\n"),
i,
str.in ()
));
// Whatever the scoped name now is, it must begin
// with "::your_struct".
ACE_ASSERT (!ACE_OS::strncmp (str.in (),
tmp,
ACE_OS::strlen (tmp)));
}
#if defined (ACE_NDEBUG)
// ACE_ASSERT macro expands to nothing, so...
ACE_UNUSED_ARG (tmp);
#endif /* ACE_NDEBUG */
e_var->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
svar->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
void
Admin_Client::union_test (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_DEBUG ((
LM_DEBUG,
ACE_TEXT ("\n============== UNION TEST ==============\n\n")
));
CORBA::EnumMemberSeq d_members (4);
d_members.length (4);
d_members[0] = CORBA::string_dup ("ZERO");
d_members[1] = CORBA::string_dup ("ONE");
d_members[2] = CORBA::string_dup ("TWO");
d_members[3] = CORBA::string_dup ("THREE");
CORBA::EnumDef_var d_var =
this->repo_->create_enum ("IDL:disc_enum:1.0",
"disc_enum",
"1.0",
d_members
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::StructMemberSeq s_members (1);
s_members.length (1);
s_members[0].name = CORBA::string_dup ("string_in_struct");
s_members[0].type_def = this->repo_->create_string (6
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
s_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::StructDef_var s_var =
this->repo_->create_struct ("IDL:struct_in_union:1.0",
"struct_in_union",
"1.0",
s_members
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::UnionMemberSeq u_members (4);
u_members.length (4);
u_members[0].name = CORBA::string_dup ("longval");
u_members[0].type_def = this->repo_->get_primitive (CORBA::pk_long
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
u_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::TypeCode_var d_type = d_var->type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
TAO_OutputCDR maker2;
maker2.write_ulong (3); // THREE
TAO::Unknown_IDL_Type *impl2 = 0;
ACE_NEW (impl2,
TAO::Unknown_IDL_Type (d_type.in (),
maker2.begin (),
TAO_ENCAP_BYTE_ORDER));
CORBA::Any any2;
any2.replace (impl2);
u_members[0].label = any2;
u_members[1].name = CORBA::string_dup ("longval");
u_members[1].type_def = this->repo_->get_primitive (CORBA::pk_long
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
u_members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
TAO_OutputCDR maker0;
maker0.write_ulong (2); // TWO
TAO::Unknown_IDL_Type *impl0 = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -