be_decl.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 919 行 · 第 1/2 页
CPP
919 行
// be_decl.cpp,v 1.62 2003/11/25 19:57:12 parsons Exp
// ============================================================================
//
// = LIBRARY
// TAO IDL
//
// = FILENAME
// be_decl.cpp
//
// = DESCRIPTION
// Extension of class AST_Decl that provides additional means for C++
// mapping.
//
// = AUTHOR
// Copyright 1994-1995 by Sun Microsystems, Inc.
// and
// Aniruddha Gokhale
//
// ============================================================================
#include "be_decl.h"
#include "be_scope.h"
#include "be_interface.h"
#include "be_interface_fwd.h"
#include "be_valuetype.h"
#include "be_component.h"
#include "be_eventtype.h"
#include "be_home.h"
#include "be_module.h"
#include "be_root.h"
#include "be_exception.h"
#include "be_structure.h"
#include "be_union.h"
#include "be_enum.h"
#include "be_operation.h"
#include "be_factory.h"
#include "be_sequence.h"
#include "be_visitor.h"
#include "ast_structure_fwd.h"
#include "ast_string.h"
#include "utl_identifier.h"
#include "global_extern.h"
#include "ace/Log_Msg.h"
#include "ace/String_Base.h"
ACE_RCSID (be,
be_decl,
"be_decl.cpp,v 1.62 2003/11/25 19:57:12 parsons Exp")
// Default Constructor
be_decl::be_decl (void)
: COMMON_Base (),
AST_Decl (),
cli_hdr_gen_ (I_FALSE),
cli_stub_gen_ (I_FALSE),
cli_inline_gen_ (I_FALSE),
srv_hdr_gen_ (I_FALSE),
impl_hdr_gen_ (I_FALSE),
srv_skel_gen_ (I_FALSE),
impl_skel_gen_ (I_FALSE),
srv_inline_gen_ (I_FALSE),
cli_hdr_any_op_gen_ (I_FALSE),
cli_stub_any_op_gen_ (I_FALSE),
cli_hdr_cdr_op_gen_ (I_FALSE),
cli_stub_cdr_op_gen_ (I_FALSE),
cli_inline_cdr_op_gen_ (I_FALSE),
cli_inline_cdr_decl_gen_ (I_FALSE),
cli_traits_gen_ (I_FALSE),
cli_arg_traits_gen_ (I_FALSE),
srv_arg_traits_gen_ (I_FALSE),
srv_sarg_traits_gen_ (I_FALSE),
cli_tmpl_class_gen_ (I_FALSE),
cli_pragma_inst_gen_ (I_FALSE),
cli_inarg_tmpl_class_gen_ (I_FALSE),
cli_inarg_pragma_inst_gen_ (I_FALSE),
cli_inoutarg_tmpl_class_gen_ (I_FALSE),
cli_inoutarg_pragma_inst_gen_ (I_FALSE),
cli_outarg_tmpl_class_gen_ (I_FALSE),
cli_outarg_pragma_inst_gen_ (I_FALSE),
cli_retarg_tmpl_class_gen_ (I_FALSE),
cli_retarg_pragma_inst_gen_ (I_FALSE),
srv_tmpl_class_gen_ (I_FALSE),
srv_pragma_inst_gen_ (I_FALSE),
srv_inarg_tmpl_class_gen_ (I_FALSE),
srv_inarg_pragma_inst_gen_ (I_FALSE),
srv_inoutarg_tmpl_class_gen_ (I_FALSE),
srv_inoutarg_pragma_inst_gen_ (I_FALSE),
srv_outarg_tmpl_class_gen_ (I_FALSE),
srv_outarg_pragma_inst_gen_ (I_FALSE),
srv_retarg_tmpl_class_gen_ (I_FALSE),
srv_retarg_pragma_inst_gen_ (I_FALSE)
{
}
// Constructor
be_decl::be_decl (AST_Decl::NodeType type,
UTL_ScopedName *n)
: COMMON_Base (),
AST_Decl (type,
n),
cli_hdr_gen_ (I_FALSE),
cli_stub_gen_ (I_FALSE),
cli_inline_gen_ (I_FALSE),
srv_hdr_gen_ (I_FALSE),
impl_hdr_gen_ (I_FALSE),
srv_skel_gen_ (I_FALSE),
impl_skel_gen_ (I_FALSE),
srv_inline_gen_ (I_FALSE),
cli_hdr_any_op_gen_ (I_FALSE),
cli_stub_any_op_gen_ (I_FALSE),
cli_hdr_cdr_op_gen_ (I_FALSE),
cli_stub_cdr_op_gen_ (I_FALSE),
cli_inline_cdr_op_gen_ (I_FALSE),
cli_inline_cdr_decl_gen_ (I_FALSE),
cli_traits_gen_ (I_FALSE),
cli_arg_traits_gen_ (I_FALSE),
srv_arg_traits_gen_ (I_FALSE),
srv_sarg_traits_gen_ (I_FALSE),
cli_tmpl_class_gen_ (I_FALSE),
cli_pragma_inst_gen_ (I_FALSE),
cli_inarg_tmpl_class_gen_ (I_FALSE),
cli_inarg_pragma_inst_gen_ (I_FALSE),
cli_inoutarg_tmpl_class_gen_ (I_FALSE),
cli_inoutarg_pragma_inst_gen_ (I_FALSE),
cli_outarg_tmpl_class_gen_ (I_FALSE),
cli_outarg_pragma_inst_gen_ (I_FALSE),
cli_retarg_tmpl_class_gen_ (I_FALSE),
cli_retarg_pragma_inst_gen_ (I_FALSE),
srv_tmpl_class_gen_ (I_FALSE),
srv_pragma_inst_gen_ (I_FALSE),
srv_inarg_tmpl_class_gen_ (I_FALSE),
srv_inarg_pragma_inst_gen_ (I_FALSE),
srv_inoutarg_tmpl_class_gen_ (I_FALSE),
srv_inoutarg_pragma_inst_gen_ (I_FALSE),
srv_outarg_tmpl_class_gen_ (I_FALSE),
srv_outarg_pragma_inst_gen_ (I_FALSE),
srv_retarg_tmpl_class_gen_ (I_FALSE),
srv_retarg_pragma_inst_gen_ (I_FALSE)
{
}
// Destructor
be_decl::~be_decl (void)
{
}
void
be_decl::compute_full_name (const char *prefix,
const char *suffix,
char *&name)
{
if (prefix == 0 || suffix == 0)
{
return;
}
ACE_CString prefix_str (prefix);
ACE_CString suffix_str (suffix);
ACE_CString result_str;
// Get parent.
if (this->defined_in () == 0)
{
// Global scope.
// Prefix.
result_str = prefix_str;
// Local name.
result_str += ACE_CString (this->local_name ()->get_string ());
// Suffix.
result_str += suffix_str;
}
else
{
// Get scope name.
be_decl *parent =
be_scope::narrow_from_scope (this->defined_in ())->decl ();
if (parent == 0)
{
ACE_ERROR ((LM_ERROR,
"(%N:%l) be_decl::"
"compute_full_name - "
"scope name is nil\n"));
}
// Parent name.
result_str = ACE_CString (parent->full_name ());
// _
if (ACE_OS::strcmp (parent->full_name (), "") != 0)
{
result_str += ACE_CString ("::");
}
// Prefix.
result_str += prefix_str;
// Local name.
result_str += ACE_CString (this->local_name ()->get_string ());
// Suffix.
result_str += suffix_str;
}
name = ACE_OS::strdup (result_str.fast_rep ());
}
void
be_decl::compute_flat_name (const char *prefix,
const char *suffix,
char *&name)
{
if (prefix == 0 || suffix == 0)
{
return;
}
ACE_CString prefix_str (prefix);
ACE_CString suffix_str (suffix);
ACE_CString result_str;
// Get parent.
if (this->defined_in () == 0)
{
// Global scope.
// Prefix.
result_str = prefix_str;
// Local name.
result_str += ACE_CString (this->local_name ()->get_string ());
// Suffix.
result_str += suffix_str;
}
else
{
// Get scope name.
be_decl *parent =
be_scope::narrow_from_scope (this->defined_in ())->decl ();
if (parent == 0)
{
ACE_ERROR ((LM_ERROR,
"(%N:%l) be_decl::"
"compute_flat_name - "
"scope name is nil\n"));
}
// Parent name.
result_str = ACE_CString (parent->flat_name ());
// _
if (ACE_OS::strcmp (parent->flat_name (), "") != 0)
result_str += "_";
// Prefix.
result_str += prefix_str;
// Local name.
result_str += ACE_CString (this->local_name ()->get_string ());
// Suffix.
result_str += suffix_str;
}
name = result_str.rep ();
}
void
be_decl::destroy (void)
{
this->AST_Decl::destroy ();
}
// Return the scope created by this node (if one exists, else NULL).
be_scope *
be_decl::scope (void)
{
be_decl *d = this;
switch (this->node_type ())
{
case AST_Decl::NT_interface_fwd:
// Resolve forward declared interface by looking at full_definition()
// field and iterating.
d =
be_interface::narrow_from_decl (
(be_interface_fwd::narrow_from_decl (this))->full_definition ()
);
// Fall through
case AST_Decl::NT_interface:
return be_interface::narrow_from_decl (d);
case AST_Decl::NT_module:
return be_module::narrow_from_decl (d);
case AST_Decl::NT_root:
return be_root::narrow_from_decl (d);
case AST_Decl::NT_except:
return be_exception::narrow_from_decl (d);
case AST_Decl::NT_union:
return be_union::narrow_from_decl (d);
case AST_Decl::NT_struct:
return be_structure::narrow_from_decl (d);
case AST_Decl::NT_enum:
return be_enum::narrow_from_decl (d);
case AST_Decl::NT_op:
return be_operation::narrow_from_decl (d);
case AST_Decl::NT_factory:
return be_factory::narrow_from_decl (d);
case AST_Decl::NT_sequence:
return be_sequence::narrow_from_decl (d);
case AST_Decl::NT_valuetype:
return be_valuetype::narrow_from_decl (d);
case AST_Decl::NT_component:
return be_component::narrow_from_decl (d);
case AST_Decl::NT_eventtype:
return be_eventtype::narrow_from_decl (d);
case AST_Decl::NT_home:
return be_home::narrow_from_decl (d);
default:
return (be_scope *)0;
}
}
// Boolean methods to test if code was already generated.
idl_bool
be_decl::cli_hdr_gen (void)
{
return this->cli_hdr_gen_;
}
idl_bool
be_decl::cli_stub_gen (void)
{
return this->cli_stub_gen_;
}
idl_bool
be_decl::cli_hdr_any_op_gen (void)
{
return this->cli_hdr_any_op_gen_;
}
idl_bool
be_decl::cli_stub_any_op_gen (void)
{
return this->cli_stub_any_op_gen_;
}
idl_bool
be_decl::cli_hdr_cdr_op_gen (void)
{
return this->cli_hdr_cdr_op_gen_;
}
idl_bool
be_decl::cli_stub_cdr_op_gen (void)
{
return this->cli_stub_cdr_op_gen_;
}
idl_bool
be_decl::cli_inline_cdr_op_gen (void)
{
return this->cli_inline_cdr_op_gen_;
}
idl_bool
be_decl::cli_inline_cdr_decl_gen (void)
{
return this->cli_inline_cdr_decl_gen_;
}
idl_bool
be_decl::cli_traits_gen (void)
{
return this->cli_traits_gen_;
}
idl_bool
be_decl::cli_arg_traits_gen (void)
{
return this->cli_arg_traits_gen_;
}
idl_bool
be_decl::srv_arg_traits_gen (void)
{
return this->srv_arg_traits_gen_;
}
idl_bool
be_decl::srv_sarg_traits_gen (void)
{
return this->srv_sarg_traits_gen_;
}
idl_bool
be_decl::cli_tmpl_class_gen (void)
{
return this->cli_tmpl_class_gen_;
}
idl_bool
be_decl::cli_pragma_inst_gen (void)
{
return this->cli_pragma_inst_gen_;
}
idl_bool
be_decl::cli_inarg_tmpl_class_gen (void)
{
return this->cli_inarg_tmpl_class_gen_;
}
idl_bool
be_decl::cli_inarg_pragma_inst_gen (void)
{
return this->cli_inarg_pragma_inst_gen_;
}
idl_bool
be_decl::cli_inoutarg_tmpl_class_gen (void)
{
return this->cli_inoutarg_tmpl_class_gen_;
}
idl_bool
be_decl::cli_inoutarg_pragma_inst_gen (void)
{
return this->cli_inoutarg_pragma_inst_gen_;
}
idl_bool
be_decl::cli_outarg_tmpl_class_gen (void)
{
return this->cli_outarg_tmpl_class_gen_;
}
idl_bool
be_decl::cli_outarg_pragma_inst_gen (void)
{
return this->cli_outarg_pragma_inst_gen_;
}
idl_bool
be_decl::cli_retarg_tmpl_class_gen (void)
{
return this->cli_retarg_tmpl_class_gen_;
}
idl_bool
be_decl::cli_retarg_pragma_inst_gen (void)
{
return this->cli_retarg_tmpl_class_gen_;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?