diff options
author | kirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-11-19 23:52:49 +0000 |
---|---|---|
committer | kirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-11-19 23:52:49 +0000 |
commit | 8d421a2c7318e9742bb189f6828c42e1d2758de7 (patch) | |
tree | 3d259bd9b8bf8f0e739916ae8e69e56cd1391e10 | |
parent | 5d2c27290fba88621025cd8658686910040330b1 (diff) | |
download | ATCD-8d421a2c7318e9742bb189f6828c42e1d2758de7.tar.gz |
ChangeLogTag:Fri Nov 19 17:05:00 1999 Kirthika Parameswaran <kirthika@cs.wustl.edu>
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_factory.cpp | 15 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface.cpp | 3 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface/smart_proxy_cs.cpp | 271 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_operation.cpp | 5 |
4 files changed, 293 insertions, 1 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_factory.cpp b/TAO/TAO_IDL/be/be_visitor_factory.cpp index 16fc275f45e..2a2a9b83d54 100644 --- a/TAO/TAO_IDL/be/be_visitor_factory.cpp +++ b/TAO/TAO_IDL/be/be_visitor_factory.cpp @@ -198,6 +198,10 @@ TAO_Common_Visitor_Factory::make_visitor (be_visitor_context *ctx) return new be_visitor_interface_cdr_op_ci (new_ctx); case TAO_CodeGen::TAO_INTERFACE_CDR_OP_CS: return new be_visitor_interface_cdr_op_cs (new_ctx); + case TAO_CodeGen::TAO_INTERFACE_SMART_PROXY_CH: + return new be_visitor_interface_smart_proxy_ch (new_ctx); + case TAO_CodeGen::TAO_INTERFACE_SMART_PROXY_CS: + return new be_visitor_interface_smart_proxy_cs (new_ctx); case TAO_CodeGen::TAO_INTERFACE_FWD_CH: return new be_visitor_interface_fwd_ch (new_ctx); @@ -422,6 +426,9 @@ TAO_Common_Visitor_Factory::make_visitor (be_visitor_context *ctx) case TAO_CodeGen::TAO_ATTRIBUTE_THRU_POA_COLLOCATED_SS: case TAO_CodeGen::TAO_ATTRIBUTE_DIRECT_COLLOCATED_SH: case TAO_CodeGen::TAO_ATTRIBUTE_DIRECT_COLLOCATED_SS: + case TAO_CodeGen::TAO_ATTRIBUTE_SMART_PROXY_CH: + case TAO_CodeGen::TAO_ATTRIBUTE_SMART_PROXY_CS: + return new be_visitor_attribute (new_ctx); case TAO_CodeGen::TAO_EXCEPTION_CH: @@ -516,6 +523,10 @@ TAO_Interpretive_Visitor_Factory::make_visitor (be_visitor_context *ctx) return new be_visitor_operation_direct_collocated_sh (new_ctx); case TAO_CodeGen::TAO_OPERATION_DIRECT_COLLOCATED_SS: return new be_visitor_operation_direct_collocated_ss (new_ctx); + case TAO_CodeGen::TAO_OPERATION_SMART_PROXY_CH: + return new be_visitor_operation_smart_proxy_ch (new_ctx); + case TAO_CodeGen::TAO_OPERATION_SMART_PROXY_CS: + return new be_visitor_operation_smart_proxy_cs (new_ctx); case TAO_CodeGen::TAO_OPERATION_RETTYPE_CH: case TAO_CodeGen::TAO_OPERATION_RETTYPE_OTHERS: return new be_visitor_operation_rettype (new_ctx); @@ -657,6 +668,10 @@ TAO_Compiled_Visitor_Factory::make_visitor (be_visitor_context *ctx) return new be_visitor_operation_direct_collocated_sh (new_ctx); case TAO_CodeGen::TAO_OPERATION_DIRECT_COLLOCATED_SS: return new be_visitor_operation_direct_collocated_ss (new_ctx); + case TAO_CodeGen::TAO_OPERATION_SMART_PROXY_CH: + return new be_visitor_operation_smart_proxy_ch (new_ctx); + case TAO_CodeGen::TAO_OPERATION_SMART_PROXY_CS: + return new be_visitor_operation_smart_proxy_cs (new_ctx); case TAO_CodeGen::TAO_OPERATION_RETTYPE_CH: case TAO_CodeGen::TAO_OPERATION_RETTYPE_OTHERS: diff --git a/TAO/TAO_IDL/be/be_visitor_interface.cpp b/TAO/TAO_IDL/be/be_visitor_interface.cpp index f9610c8a1e1..32bb0084472 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface.cpp @@ -43,7 +43,8 @@ #include "be_visitor_interface/cdr_op_ch.cpp" #include "be_visitor_interface/cdr_op_ci.cpp" #include "be_visitor_interface/cdr_op_cs.cpp" +#include "be_visitor_interface/smart_proxy_ch.cpp" +#include "be_visitor_interface/smart_proxy_cs.cpp" #include "be_visitor_interface/ami_interface_ch.cpp" - ACE_RCSID(be, be_visitor_interface, "$Id$") diff --git a/TAO/TAO_IDL/be/be_visitor_interface/smart_proxy_cs.cpp b/TAO/TAO_IDL/be/be_visitor_interface/smart_proxy_cs.cpp new file mode 100644 index 00000000000..31595e2b52a --- /dev/null +++ b/TAO/TAO_IDL/be/be_visitor_interface/smart_proxy_cs.cpp @@ -0,0 +1,271 @@ +// +// $Id$ +// + +// ============================================================================ +// +// = LIBRARY +// TAO IDL +// +// = FILENAME +// smart_proxy_cs.cpp +// +// = DESCRIPTION +// Visitor generating code for smart_proxy classes for an Interface in the +// client proxy file. +// +// = AUTHOR +// Kirthika Parameswaran <kirthika@cs.wustl.edu> +// +// ============================================================================ + +#include "idl.h" +#include "idl_extern.h" +#include "be.h" + +#include "be_visitor_interface.h" + +ACE_RCSID(be_visitor_interface, smart_proxy_cs, "$Id$") + + +// ************************************************************ +// be_visitor_interface_smart_proxy_cs +// ************************************************************ + +be_visitor_interface_smart_proxy_cs::be_visitor_interface_smart_proxy_cs +(be_visitor_context *ctx) + : be_visitor_interface (ctx) +{ +} + +be_visitor_interface_smart_proxy_cs::~be_visitor_interface_smart_proxy_cs (void) +{ +} + +int be_visitor_interface_smart_proxy_cs::visit_interface (be_interface *node) +{ + TAO_OutStream *os = this->ctx_->stream (); + + this->ctx_->node (node); + + os->indent (); + + // Its necessary to take care of the nested case. The smart proxy classes + // are in the same scope as the proxy. + be_decl* scope = be_scope::narrow_from_scope (node->defined_in ())->decl (); + + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os <<"TAO_"<< node->flat_name () << "_Default_Proxy_Factory::"; + *os << "TAO_" + << node->flat_name () << "_Default_Proxy_Factory (int register_proxy_factory)" + << be_nl + << "{" << be_idt_nl + << "if (register_proxy_factory)"<< be_idt_nl + << "{" << be_idt_nl + << "TAO_" << node->flat_name () + << "_PROXY_FACTORY_ADAPTER::instance ()->register_proxy_factory (this);"<< be_uidt_nl + << "}" << be_uidt << be_uidt_nl + << "}\n\n"; + + os->indent (); + + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_"<< node->flat_name () + << "_Default_Proxy_Factory::~"; + *os <<"TAO_" + << node->flat_name () << "_Default_Proxy_Factory (void)" + << be_nl << be_uidt << be_uidt + << "{" << be_nl + << "}\n\n"; + + os->indent (); + *os << node->full_name () << "_ptr" << be_nl << be_uidt << be_uidt; + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_" << node->flat_name () + << "_Default_Proxy_Factory::create_proxy (" << be_idt << be_idt_nl + << node->full_name () << "_ptr proxy," << be_nl + << "CORBA::Environment &" << be_uidt_nl + << ")" << be_uidt << be_uidt_nl + << "{" << be_idt_nl + << "return proxy;" << be_uidt << be_uidt_nl + << "}\n\n"; + + os->indent (); + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_" << node->flat_name () << "_Proxy_Factory_Adapter::"; + *os << "TAO_" + << node->flat_name () << "_Proxy_Factory_Adapter (void)" <<be_idt_nl + << " : proxy_factory_ (0)," <<be_idt_nl + << " delete_proxy_factory_ (0)" << be_uidt << be_uidt_nl + << "{"<< be_nl + << "}\n\n"; + + os->indent (); + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_" << node->flat_name () << "_Proxy_Factory_Adapter::"; + *os << "~TAO_" + << node->flat_name () << "_Proxy_Factory_Adapter (void)" <<be_nl + << "{" <<be_idt_nl + << "// Making sure the factory which the adapter has is destroyed with it."<<be_nl + << "if (this->proxy_factory_ != 0)" <<be_idt_nl + << "delete this->proxy_factory_;" << be_uidt<<be_uidt_nl + << "}\n\n"; + + os->indent (); + *os << "int" << be_nl; + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + *os << "TAO_" << node->flat_name () + << "_Proxy_Factory_Adapter::register_proxy_factory (" << be_idt_nl + << "TAO_" << node->flat_name () + << "_Default_Proxy_Factory *df," << be_idt_nl + << " CORBA::Environment &ACE_TRY_ENV" << be_idt_nl + << ")" << be_uidt <<be_uidt << be_uidt_nl + << "{" << be_idt_nl + << "ACE_MT (ACE_GUARD_RETURN (" + << "ACE_Recursive_Thread_Mutex, ace_mon," << be_idt_nl + << "this->lock_, 0));" <<be_uidt_nl + << "// Remove any existing <proxy_factory_> and replace with the new one."<<be_nl + << "this->unregister_proxy_factory (ACE_TRY_ENV);" << be_nl + << "this->proxy_factory_ = df;"<< be_nl + << "this->delete_proxy_factory_ = 0;" << be_uidt << be_uidt_nl + << "return 0;" << be_uidt << be_uidt_nl + << "}\n\n"; + + os->indent (); + *os << "int" << be_nl; + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_"<< node->flat_name () + << "_Proxy_Factory_Adapter::unregister_proxy_factory (" << be_idt_nl + << "CORBA::Environment &" << be_idt_nl + << ")" << be_uidt << be_uidt_nl + << "{" << be_idt_nl + << "ACE_MT (ACE_GUARD_RETURN (" + << "ACE_Recursive_Thread_Mutex, ace_mon," << be_idt_nl + << "this->lock_, 0));" <<be_uidt_nl + << "if (" + << "this->delete_proxy_factory_ == 0 && this->proxy_factory_ != 0)" << be_idt_nl + << "{" << be_idt_nl + << "// Its necessary to set <delete_proxy_factory_> to 1 to make sure that it" <<be_nl + << "// doesnt get into an infinite loop in <unregister_proxy_factory> as it is "<<be_nl + << "// invoked in the destructor of the class too."<<be_nl + << "this->delete_proxy_factory_ = 1;" << be_nl + << "delete " + << "this->proxy_factory_;" << be_nl + << "this->proxy_factory_ = 0;" << be_uidt_nl + << "}" << be_uidt<<be_uidt_nl + << "return 0;" << be_uidt << be_uidt_nl + << "}\n\n"; + + os->indent (); + *os << node->full_name () << "_ptr" << be_nl; + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_"<< node->flat_name () + << "_Proxy_Factory_Adapter::create_proxy ("<< be_idt_nl + << node->full_name () << "_ptr proxy," << be_nl + << "CORBA::Environment &" << be_idt_nl + << ")" << be_uidt << be_uidt << be_uidt_nl + << "{" << be_idt_nl + << "ACE_MT (ACE_GUARD_RETURN (" + << "ACE_Recursive_Thread_Mutex, ace_mon," << be_idt_nl + << "this->lock_, 0));" <<be_uidt_nl + << "// Verify that an <proxy_factory_> is available else make one."<<be_nl + << "if (" + <<"this->proxy_factory_ == 0)" << be_idt_nl + << "ACE_NEW_RETURN (" + << "this->proxy_factory_," << be_idt <<be_idt_nl + << "TAO_" << node->flat_name () + << "_Default_Proxy_Factory (1), "<< be_nl + << " 0);" << be_uidt_nl << be_uidt_nl << be_uidt_nl + << "return " + << "this->proxy_factory_->create_proxy (proxy);" + << be_uidt << be_uidt_nl + << "}\n\n"; + + os->indent (); + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + + *os << "TAO_" << node->flat_name () << "_Smart_Proxy_Base::"; + *os << "TAO_" + << node->flat_name () << "_Smart_Proxy_Base (" + << node->full_name () << "_ptr proxy)" << be_nl + << ": base_proxy_ (proxy)" << be_nl + << "{" << be_nl + << "}\n\n"; + + if (this->visit_scope (node) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_interface_smart_proxy_cs::" + "visit_scope - " + "codegen for scope failed\n"), + -1); + } + + os->indent (); + *os << "#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) || \\" + << be_idt_nl<<"defined (ACE_HAS_GNU_REPO)"<<be_uidt_nl + << "template class ACE_Singleton<"; + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + *os <<"TAO_" <<node->flat_name () + << "_Proxy_Factory_Adapter, ACE_SYNCH_RECURSIVE_MUTEX >;"<<be_nl + << "#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)" + << be_nl + << "#pragma instantiate ACE_Singleton<"; + *os << scope->full_name (); + + // Only if there exists any nesting "::" is needed! + if (node->is_nested ()) + *os << "::"; + *os << "TAO_"<<node->flat_name () + << "_Proxy_Factory_Adapter, ACE_SYNCH_RECURSIVE_MUTEX>"<<be_nl + << "#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */"<<be_nl<<be_nl; + + return 0; +} diff --git a/TAO/TAO_IDL/be/be_visitor_operation.cpp b/TAO/TAO_IDL/be/be_visitor_operation.cpp index 50825a92604..b388271bb7b 100644 --- a/TAO/TAO_IDL/be/be_visitor_operation.cpp +++ b/TAO/TAO_IDL/be/be_visitor_operation.cpp @@ -61,5 +61,10 @@ #include "be_visitor_operation/ami_handler_reply_stub_operation_ch.cpp" #include "be_visitor_operation/ami_handler_reply_stub_operation_cs.cpp" #include "be_visitor_operation/ami_exception_holder_operation_cs.cpp" +#include "be_visitor_operation/smart_proxy_ch.cpp" +#include "be_visitor_operation/smart_proxy_cs.cpp" + + + ACE_RCSID(be, be_visitor_operation, "$Id$") |