arg_tmplinst.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 723 行 · 第 1/2 页
CPP
723 行
{
if (this->this_mode_and_dir_generated (node))
{
return 0;
}
TAO_OutStream *os = this->ctx_->stream ();
idl_bool fixed = (node->size_type () == AST_Type::FIXED);
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::";
this->gen_direction (os);
*os << "_" << (fixed ? "Fixed" : "Var") << "_Size_"
<< this->S_ << "Argument_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name ();
if (!fixed)
{
switch (this->dir_)
{
case _tao_OUT:
*os << "," << this->linebreak_ << be_nl
<< node->name () << "_out";
break;
case _tao_RET:
*os << "," << this->linebreak_ << be_nl
<< node->name () << "_var";
break;
default:
break;
}
}
*os << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
this->this_mode_and_dir_generated (node, I_TRUE);
return 0;
}
int
be_visitor_arg_tmplinst::visit_structure_fwd (be_structure_fwd *node)
{
if (this->this_mode_and_dir_generated (node))
{
return 0;
}
be_structure *fd = be_structure::narrow_from_decl (node->full_definition ());
if (this->visit_structure (fd) != 0)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_structure_fwd - code generation failed\n"),
-1);
}
this->this_mode_and_dir_generated (node, I_TRUE);
return 0;
}
int
be_visitor_arg_tmplinst::visit_field (be_field *node)
{
be_type *bt = be_type::narrow_from_decl (node->field_type ());
if (!bt)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_field - "
"Bad field type\n"),
-1);
}
if (bt->accept (this) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_field - "
"codegen for field type failed\n"),
-1);
}
return 0;
}
int
be_visitor_arg_tmplinst::visit_union (be_union *node)
{
if (this->this_mode_and_dir_generated (node))
{
return 0;
}
TAO_OutStream *os = this->ctx_->stream ();
idl_bool fixed = (node->size_type () == AST_Type::FIXED);
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::";
this->gen_direction (os);
*os << "_" << (fixed ? "Fixed" : "Var") << "_Size_"
<< this->S_ << "Argument_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name ();
if (!fixed)
{
switch (this->dir_)
{
case _tao_OUT:
*os << "," << this->linebreak_ << be_nl
<< node->name () << "_out";
break;
case _tao_RET:
*os << "," << this->linebreak_ << be_nl
<< node->name () << "_var";
break;
default:
break;
}
}
*os << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
this->this_mode_and_dir_generated (node, I_TRUE);
return 0;
}
int
be_visitor_arg_tmplinst::visit_union_fwd (be_union_fwd *node)
{
if (this->this_mode_and_dir_generated (node))
{
return 0;
}
be_union *fd = be_union::narrow_from_decl (node->full_definition ());
if (this->visit_union (fd) != 0)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_union_fwd - code generation failed\n"),
-1);
}
this->this_mode_and_dir_generated (node, I_TRUE);
return 0;
}
int
be_visitor_arg_tmplinst::visit_union_branch (be_union_branch *node)
{
be_type *bt = be_type::narrow_from_decl (node->field_type ());
if (!bt)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_union_branch - "
"Bad union_branch type\n"),
-1);
}
if (bt->accept (this) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_union_branch - "
"codegen for union_branch type failed\n"),
-1);
}
return 0;
}
int
be_visitor_arg_tmplinst::visit_typedef (be_typedef *node)
{
this->ctx_->alias (node);
// Make a decision based on the primitive base type.
be_type *bt = node->primitive_base_type ();
if (!bt || (bt->accept (this) == -1))
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_arg_tmplinst::"
"visit_typedef - "
"Bad primitive type\n"),
-1);
}
this->ctx_->alias (0);
return 0;
}
void
be_visitor_arg_tmplinst::direction (void)
{
this->dir_ = _tao_RET;
}
void
be_visitor_arg_tmplinst::direction (AST_Argument::Direction dir)
{
switch (dir)
{
case AST_Argument::dir_IN:
this->dir_ = _tao_IN;
break;
case AST_Argument::dir_INOUT:
this->dir_ = _tao_INOUT;
break;
case AST_Argument::dir_OUT:
this->dir_ = _tao_OUT;
break;
default:
break;
}
}
idl_bool
be_visitor_arg_tmplinst::this_mode_and_dir_generated (be_decl *node) const
{
idl_bool cli = (ACE_OS::strlen (this->S_) == 0);
switch (this->mode_)
{
case be_visitor_tmplinst_cs::TMPL_CLASS:
switch (this->dir_)
{
case _tao_IN:
return (cli ? node->cli_inarg_tmpl_class_gen ()
: node->srv_inarg_tmpl_class_gen ());
case _tao_INOUT:
return (cli ? node->cli_inoutarg_tmpl_class_gen ()
: node->srv_inoutarg_tmpl_class_gen ());
case _tao_OUT:
return (cli ? node->cli_outarg_tmpl_class_gen ()
: node->srv_outarg_tmpl_class_gen ());
case _tao_RET:
return (cli ? node->cli_retarg_tmpl_class_gen ()
: node->srv_retarg_tmpl_class_gen ());
default:
return I_FALSE;
}
case be_visitor_tmplinst_cs::PRAGMA_INST:
switch (this->dir_)
{
case _tao_IN:
return (cli ? node->cli_inarg_pragma_inst_gen ()
: node->srv_inarg_pragma_inst_gen ());
case _tao_INOUT:
return (cli ? node->cli_inoutarg_pragma_inst_gen ()
: node->srv_inoutarg_pragma_inst_gen ());
case _tao_OUT:
return (cli ? node->cli_outarg_pragma_inst_gen ()
: node->srv_outarg_pragma_inst_gen ());
case _tao_RET:
return (cli ? node->cli_retarg_pragma_inst_gen ()
: node->srv_retarg_pragma_inst_gen ());
default:
return I_FALSE;
}
default:
return I_FALSE;
}
}
void
be_visitor_arg_tmplinst::this_mode_and_dir_generated (be_decl *node,
idl_bool val)
{
idl_bool cli = (ACE_OS::strlen (this->S_) == 0);
switch (this->mode_)
{
case be_visitor_tmplinst_cs::TMPL_CLASS:
switch (this->dir_)
{
case _tao_IN:
cli ? node->cli_inarg_tmpl_class_gen (val)
: node->srv_inarg_tmpl_class_gen (val);
break;
case _tao_INOUT:
cli ? node->cli_inoutarg_tmpl_class_gen (val)
: node->srv_inoutarg_tmpl_class_gen (val);
break;
case _tao_OUT:
cli ? node->cli_outarg_tmpl_class_gen (val)
: node->srv_outarg_tmpl_class_gen (val);
break;
case _tao_RET:
cli ? node->cli_retarg_tmpl_class_gen (val)
: node->srv_retarg_tmpl_class_gen (val);
break;
default:
break;
}
break;
case be_visitor_tmplinst_cs::PRAGMA_INST:
switch (this->dir_)
{
case _tao_IN:
cli ? node->cli_inarg_pragma_inst_gen (val)
: node->srv_inarg_pragma_inst_gen (val);
break;
case _tao_INOUT:
cli ? node->cli_inoutarg_pragma_inst_gen (val)
: node->srv_inoutarg_pragma_inst_gen (val);
break;
case _tao_OUT:
cli ? node->cli_outarg_pragma_inst_gen (val)
: node->srv_outarg_pragma_inst_gen (val);
break;
case _tao_RET:
cli ? node->cli_retarg_pragma_inst_gen (val)
: node->srv_retarg_pragma_inst_gen (val);
break;
default:
break;
}
break;
default:
break;
}
}
void
be_visitor_arg_tmplinst::gen_direction (TAO_OutStream *os)
{
switch (this->dir_)
{
case _tao_IN:
*os << "In";
break;
case _tao_INOUT:
*os << "Inout";
break;
case _tao_OUT:
*os << "Out";
break;
case _tao_RET:
*os << "Ret";
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?