summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_interface.cpp
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-01-18 01:35:03 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-01-18 01:35:03 +0000
commit9f32b95f894df9dc3c9529c31a79171d3b9a4ab5 (patch)
tree62e542486fbfd965689d7e7fb99e542401e51c64 /TAO/TAO_IDL/be/be_interface.cpp
parentaed5289b07ecba330d6bdb9b4cb278f71e332450 (diff)
downloadATCD-9f32b95f894df9dc3c9529c31a79171d3b9a4ab5.tar.gz
ChangeLogTag:Sat Jan 17 19:27:12 1998 <coryan@MILONGA>
Diffstat (limited to 'TAO/TAO_IDL/be/be_interface.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_interface.cpp67
1 files changed, 46 insertions, 21 deletions
diff --git a/TAO/TAO_IDL/be/be_interface.cpp b/TAO/TAO_IDL/be/be_interface.cpp
index 531df77cf60..bc065df3d7c 100644
--- a/TAO/TAO_IDL/be/be_interface.cpp
+++ b/TAO/TAO_IDL/be/be_interface.cpp
@@ -690,10 +690,7 @@ int be_interface::gen_server_header (void)
{
*sh << ", public virtual ";
intf = be_interface::narrow_from_decl (inherits ()[i]);
- *sh << intf->relative_skel_name (this->full_skel_name ()); // dump
- // the
- // scoped
- // name
+ *sh << intf->relative_skel_name (this->full_skel_name ());
} // end of for loop
}
else
@@ -711,6 +708,13 @@ int be_interface::gen_server_header (void)
*sh << "public:\n";
sh->incr_indent ();
*sh << "virtual ~" << namebuf << " (void);\n";
+
+ sh->indent ();
+ *sh << "virtual CORBA::Boolean _is_a (" << be_idt << be_idt_nl
+ << "const char* logical_type_id," << be_nl
+ << "CORBA::Environment &_tao_environment" << be_uidt
+ << ");\n" << be_uidt;
+
// generate code for elements in the scope (e.g., operations)
if (be_scope::gen_server_header () == -1)
{
@@ -813,39 +817,60 @@ int be_interface::gen_server_skeletons (void)
// generate code for the _is_a skeleton
ss->indent ();
- *ss << "void " << this->full_skel_name () <<
- "::_is_a_skel (CORBA::ServerRequest &req, " <<
- "void * /* obj */, void * /*context*/, CORBA::Environment &env)" << nl;
+ *ss << "void " << this->full_skel_name ()
+ << "::_is_a_skel (" << be_idt << be_idt_nl
+ << "CORBA::ServerRequest &req, " << be_nl
+ << "void * _tao_object_reference," << be_nl
+ << "void * /*context*/," << be_nl
+ << "CORBA::Environment &_tao_environment" << be_uidt_nl
+ << ")" << be_uidt_nl;
+
*ss << "{\n";
ss->incr_indent ();
*ss << "CORBA::NVList_ptr nvlist;" << nl;
*ss << "CORBA::NamedValue_ptr nv;" << nl;
*ss << "CORBA::Any temp_value (CORBA::_tc_string);" << nl;
*ss << "CORBA::Any *any;" << nl;
- *ss << "CORBA::Boolean *retval;" << nl;
+ *ss << "CORBA::Boolean *retval = new CORBA::Boolean;" << nl;
*ss << "CORBA::String value;" << nl;
*ss << nl;
*ss << "req.orb()->create_list (0, nvlist);" << nl;
*ss << "nv = nvlist->add_value (0, temp_value, CORBA::ARG_IN, env);" << nl;
*ss << "req.params (nvlist, env); // parse the args" << nl;
- *ss << "if (env.exception () != 0) return;" << nl;
+ *ss << "if (_tao_environment.exception () != 0) return;" << nl;
*ss << "value = *(CORBA::String *)nv->value ()->value ();" << nl;
- *ss << "if (\n";
- ss->incr_indent (0);
+
+ *ss << this->full_skel_name () << "_ptr \t impl = ("
+ << this->full_skel_name () << "_ptr) _tao_object_reference;"
+ << nl;
+
+ *ss << "*retval = impl->_is_a (value, _tao_environment);" << be_nl
+ << "if (_tao_environment.exception () != 0) return;" << be_nl;
+ *ss << "any = new CORBA::Any (CORBA::_tc_boolean, "
+ << "retval, CORBA::B_TRUE);" << nl;
+ *ss << "req.result (any, env);\n";
+ ss->decr_indent ();
+ *ss << "}\n\n";
+
+ ss->indent ();
+ *ss << "CORBA::Boolean " << this->full_skel_name ()
+ << "::_is_a (" << be_idt << be_idt_nl
+ << "const char* value," << be_nl
+ << "CORBA::Environment &_tao_environment" << be_uidt_nl
+ << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "if (\n" << be_idt;
if (this->traverse_inheritance_graph (be_interface::is_a_helper, ss) == -1)
{
+ return -1;
}
+
ss->indent ();
- *ss << "(!ACE_OS::strcmp ((char *)value, CORBA::_tc_Object->id (env))))\n";
- *ss << "\tretval = new CORBA::Boolean (CORBA::B_TRUE);\n";
- ss->decr_indent ();
- *ss << "else" << nl;
- *ss << "\tretval = new CORBA::Boolean (CORBA::B_FALSE);" << nl;
- *ss << "any = new CORBA::Any (CORBA::_tc_boolean, retval, CORBA::B_TRUE);" <<
- nl;
- *ss << "req.result (any, env);\n";
- ss->decr_indent ();
- *ss << "}\n\n";
+ *ss << "(!ACE_OS::strcmp ((char *)value, CORBA::_tc_Object->id (env))))"
+ << be_idt_nl << "return CORBA::B_TRUE;" << be_uidt_nl
+ << "else" << be_idt_nl
+ << "return CORBA::B_TRUE;" << be_uidt << be_uidt << be_uidt_nl
+ << "}\n\n";
// now the dispatch method
ss->indent ();