summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_valuetype_fwd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_valuetype_fwd.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_valuetype_fwd.cpp518
1 files changed, 4 insertions, 514 deletions
diff --git a/TAO/TAO_IDL/be/be_valuetype_fwd.cpp b/TAO/TAO_IDL/be/be_valuetype_fwd.cpp
index 894febbcccc..8c7452fb4ed 100644
--- a/TAO/TAO_IDL/be/be_valuetype_fwd.cpp
+++ b/TAO/TAO_IDL/be/be_valuetype_fwd.cpp
@@ -25,8 +25,6 @@
#include "idl_extern.h"
#include "be.h"
-#ifdef IDL_HAS_VALUETYPE
-
ACE_RCSID(be, be_valuetype_fwd, "$Id$")
be_valuetype_fwd::be_valuetype_fwd (void)
@@ -34,17 +32,13 @@ be_valuetype_fwd::be_valuetype_fwd (void)
}
be_valuetype_fwd::be_valuetype_fwd (AST_Interface *dummy,
- UTL_ScopedName *n,
- UTL_StrList *p)
+ UTL_ScopedName *n)
: be_interface_fwd (dummy,
- n,
- p),
+ n),
AST_InterfaceFwd (dummy,
- n,
- p),
+ n),
AST_Decl (AST_Decl::NT_interface_fwd,
- n,
- p)
+ n)
{
}
@@ -59,509 +53,6 @@ be_valuetype_fwd::set_abstract_valuetype (void)
this->full_definition ()->set_abstract_valuetype ();
}
-// Generate the var definition
-int
-be_valuetype_fwd::gen_var_defn (char *)
-{
- ACE_ASSERT (0);
- TAO_OutStream *ch = 0;
- TAO_NL nl;
- char namebuf [NAMEBUFSIZE];
-
- ACE_OS::memset (namebuf,
- '\0',
- NAMEBUFSIZE);
-
- ACE_OS::sprintf (namebuf,
- "%s_var",
- this->local_name ()->get_string ());
-
- ch = tao_cg->client_header ();
-
- // Generate the var definition (always in the client header).
- // Depending upon the data type, there are some differences which we account
- // for over here.
-
- // Start with whatever was our current indent level.
- ch->indent ();
- *ch << "class " << be_global->stub_export_macro ()
- << " " << namebuf << nl;
- *ch << "{" << nl;
- *ch << "public:\n";
- ch->incr_indent ();
-
- // Default constructor.
- *ch << namebuf << " (void); // default constructor" << nl;
- *ch << namebuf << " (" << this->local_name () << "_ptr);" << nl;
-
- // Copy constructor.
- *ch << namebuf << " (const " << namebuf <<
- " &); // copy constructor" << nl;
-
- // Destructor.
- *ch << "~" << namebuf << " (void); // destructor" << nl;
- *ch << nl;
-
- // Assignment operator from a pointer.
- *ch << namebuf << " &operator= (" << this->local_name ()
- << "_ptr);" << nl;
-
- // Assignment from _var.
- *ch << namebuf << " &operator= (const " << namebuf <<
- " &);" << nl;
-
- // Arrow operator.
- *ch << this->local_name () << "_ptr operator-> (void) const;" << nl;
-
- *ch << nl;
-
- // Other extra types (cast operators, [] operator, and others).
- *ch << "operator const " << this->local_name ()
- << "_ptr &() const;" << nl;
- *ch << "operator " << this->local_name () << "_ptr &();" << nl;
-
- *ch << "// in, inout, out, _retn " << nl;
- // The return types of in, out, inout, and _retn are based on the parameter
- // passing rules and the base type.
- *ch << this->local_name () << "_ptr in (void) const;" << nl;
- *ch << this->local_name () << "_ptr &inout (void);" << nl;
- *ch << this->local_name () << "_ptr &out (void);" << nl;
- *ch << this->local_name () << "_ptr _retn (void);" << nl;
-
- // Generate an additional member function that returns
- // the underlying pointer.
- *ch << this->local_name () << "_ptr ptr (void) const;\n";
-
- *ch << "\n";
- ch->decr_indent ();
-
- // Private.
- *ch << "private:\n";
- ch->incr_indent ();
- *ch << this->local_name () << "_ptr ptr_;\n";
-
- ch->decr_indent ();
- *ch << "};\n\n";
-
- return 0;
-}
-
-// Implementation of the _var class. All of these get generated in the inline
-// file.
-int
-be_valuetype_fwd::gen_var_impl (char *,
- char *)
-{
- ACE_ASSERT (0);
- TAO_OutStream *ci = 0;
- TAO_NL nl;
-
- // To hold the full and local _var names.
- char fname [NAMEBUFSIZE];
- char lname [NAMEBUFSIZE];
-
- ACE_OS::memset (fname,
- '\0',
- NAMEBUFSIZE);
-
- ACE_OS::sprintf (fname,
- "%s_var",
- this->full_name ());
-
- ACE_OS::memset (lname,
- '\0',
- NAMEBUFSIZE);
-
- ACE_OS::sprintf (lname,
- "%s_var",
- this->local_name ()->get_string ());
-
- ci = tao_cg->client_inline ();
-
- // Generate the var implementation in the inline file
- // Depending upon the data type, there are some differences which we account
- // for over here.
-
- // Start with whatever was our current indent level.
- ci->indent ();
-
- *ci << "// *************************************************************"
- << nl;
- *ci << "// Inline operations for class " << fname << nl;
- *ci << "// *************************************************************\n\n";
-
- // Default constructor.
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::" << lname
- << " (void) // default constructor" << nl;
- *ci << " " << ": ptr_ (" << this->name () << "::_nil ())" << nl;
- *ci << "{}\n\n";
-
- // Constructor from a _ptr.
- ci->indent ();
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::" << lname << " (" << this->name ()
- << "_ptr p)" << nl;
- *ci << " : ptr_ (p)" << nl;
- *ci << "{}\n\n";
-
- // The additional ptr () member function. This member function must be
- // defined before the remaining member functions including the copy
- // constructor because this inline function is used elsewhere. Hence to make
- // inlining of this function possible, we must define it before its use.
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr " << nl;
- *ci << fname << "::ptr (void) const" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Copy constructor.
- ci->indent ();
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::" << lname << " (const " << fname
- << " &p) // copy constructor" << nl;
- *ci << " : ptr_ (" << this->name () << "::_duplicate (p.ptr ()))" << nl;
- *ci << "{}\n\n";
-
- // Destructor.
- ci->indent ();
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::~" << lname << " (void) // destructor" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "CORBA::release (this->ptr_);\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Assignment operator.
- ci->indent ();
- *ci << "ACE_INLINE " << fname << " &" << nl;
- *ci << fname << "::operator= (" << this->name ()
- << "_ptr p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "CORBA::release (this->ptr_);" << nl;
- *ci << "this->ptr_ = p;" << nl;
- *ci << "return *this;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Assignment operator from _var.
- ci->indent ();
- *ci << "ACE_INLINE " << fname << " &" << nl;
- *ci << fname << "::operator= (const " << fname
- << " &p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "if (this != &p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "CORBA::release (this->ptr_);" << nl;
- *ci << "this->ptr_ = " << name () << "::_duplicate (p.ptr ());\n";
- ci->decr_indent ();
- *ci << "}" << nl;
- *ci << "return *this;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Other extra methods - cast operator ().
- ci->indent ();
- *ci << "ACE_INLINE " << nl;
- *ci << fname << "::operator const " << this->name ()
- << "_ptr &() const // cast" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- ci->indent ();
- *ci << "ACE_INLINE " << nl;
- *ci << fname << "::operator " << this->name ()
- << "_ptr &() // cast " << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // operator->
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr " << nl;
- *ci << fname << "::operator-> (void) const" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // in, inout, out, and _retn.
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr" << nl;
- *ci << fname << "::in (void) const" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr &" << nl;
- *ci << fname << "::inout (void)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr &" << nl;
- *ci << fname << "::out (void)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "CORBA::release (this->ptr_);" << nl;
- *ci << "this->ptr_ = " << this->name () << "::_nil ();" << nl;
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr " << nl;
- *ci << fname << "::_retn (void)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "// yield ownership of managed obj reference" << nl;
- *ci << this->name () << "_ptr val = this->ptr_;" << nl;
- *ci << "this->ptr_ = " << this->name () << "::_nil ();" << nl;
- *ci << "return val;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- return 0;
-}
-
-// Generate the _out definition.
-int
-be_valuetype_fwd::gen_out_defn (char *)
-{
- ACE_ASSERT (0);
- TAO_OutStream *ch = 0;
- TAO_NL nl;
- char namebuf [NAMEBUFSIZE];
-
- ACE_OS::memset (namebuf,
- '\0',
- NAMEBUFSIZE);
-
- ACE_OS::sprintf (namebuf,
- "%s_out",
- this->local_name ()->get_string ());
-
- ch = tao_cg->client_header ();
-
- // Generate the out definition (always in the client header).
-
- // Start with whatever was our current indent level.
- ch->indent ();
-
- *ch << "class " << be_global->stub_export_macro ()
- << " " << namebuf << nl;
- *ch << "{" << nl;
- *ch << "public:\n";
- ch->incr_indent ();
-
- // No default constructor.
-
- // Constructor from a pointer.
- *ch << namebuf << " (" << this->local_name () << "_ptr &);" << nl;
-
- // Constructor from a _var &.
- *ch << namebuf << " (" << this->local_name () << "_var &);" << nl;
-
- // Constructor from a _out &.
- *ch << namebuf << " (const " << namebuf << " &);" << nl;
-
- // Assignment operator from a _out &.
- *ch << namebuf << " &operator= (const " << namebuf << " &);" << nl;
-
- // Assignment operator from a pointer &, cast operator, ptr fn, operator
- // -> and any other extra operators.
- // Only valuetype allows assignment from var &.
- *ch << namebuf << " &operator= (const " << this->local_name ()
- << "_var &);" << nl;
- *ch << namebuf << " &operator= (" << this->local_name ()
- << "_ptr);" << nl;
-
- // Cast.
- *ch << "operator " << this->local_name () << "_ptr &();" << nl;
-
- // ptr function.
- *ch << this->local_name () << "_ptr &ptr (void);" << nl;
-
- // operator ->
- *ch << this->local_name () << "_ptr operator-> (void);" << nl;
-
- *ch << "\n";
- ch->decr_indent ();
- *ch << "private:\n";
- ch->incr_indent ();
- *ch << this->local_name () << "_ptr &ptr_;\n";
-
- ch->decr_indent ();
- *ch << "};" << be_nl << be_nl;
-
- return 0;
-}
-
-int
-be_valuetype_fwd::gen_out_impl (char *,
- char *)
-{
- ACE_ASSERT (0);
- TAO_OutStream *ci = 0;
- TAO_NL nl;
-
- // To hold the full and local _out names.
- char fname [NAMEBUFSIZE];
- char lname [NAMEBUFSIZE];
-
- ACE_OS::memset (fname,
- '\0',
- NAMEBUFSIZE);
-
- ACE_OS::sprintf (fname,
- "%s_out",
- this->full_name ());
-
- ACE_OS::memset (lname,
- '\0',
- NAMEBUFSIZE);
-
- ACE_OS::sprintf (lname,
- "%s_out",
- this->local_name ()->get_string ());
-
- ci = tao_cg->client_inline ();
-
- // Generate the var implementation in the inline file
- // Depending upon the data type, there are some differences which we account
- // for over here.
-
- // Start with whatever was our current indent level.
- ci->indent ();
-
- *ci << "// *************************************************************"
- << nl;
- *ci << "// Inline operations for class " << fname << nl;
- *ci << "// *************************************************************\n\n";
-
- // Constructor from a _ptr.
- ci->indent ();
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::" << lname << " (" << this->name ()
- << "_ptr &p)" << nl;
- *ci << " : ptr_ (p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "this->ptr_ = " << this->name () << "::_nil ();\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Constructor from _var &.
- ci->indent ();
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::" << lname << " (" << this->name ()
- << "_var &p) // constructor from _var" << nl;
- *ci << " : ptr_ (p.out ())" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "CORBA::release (this->ptr_);" << nl;
- *ci << "this->ptr_ = " << this->name () << "::_nil ();\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Copy constructor.
- ci->indent ();
- *ci << "ACE_INLINE" << nl;
- *ci << fname << "::" << lname << " (const " << fname
- << " &p) // copy constructor" << nl;
- *ci << " : ptr_ (ACE_const_cast (" << fname
- << "&,p).ptr_)" << nl;
- *ci << "{}\n\n";
-
- // Assignment operator from _out &.
- ci->indent ();
- *ci << "ACE_INLINE " << fname << " &" << nl;
- *ci << fname << "::operator= (const " << fname
- << " &p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "this->ptr_ = ACE_const_cast (" << fname << "&,p).ptr_;" << nl;
- *ci << "return *this;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Assignment operator from _var.
- ci->indent ();
- *ci << "ACE_INLINE " << fname << " &" << nl;
- *ci << fname << "::operator= (const " << this->name ()
- << "_var &p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "this->ptr_ = " << this->name () << "::_duplicate (p.ptr ());" << nl;
- *ci << "return *this;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Assignment operator from _ptr.
- ci->indent ();
- *ci << "ACE_INLINE " << fname << " &" << nl;
- *ci << fname << "::operator= (" << this->name ()
- << "_ptr p)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "this->ptr_ = p;" << nl;
- *ci << "return *this;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // Other extra methods - cast operator ().
- ci->indent ();
- *ci << "ACE_INLINE " << nl;
- *ci << fname << "::operator " << this->name ()
- << "_ptr &() // cast" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // ptr function.
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr &" << nl;
- *ci << fname << "::ptr (void) // ptr" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- // operator->
- ci->indent ();
- *ci << "ACE_INLINE " << this->name () << "_ptr " << nl;
- *ci << fname << "::operator-> (void)" << nl;
- *ci << "{\n";
- ci->incr_indent ();
- *ci << "return this->ptr_;\n";
- ci->decr_indent ();
- *ci << "}\n\n";
-
- return 0;
-}
-
int
be_valuetype_fwd::accept (be_visitor *visitor)
{
@@ -572,4 +63,3 @@ be_valuetype_fwd::accept (be_visitor *visitor)
IMPL_NARROW_METHODS1 (be_valuetype_fwd, be_interface_fwd)
IMPL_NARROW_FROM_DECL (be_valuetype_fwd)
-#endif /* IDL_HAS_VALUETYPE */