summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-11-19 23:52:49 +0000
committerkirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-11-19 23:52:49 +0000
commit8d421a2c7318e9742bb189f6828c42e1d2758de7 (patch)
tree3d259bd9b8bf8f0e739916ae8e69e56cd1391e10
parent5d2c27290fba88621025cd8658686910040330b1 (diff)
downloadATCD-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.cpp15
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface.cpp3
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/smart_proxy_cs.cpp271
-rw-r--r--TAO/TAO_IDL/be/be_visitor_operation.cpp5
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$")