be_visitor_ccm_pre_proc.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 1,932 行 · 第 1/4 页
CPP
1,932 行
/**
* @file be_visitor_ccm_pre_proc.cpp
*
* be_visitor_ccm_pre_proc.cpp,v 1.9 2003/10/28 18:30:37 bala Exp
*
* @author Jeff Parsons
*/
//=============================================================================
#include "be_visitor_ccm_pre_proc.h"
#include "be_visitor_context.h"
#include "be_root.h"
#include "be_operation.h"
#include "be_argument.h"
#include "be_exception.h"
#include "be_structure.h"
#include "be_sequence.h"
#include "be_valuetype.h"
#include "be_module.h"
#include "be_field.h"
#include "be_typedef.h"
#include "be_component.h"
#include "be_eventtype.h"
#include "be_home.h"
#include "be_extern.h"
#include "ast_generator.h"
#include "utl_exceptlist.h"
#include "utl_namelist.h"
#include "utl_err.h"
#include "fe_interface_header.h"
#include "global_extern.h"
#include "nr_extern.h"
ACE_RCSID (be,
be_visitor_ccm_pre_proc,
"be_visitor_ccm_pre_proc.cpp,v 1.9 2003/10/28 18:30:37 bala Exp")
const char *EXCEP_NAMES[] =
{
"AlreadyConnected",
"InvalidConnection",
"NoConnection",
"ExceededConnectionLimit",
"CreateFailure",
"RemoveFailure",
"FinderFailure",
"InvalidKey",
"UnknownKeyValue",
"DuplicateKeyValue",
"CreateFailure",
"FinderFailure"
};
const int N_EXCEPS = sizeof (EXCEP_NAMES) / sizeof (char *);
be_exception *EXCEPS[N_EXCEPS];
be_visitor_ccm_pre_proc::be_visitor_ccm_pre_proc (be_visitor_context *ctx)
: be_visitor_scope (ctx),
module_id_ ("Components"),
cookie_ (0),
connection_ (0),
connections_ (0),
already_connected_ (0),
invalid_connection_ (0),
no_connection_ (0),
exceeded_connection_limit_ (0),
create_failure_ (0),
remove_failure_ (0),
finder_failure_ (0),
invalid_key_ (0),
unknown_key_value_ (0),
duplicate_key_value_ (0)
{
}
be_visitor_ccm_pre_proc::~be_visitor_ccm_pre_proc (void)
{
this->module_id_.destroy ();
}
int
be_visitor_ccm_pre_proc::visit_root (be_root *node)
{
if (this->visit_scope (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_root - visit scope failed\n"),
-1);
}
return 0;
}
int
be_visitor_ccm_pre_proc::visit_module (be_module *node)
{
if (this->visit_scope (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_module - visit scope failed\n"),
-1);
}
return 0;
}
int
be_visitor_ccm_pre_proc::visit_component (be_component *node)
{
if (this->lookup_ccmobject () == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"Components::CCMObject lookup failed\n"),
-1);
}
if (this->lookup_cookie (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"Components::Cookie lookup failed\n"),
-1);
}
if (this->lookup_exceptions (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"component exception lookups failed\n"),
-1);
}
if (this->gen_provides (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"code generation for provides declarations failed\n"),
-1);
}
if (this->gen_uses (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"code generation for uses declarations failed\n"),
-1);
}
if (this->gen_emits (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"code generation for emits declarations failed\n"),
-1);
}
if (this->gen_publishes (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"code generation for publishes declarations failed\n"),
-1);
}
if (this->gen_consumes (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_component - "
"code generation for consumes declarations failed\n"),
-1);
}
return 0;
}
int
be_visitor_ccm_pre_proc::visit_home (be_home *node)
{
AST_Interface *xplicit = this->create_explicit (node);
if (xplicit == 0)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_home - "
"code generation for explicit interface failed\n"),
-1);
}
AST_Interface *implicit = this->create_implicit (node);
if (implicit == 0)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_home - "
"code generation for implicit interface failed\n"),
-1);
}
if (this->gen_factories (node, xplicit) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_home - "
"code generation for factories declarations failed\n"),
-1);
}
if (this->gen_finders (node, xplicit) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_home - "
"code generation for finders declarations failed\n"),
-1);
}
if (this->gen_implicit_ops (node, implicit) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_home - "
"code generation for primary key "
"operations failed\n"),
-1);
}
if (this->create_equivalent (node, xplicit, implicit) == 0)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_home - "
"code generation for equivalent interface failed\n"),
-1);
}
return 0;
}
int
be_visitor_ccm_pre_proc::visit_eventtype (be_eventtype *node)
{
if (this->create_event_consumer (node) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"visit_eventtype - "
"code generation for consumer failed\n"),
-1);
}
return 0;
}
// ****************************************************************
int
be_visitor_ccm_pre_proc::gen_provides (be_component *node)
{
ACE_Unbounded_Queue<AST_Component::port_description> &s = node->provides ();
AST_Component::port_description *pd = 0;
AST_Operation *provides_op = 0;
for (ACE_Unbounded_Queue_Iterator<AST_Component::port_description> iter (s);
! iter.done ();
iter.advance ())
{
iter.next (pd);
UTL_ScopedName *op_name =
this->create_scoped_name ("provide_",
pd->id->get_string (),
0,
node);
ACE_NEW_RETURN (provides_op,
be_operation (pd->impl,
AST_Operation::OP_noflags,
0,
0,
0),
-1);
provides_op->set_defined_in (node);
provides_op->set_imported (node->imported ());
provides_op->set_name (op_name);
node->be_add_operation (provides_op);
}
return 0;
}
int
be_visitor_ccm_pre_proc::gen_uses (be_component *node)
{
ACE_Unbounded_Queue<AST_Component::port_description> &s = node->uses ();
AST_Component::port_description *pd = 0;
for (ACE_Unbounded_Queue_Iterator<AST_Component::port_description> iter (s);
! iter.done ();
iter.advance ())
{
iter.next (pd);
if (pd->is_multiple == I_FALSE)
{
if (this->gen_connect_single (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"gen_connect_single failed\n"),
-1);
}
if (this->gen_disconnect_single (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"gen_disconnect_single failed\n"),
-1);
}
if (this->gen_get_connection_single (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"gen_get_connection_single failed\n"),
-1);
}
}
else
{
if (this->create_uses_multiple_stuff (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"create_uses_multiple_stuff failed\n"),
-1);
}
if (this->gen_connect_multiple (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"gen_connect_multiple failed\n"),
-1);
}
if (this->gen_disconnect_multiple (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"gen_disconnect_multiple failed\n"),
-1);
}
if (this->gen_get_connection_multiple (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_uses - "
"gen_get_connection_single failed\n"),
-1);
}
}
}
return 0;
}
int
be_visitor_ccm_pre_proc::gen_emits (be_component *node)
{
ACE_Unbounded_Queue<AST_Component::port_description> &s = node->emits ();
AST_Component::port_description *pd = 0;
for (ACE_Unbounded_Queue_Iterator<AST_Component::port_description> iter (s);
! iter.done ();
iter.advance ())
{
iter.next (pd);
if (this->gen_emits_connect (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_emits - "
"gen_emits_connect failed\n"),
-1);
}
if (this->gen_emits_disconnect (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_emits - "
"gen_emits_disconnect failed\n"),
-1);
}
}
return 0;
}
int
be_visitor_ccm_pre_proc::gen_publishes (be_component *node)
{
ACE_Unbounded_Queue<AST_Component::port_description> &s = node->publishes ();
AST_Component::port_description *pd = 0;
for (ACE_Unbounded_Queue_Iterator<AST_Component::port_description> iter (s);
! iter.done ();
iter.advance ())
{
iter.next (pd);
if (this->gen_subscribe (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_publishes - "
"gen_subscribe failed\n"),
-1);
}
if (this->gen_unsubscribe (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_publishes - "
"gen_unsubscribe failed\n"),
-1);
}
}
return 0;
}
int
be_visitor_ccm_pre_proc::gen_consumes (be_component *node)
{
ACE_Unbounded_Queue<AST_Component::port_description> &s = node->consumes ();
AST_Component::port_description *pd = 0;
for (ACE_Unbounded_Queue_Iterator<AST_Component::port_description> iter (s);
! iter.done ();
iter.advance ())
{
iter.next (pd);
if (this->gen_get_consumer (node, pd) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%N:%l) be_visitor_ccm_pre_proc::"
"gen_consumes - "
"gen_consumes_get_connection failed\n"),
-1);
}
}
return 0;
}
int
be_visitor_ccm_pre_proc::gen_factories (be_home *node,
AST_Interface *xplicit)
{
AST_Operation **item = 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?