valuetype_ss.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 158 行
CPP
158 行
//
// valuetype_ss.cpp,v 1.7 2003/09/17 18:10:54 edwardgt Exp
//
// ============================================================================
//
// = LIBRARY
// TAO IDL
//
// = FILENAME
// valuetype_ss.cpp
//
// = DESCRIPTION
// Visitor generating code for Interfaces in the server skeletons file.
//
// = AUTHOR
// Aniruddha Gokhale
//
// ============================================================================
#include "nr_extern.h"
ACE_RCSID (be_visitor_valuetype,
valuetype_ss,
"valuetype_ss.cpp,v 1.7 2003/09/17 18:10:54 edwardgt Exp")
// ************************************************************
// Interface visitor for server skeletons.
// ************************************************************
be_visitor_valuetype_ss::be_visitor_valuetype_ss (be_visitor_context *ctx)
: be_visitor_valuetype (ctx)
{
}
be_visitor_valuetype_ss::~be_visitor_valuetype_ss (void)
{
}
int
be_visitor_valuetype_ss::visit_valuetype (be_valuetype *node)
{
if (node->srv_skel_gen () || node->imported () || node->is_abstract ())
{
return 0;
}
AST_Interface *concrete = node->supports_concrete ();
// We generate a skeleton class only if the valuetype supports a
// non-abstract interface.
if (concrete == 0)
{
return 0;
}
// Generate the normal skeleton as usual.
TAO_OutStream *os = this->ctx_->stream ();
os->indent ();
ACE_CString full_skel_name_holder =
this->generate_full_skel_name (node);
const char *full_skel_name = full_skel_name_holder.c_str ();
ACE_CString flat_name_holder =
this->generate_flat_name (node);
*os << be_nl << "// TAO_IDL - Generated from " << be_nl
<< "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl;
// Find if we are at the top scope or inside some module,
// pre-compute the prefix that must be added to the local name in
// each case.
const char *local_name_prefix = "";
if (!node->is_nested ())
{
local_name_prefix = "POA_";
}
ACE_CString node_local_name_holder =
this->generate_local_name (node);
const char *node_local_name = node_local_name_holder.c_str ();
*os << full_skel_name << "::"
<< local_name_prefix << node_local_name
<< " (void)" << be_nl
<< "{}" << be_nl << be_nl;
*os << full_skel_name << "::"
<< local_name_prefix << node_local_name << " ("
<< "const " << local_name_prefix << node_local_name << "& rhs)";
*os << be_idt_nl
<< ": TAO_Abstract_ServantBase (rhs)," << be_nl
<< " TAO_ServantBase (rhs)," << be_nl;
if (concrete->is_nested ())
{
AST_Decl *scope = ScopeAsDecl (concrete->defined_in ());
*os << " ACE_NESTED_CLASS (POA_" << scope->name () << ", "
<< concrete->local_name () << ") (rhs)," << be_nl;
}
else
{
be_interface *bd = be_interface::narrow_from_decl (concrete);
*os << bd->full_skel_name () << " (rhs)," << be_nl;
}
*os << " ValueBase (rhs)," << be_nl;
if (node->is_nested ())
{
AST_Decl *scope = ScopeAsDecl (node->defined_in ());
*os << " ACE_NESTED_CLASS (" << scope->name () << ", "
<< node->local_name () << ") ()";
}
else
{
be_interface *bd = be_interface::narrow_from_decl (node);
*os << bd->full_skel_name () << " ()";
}
*os << be_uidt_nl << "{}" << be_nl << be_nl;
*os << full_skel_name << "::~"
<< local_name_prefix << node_local_name
<< " (void)" << be_nl
<< "{}" << be_nl << be_nl;
return 0;
}
ACE_CString
be_visitor_valuetype_ss::generate_flat_name (be_valuetype *node)
{
return ACE_CString (node->flat_name ());
}
ACE_CString
be_visitor_valuetype_ss::generate_local_name (be_valuetype *node)
{
return ACE_CString (node->local_name ());
}
ACE_CString
be_visitor_valuetype_ss::generate_full_skel_name (be_valuetype *node)
{
return ACE_CString (node->full_skel_name ());
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?