operation_cs.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 162 行
CPP
162 行
//
// operation_cs.cpp,v 1.86 2003/10/28 18:30:38 bala Exp
//
// ============================================================================
//
// = LIBRARY
// TAO IDL
//
// = FILENAME
// operation_cs.cpp
//
// = DESCRIPTION
// Visitor generating code for Operation in the stubs file.
//
// = AUTHOR
// Aniruddha Gokhale & Angelo Corsaro
//
// ============================================================================
ACE_RCSID (be_visitor_operation,
operation_cs,
"operation_cs.cpp,v 1.86 2003/10/28 18:30:38 bala Exp")
// ************************************************************
// Operation visitor for client stubs
// ************************************************************
be_visitor_operation_cs::be_visitor_operation_cs (be_visitor_context *ctx)
: be_visitor_operation (ctx)
{
}
be_visitor_operation_cs::~be_visitor_operation_cs (void)
{
}
// Processing to be done after every element in the scope is processed.
int
be_visitor_operation_cs::post_process (be_decl *bd)
{
// All we do here is to insert a comma and a newline.
TAO_OutStream *os = this->ctx_->stream ();
if (!this->last_node (bd))
{
*os << ",\n";
}
return 0;
}
int
be_visitor_operation_cs::visit_operation (be_operation *node)
{
be_interface *intf = this->ctx_->attribute ()
? be_interface::narrow_from_scope (this->ctx_->attribute ()->defined_in ())
: be_interface::narrow_from_scope (node->defined_in ());
if (!intf)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_operation_cs::"
"visit_operation - "
"bad interface scope\n"),
-1);
}
TAO_OutStream *os = this->ctx_->stream ();
this->ctx_->node (node); // save the node for future use
if (node->is_local ())
{
return 0;
}
*os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
// Retrieve the operation return type.
be_type *bt = be_type::narrow_from_decl (node->return_type ());
if (!bt)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_operation_cs::"
"visit_operation - "
"Bad return type\n"),
-1);
}
// Generate the return type mapping (same as in the header file)
be_visitor_context ctx = *this->ctx_;
be_visitor_operation_rettype rt_visitor = (&ctx);
if (bt->accept (&rt_visitor) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_operation_cs::"
"visit_operation - "
"codegen for return type failed\n"),
-1);
}
// Generate the operation name
*os << " " << node->name ();
// Generate the argument list with the appropriate mapping (same as
// in the header file)
ctx = *this->ctx_;
be_visitor_operation_arglist al_visitor (&ctx);
if (node->accept (&al_visitor) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_operation_cs::"
"visit_operation - "
"codegen for argument list failed\n"),
-1);
}
return this->gen_stub_operation_body (node,
bt);
}
int
be_visitor_operation_cs::visit_argument (be_argument *node)
{
// This method is used to generate the ParamData table entry.
TAO_OutStream *os = this->ctx_->stream ();
be_type *bt = be_type::narrow_from_decl (node->field_type ());
if (!bt)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_operation_cs::"
"visit_argument - "
"Bad argument type\n"),
-1);
}
os->indent ();
*os << "{" << bt->tc_name () << ", ";
switch (node->direction ())
{
case AST_Argument::dir_IN:
*os << "PARAM_IN, ";
break;
case AST_Argument::dir_INOUT:
*os << "PARAM_INOUT, ";
break;
case AST_Argument::dir_OUT:
*os << "PARAM_OUT, ";
break;
}
*os << "0}";
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?