be_sequence.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 723 行 · 第 1/2 页
CPP
723 行
this->mt_ = be_sequence::MNG_NONE;
}
}
return this->mt_;
}
// Add this be_sequence to the locally defined types in this scope
AST_Sequence *
be_sequence::fe_add_sequence (AST_Sequence *t)
{
if (t == 0)
{
return 0;
}
this->add_to_local_types (t);
return t;
}
// Overridden method
be_decl *
be_sequence::decl (void)
{
return this;
}
int
be_sequence::accept (be_visitor *visitor)
{
return visitor->visit_sequence (this);
}
const char *
be_sequence::instance_name ()
{
static char namebuf[NAMEBUFSIZE];
ACE_OS::memset (namebuf,
'\0',
NAMEBUFSIZE);
be_type *bt = 0;
bt = be_type::narrow_from_decl (this->base_type ());
if (bt == 0)
{
ACE_ERROR ((LM_ERROR,
"(%N:%l) be_visitor_sequence_ch::"
"gen_instantiate_name - "
"Bad element type\n"));
return namebuf;
}
// Generate the class name.
// The base type after removing all the aliases.
be_type *prim_type = bt;
if (bt->node_type () == AST_Decl::NT_typedef)
{
// Get the primitive base type of this typedef node.
be_typedef *t = be_typedef::narrow_from_decl (bt);
prim_type = t->primitive_base_type ();
}
// Generate the appropriate sequence type.
switch (this->managed_type ())
{
case be_sequence::MNG_PSEUDO:
case be_sequence::MNG_OBJREF:
if (this->unbounded ())
{
ACE_OS::sprintf (namebuf,
"_TAO_Unbounded_Object_Sequence_%s",
prim_type->local_name ()->get_string ());
}
else
{
ACE_OS::sprintf (namebuf,
"_TAO_Bounded_Object_Sequence_%s_%lu",
prim_type->local_name ()->get_string (),
this->max_size ()->ev ()->u.ulval);
}
break;
case be_sequence::MNG_VALUE:
if (this->unbounded ())
{
ACE_OS::sprintf (namebuf,
"_TAO_Unbounded_Valuetype_Sequence_%s",
prim_type->local_name ()->get_string ());
}
else
{
ACE_OS::sprintf (namebuf,
"_TAO_Bounded_Valuetype_Sequence_%s_%lu",
prim_type->local_name ()->get_string (),
this->max_size ()->ev ()->u.ulval);
}
break;
case be_sequence::MNG_STRING:
if (this->unbounded ())
{
ACE_OS::sprintf (namebuf,
"TAO_Unbounded_String_Sequence");
}
else
{
ACE_OS::sprintf (namebuf,
"_TAO_Bounded_String_Sequence_%s",
prim_type->local_name ()->get_string ());
}
break;
case be_sequence::MNG_WSTRING:
if (this->unbounded ())
{
ACE_OS::sprintf (namebuf,
"TAO_Unbounded_WString_Sequence");
}
else
{
ACE_OS::sprintf (namebuf,
"_TAO_Bounded_WString_Sequence_%s",
prim_type->local_name ()->get_string ());
}
break;
default: // Not a managed type.
if (this->unbounded ())
{
// TAO provides extensions for octet sequences, first find out
// if the base type is an octet (or an alias for octet)
be_predefined_type *predef =
be_predefined_type::narrow_from_decl (prim_type);
if (predef != 0
&& predef->pt() == AST_PredefinedType::PT_octet)
{
ACE_OS::sprintf (namebuf,
"TAO_Unbounded_Sequence<CORBA::Octet>");
}
else
{
ACE_OS::sprintf (namebuf,
"_TAO_Unbounded_Sequence_%s",
prim_type->local_name ()->get_string ());
}
}
else
{
ACE_OS::sprintf (namebuf,
"_TAO_Bounded_Sequence_%s_%lu",
prim_type->local_name ()->get_string (),
this->max_size ()->ev ()->u.ulval);
}
break;
}
return namebuf;
}
int
be_sequence::gen_base_class_name (TAO_OutStream *os,
const char * linebreak,
AST_Decl *ctx_scope)
{
be_type *elem = be_type::narrow_from_decl (this->base_type ());
// Generate the appropriate base class type.
switch (this->managed_type ())
{
case be_sequence::MNG_OBJREF:
if (this->unbounded ())
{
*os << "TAO_Unbounded_Object_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak
<< be_nl;
*os << elem->nested_type_name (ctx_scope, "_var") << linebreak
<< be_uidt_nl
<< ">" << be_uidt;
}
else
{
*os << "TAO_Bounded_Object_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak << be_nl;
*os << elem->nested_type_name (ctx_scope, "_var") << ","
<< linebreak << be_nl;
*os << this->max_size ()->ev ()->u.ulval << linebreak << be_uidt_nl
<< ">" << be_uidt;
}
break;
case be_sequence::MNG_PSEUDO:
if (this->unbounded ())
{
*os << "TAO_Unbounded_Pseudo_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << linebreak << be_uidt_nl
<< ">" << be_uidt;
}
else
{
*os << "TAO_Bounded_Pseudo_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << linebreak << be_nl
<< this->max_size ()->ev ()->u.ulval << linebreak
<< be_uidt_nl
<< ">" << be_uidt;
}
break;
case be_sequence::MNG_VALUE:
if (this->unbounded ())
{
*os << "TAO_Unbounded_Valuetype_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak
<< be_nl;
*os << elem->nested_type_name (ctx_scope, "_var") << linebreak
<< be_uidt_nl
<< ">" << be_uidt;
}
else
{
*os << "TAO_Bounded_Valuetype_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak
<< be_nl;
*os << elem->nested_type_name (ctx_scope, "_var") << ","
<< linebreak << be_nl
<< this->max_size ()->ev ()->u.ulval << linebreak << be_uidt_nl
<< ">" << be_uidt;
}
break;
case be_sequence::MNG_STRING:
if (this->unbounded ())
{
*os << "TAO_Unbounded_String_Sequence";
}
else
{
*os << "TAO_Bounded_String_Sequence<"
<< this->max_size ()->ev ()->u.ulval << ">";
}
break;
case be_sequence::MNG_WSTRING:
if (this->unbounded ())
{
*os << "TAO_Unbounded_WString_Sequence";
}
else
{
*os << "TAO_Bounded_WString_Sequence<"
<< this->max_size ()->ev ()->u.ulval << ">";
}
break;
default: // Not a managed type.
switch (elem->base_node_type ())
{
case AST_Decl::NT_array:
if (this->unbounded ())
{
*os << "TAO_Unbounded_Array_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak
<< be_nl;
*os << elem->nested_type_name (ctx_scope) << "_slice"
<< linebreak << be_uidt_nl
<< ">" << be_uidt;
}
else
{
*os << "TAO_Bounded_Array_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak
<< be_nl;
*os << elem->nested_type_name (ctx_scope) << "_slice,"
<< linebreak << be_nl
<< this->max_size ()->ev ()->u.ulval << linebreak
<< be_uidt_nl
<< ">" << be_uidt;
}
break;
default:
if (this->unbounded ())
{
*os << "TAO_Unbounded_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << linebreak
<< be_uidt_nl
<< ">" << be_uidt;
}
else
{
*os << "TAO_Bounded_Sequence<" << linebreak
<< be_idt << be_idt_nl
<< elem->nested_type_name (ctx_scope) << "," << linebreak
<< be_nl
<< this->max_size ()->ev ()->u.ulval << linebreak
<< be_uidt_nl
<< ">" << be_uidt;
}
break;
}
break;
}
return 0;
}
be_field *
be_sequence::field_node (void) const
{
return this->field_node_;
}
void
be_sequence::field_node (be_field *node)
{
this->field_node_ = node;
}
const char *
be_sequence::smart_fwd_helper_name (AST_Decl *ctx_scope,
be_type *elem)
{
if (ScopeAsDecl (elem->defined_in ()) == ctx_scope)
{
ACE_CString retval = "tao_";
retval += elem->local_name ()->get_string ();
return retval.rep ();
}
return elem->fwd_helper_name ();
}
void
be_sequence::destroy (void)
{
// Call the destroy methods of our base classes.
be_scope::destroy ();
be_type::destroy ();
}
// Narrowing
IMPL_NARROW_METHODS3 (be_sequence, AST_Sequence, be_scope, be_type)
IMPL_NARROW_FROM_DECL (be_sequence)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?