diff options
author | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-01-06 22:36:55 +0000 |
---|---|---|
committer | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-01-06 22:36:55 +0000 |
commit | 7f2f1bff2b6f40cc646074646bbb82c59aaf0d26 (patch) | |
tree | 47964c3b209979baa5fa078566d738c9a5a55b98 /TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp | |
parent | 2cfbfd8012d736491d9b559c9d9cd49f02e08ec6 (diff) | |
download | ATCD-7f2f1bff2b6f40cc646074646bbb82c59aaf0d26.tar.gz |
This commit was manufactured by cvs2svn to create tag 'ACE-4_6_11'.ACE-4_6_11
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp | 510 |
1 files changed, 0 insertions, 510 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp b/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp deleted file mode 100644 index 754d5106682..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp +++ /dev/null @@ -1,510 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// array_ch.cpp -// -// = DESCRIPTION -// Visitor for Array code generation in client header -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_array.h" - -ACE_RCSID(be_visitor_array, array_ch, "$Id$") - - -// ************************************************************************ -// visitor for array declaration in client header -// ************************************************************************ - -be_visitor_array_ch::be_visitor_array_ch (be_visitor_context *ctx) - : be_visitor_array (ctx) -{ -} - -be_visitor_array_ch::~be_visitor_array_ch (void) -{ -} - -int be_visitor_array_ch::visit_array (be_array *node) -{ - TAO_OutStream *os = this->ctx_->stream (); // get output stream - be_type *bt; // base type - be_decl *scope = this->ctx_->scope (); // scope in which it is used - - // nothing to do if we are imported or code is already generated - if (node->imported () || (node->cli_hdr_gen ())) - return 0; - - this->ctx_->node (node); // save the array node - - // retrieve the type - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "Bad base type\n"), - -1); - } - - // generate the ifdefined macro - os->gen_ifdef_macro (node->flatname ()); - - os->indent (); - *os << "typedef "; - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "base type decl failed\n"), - -1); - } - *os << " "; - if (!this->ctx_->tdef ()) - { - // we are dealing with an anonymous array case. Generate a typedef with - // an _ prepended to the name - *os << "_"; - } - *os << node->local_name (); - - if (node->gen_dimensions (os) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "gen dimensions failed\n"), - -1); - } - *os << ";" << be_nl; - - // now define the slice type and other required operations - *os << "typedef "; - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "base type decl failed\n"), - -1); - } - *os << " "; - if (!this->ctx_->tdef ()) - { - // we are dealing with an anonymous array case. Generate a typedef with - // an _ prepended to the name - *os << "_"; - } - *os << node->local_name () << "_slice"; - if (node->gen_dimensions (os, 1) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "gen slice dimensions failed\n"), - -1); - } - *os << ";\n"; - - // typedef the _var, _out, and _forany types - if (this->gen_var_defn (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_argument - " - "var_defn failed\n"), - -1); - } - // a class is generated for an out defn only for a variable length struct - if (node->size_type () == be_decl::VARIABLE) - { - if (this->gen_out_defn (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_argument - " - "out_defn failed\n"), - -1); - } - } - else - { - // fixed size - os->indent (); - // if we are a typedefed array, we can use the TYPE name to define an - // _out type. However, for anonymous arrays that do not give rise to a - // new type, we use the base type for defining an out type - if (this->ctx_->tdef ()) - { - *os << "typedef " << node->local_name () << " " - << node->local_name () << "_out;\n"; - } - else - { - *os << "typedef "; - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "base type decl failed\n"), - -1); - } - *os << " _" << node->local_name () << "_out"; - if (node->gen_dimensions (os) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_array - " - "gen dimensions failed\n"), - -1); - } - *os << ";\n"; - } - } - - if (this->gen_forany_defn (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_array_ch::" - "visit_argument - " - "forany_defn failed\n"), - -1); - } - // the _alloc, _dup, copy, and free methods. If the node is nested, the - // methods become static - os->indent (); - char *storage_class = 0; - - if (node->is_nested ()) - { - if (scope->node_type () != AST_Decl::NT_module) - storage_class = "static "; - else - storage_class = "TAO_NAMESPACE_STORAGE_CLASS "; - } - else - storage_class = ""; - - if (this->ctx_->tdef ()) - { - // typedefed array - if (!node->is_nested ()) - *os << "ACE_INLINE "; - *os << storage_class << node->nested_type_name (scope, "_slice") << " *"; - *os << node->nested_type_name (scope, "_alloc") << " (void);" << be_nl; - if (!node->is_nested ()) - *os << "ACE_INLINE "; - *os << storage_class << "void " << node->nested_type_name (scope, "_free") << " ("; - *os << node->nested_type_name (scope, "_slice") << " *_tao_slice);" << be_nl; - *os << storage_class << node->nested_type_name (scope, "_slice") << " *"; - *os << node->nested_type_name (scope, "_dup") << " (const "; - *os << node->nested_type_name (scope, "_slice") << " *_tao_slice);" << be_nl; - *os << storage_class << "void " << node->nested_type_name (scope, "_copy") << " ("; - *os << node->nested_type_name (scope, "_slice") << " *_tao_to, const "; - *os << node->nested_type_name (scope, "_slice") << " *_tao_from);" << be_nl; - } - else - { - // anonymous array - if (!node->is_nested ()) - *os << "ACE_INLINE "; - *os << storage_class << node->nested_type_name (scope, "_slice", "_") << " *"; - *os << node->nested_type_name (scope, "_alloc", "_") << " (void);" << be_nl; - if (!node->is_nested ()) - *os << "ACE_INLINE "; - *os << storage_class << "void " - << node->nested_type_name (scope, "_free", "_") << " ("; - *os << node->nested_type_name (scope, "_slice", "_") << " *_tao_slice);" << be_nl; - *os << storage_class << node->nested_type_name (scope, "_slice", "_") << " *"; - *os << node->nested_type_name (scope, "_dup", "_") << " (const "; - *os << node->nested_type_name (scope, "_slice", "_") << " *_tao_slice);" << be_nl; - *os << storage_class << "void " - << node->nested_type_name (scope, "_copy", "_") << " ("; - *os << node->nested_type_name (scope, "_slice", "_") << " *_tao_to, const "; - *os << node->nested_type_name (scope, "_slice", "_") << " *_tao_from);" << be_nl; - } - - *os << "\n"; - -#if 0 - // Typecode for an anonymous array will not be required anywhere since we do - // not generate the Any operators for anonymous types - - // is this a typedefined array? if so, then let the typedef deal with - // generation of the typecode - if (!this->ctx_->tdef ()) - { - // by using a visitor to declare and define the TypeCode, we have the - // added advantage to conditionally not generate any code. This will be - // based on the command line options. This is still TO-DO - be_visitor_context ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_TYPECODE_DECL); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_array_ch::" - "visit_array - " - "TypeCode declaration failed\n" - ), -1); - } - delete visitor; - } -#endif /* 0 */ - - // generate the endif macro - os->gen_endif (); - - node->cli_hdr_gen (1); - return 0; -} - -// generate the var defn -int -be_visitor_array_ch::gen_var_defn (be_array *node) -{ - TAO_OutStream *os = this->ctx_->stream (); // output stream - char namebuf [NAMEBUFSIZE]; // names - char varnamebuf [NAMEBUFSIZE]; // var names - - ACE_OS::memset (namebuf, '\0', NAMEBUFSIZE); - ACE_OS::memset (varnamebuf, '\0', NAMEBUFSIZE); - if (this->ctx_->tdef ()) - { - // typedefed array - ACE_OS::sprintf (namebuf, "%s", node->local_name ()->get_string ()); - ACE_OS::sprintf (varnamebuf, "%s_var", node->local_name ()->get_string ()); - } - else - { - ACE_OS::sprintf (namebuf, "_%s", node->local_name ()->get_string ()); - ACE_OS::sprintf (varnamebuf, "_%s_var", node->local_name ()->get_string ()); - } - - // generate the var definition (always in the client header). - // Depending upon the data type, there are some differences which we account - // for over here. - - os->indent (); // start with whatever was our current indent level - *os << "class " << idl_global->export_macro () - << " " << varnamebuf << be_nl; - *os << "{" << be_nl; - *os << "public:" << be_idt_nl; - // default constr - *os << varnamebuf << " (void); // default constructor" << be_nl; - // constr from pointer to slice - *os << varnamebuf << " (" << namebuf << "_slice *);" << be_nl; - // copy constructor - *os << varnamebuf << " (const " << varnamebuf << - " &); // copy constructor" << be_nl; - // destructor - *os << "~" << varnamebuf << " (void); // destructor" << be_nl; - *os << be_nl; - // assignment operator from a pointer to slice - *os << varnamebuf << " &operator= (" << namebuf << "_slice *);" - << be_nl; - // assignment from _var - *os << varnamebuf << " &operator= (const " << varnamebuf << " &);" << be_nl; - - // arrow operator - // nothing here - *os << be_nl; - - // other extra types (cast operators, [] operator, and others) - // overloaded [] operator - *os << namebuf << "_slice &operator[] (CORBA::ULong index);" - << be_nl; - *os << "const " << namebuf - << "_slice &operator[] (CORBA::ULong index) const;" << be_nl; - - // cast operators - *os << "operator " << namebuf << "_slice * const &() const;" - << be_nl; - *os << "operator " << namebuf << "_slice *&();" << be_nl; - - // in, inout, out and _retn - *os << "// in, inout, out, _retn " << be_nl; - *os << "const " << namebuf << "_slice *in (void) const;" << be_nl; - *os << namebuf << "_slice *inout (void);" << be_nl; - *os << namebuf << "_slice *&out (void);" << be_nl; - *os << namebuf << "_slice *_retn (void);" << be_nl; - - // generate an additional member function that returns the underlying pointer - *os << namebuf << "_slice *ptr (void) const;" << be_uidt_nl; - - // generate the private section - *os << "private:" << be_idt_nl; - *os << namebuf << "_slice *ptr_;" << be_uidt_nl; - *os << "};\n\n"; - - return 0; -} - -// generate the _out definition -int -be_visitor_array_ch::gen_out_defn (be_array *node) -{ - TAO_OutStream *os = this->ctx_->stream (); // output stream - char namebuf [NAMEBUFSIZE]; // to hold the name - char outnamebuf [NAMEBUFSIZE]; // to hold the _out name - - ACE_OS::memset (namebuf, '\0', NAMEBUFSIZE); - ACE_OS::memset (outnamebuf, '\0', NAMEBUFSIZE); - if (this->ctx_->tdef ()) - { - ACE_OS::sprintf (namebuf, "%s", node->local_name ()->get_string ()); - ACE_OS::sprintf (outnamebuf, "%s_out", node->local_name ()->get_string ()); - } - else - { - // anonymous array - ACE_OS::sprintf (namebuf, "_%s", node->local_name ()->get_string ()); - ACE_OS::sprintf (outnamebuf, "_%s_out", node->local_name ()->get_string ()); - } - - // generate the out definition (always in the client header) - os->indent (); // start with whatever was our current indent level - - *os << "class " << idl_global->export_macro () - << " " << outnamebuf << be_nl; - *os << "{" << be_nl; - *os << "public:" << be_idt_nl; - - // No default constructor - - // constructor from a pointer to slice - *os << outnamebuf << " (" << namebuf << "_slice *&);" << be_nl; - // constructor from a _var & - *os << outnamebuf << " (" << namebuf << "_var &);" << be_nl; - // constructor from a _out & - *os << outnamebuf << " (const " << outnamebuf << " &);" << be_nl; - // assignment operator from a _out & - *os << outnamebuf << " &operator= (const " << outnamebuf << " &);" << be_nl; - // assignment from slice * - *os << outnamebuf << " &operator= (" << namebuf << "_slice *);" - << be_nl; - // cast - *os << "operator " << namebuf << "_slice *&();" << be_nl; - // ptr fn - *os << namebuf << "_slice *&ptr (void);" << be_nl; - // operator [] instead of -> - *os << namebuf << "_slice &operator[] (CORBA::ULong index);" << be_nl; - *os << "const " << namebuf << "_slice &operator[] " - << "(CORBA::ULong index) const;" << be_uidt_nl; - - *os << "private:" << be_idt_nl; - *os << namebuf << "_slice *&ptr_;" << be_nl; - *os << "// assignment from T_var not allowed" << be_nl; - *os << "void operator= (const " << namebuf << "_var &);" << be_uidt_nl; - *os << "};\n\n"; - return 0; -} - -// generate the _var definition for ourself -int -be_visitor_array_ch::gen_forany_defn (be_array *node) -{ - TAO_OutStream *os = this->ctx_->stream (); // output stream - char namebuf [NAMEBUFSIZE]; // names - char foranyname [NAMEBUFSIZE]; // forany class names - - ACE_OS::memset (namebuf, '\0', NAMEBUFSIZE); - ACE_OS::memset (foranyname, '\0', NAMEBUFSIZE); - - if (this->ctx_->tdef ()) - { - ACE_OS::sprintf (namebuf, "%s", node->local_name ()->get_string ()); - ACE_OS::sprintf (foranyname, "%s_forany", node->local_name ()->get_string ()); - } - else - { - // anonymous array case - ACE_OS::sprintf (namebuf, "_%s", node->local_name ()->get_string ()); - ACE_OS::sprintf (foranyname, "_%s_forany", - node->local_name ()->get_string ()); - } - - // generate the forany definition (always in the client header). - // Depending upon the data type, there are some differences which we account - // for over here. - - os->indent (); // start with whatever was our current indent level - *os << "class " << idl_global->export_macro () - << " " << foranyname << be_nl; - *os << "{" << be_nl; - *os << "public:" << be_idt_nl; - - // default constr - *os << foranyname << " (void); // default constructor" << be_nl; - // constr from pointer to slice - *os << foranyname << " (" << namebuf << "_slice *, " - << "CORBA::Boolean nocopy=0);" << be_nl; - // copy constructor - *os << foranyname << " (const " << foranyname - << " &); // copy constructor" << be_nl; - // destructor - *os << "~" << foranyname << " (void); // destructor" << be_nl; - *os << be_nl; - // assignment operator from a pointer to slice - *os << foranyname << " &operator= (" << namebuf << "_slice *);" - << be_nl; - // assignment from _var - *os << foranyname << " &operator= (const " << foranyname << " &);" << be_nl; - - // arrow operator - // nothing here - *os << be_nl; - - // other extra types (cast operators, [] operator, and others) - // overloaded [] operator - *os << namebuf << "_slice &operator[] (CORBA::ULong index);" - << be_nl; - *os << "const " << namebuf - << "_slice &operator[] (CORBA::ULong index) const;" << be_nl; - - // cast operators - *os << "operator " << namebuf << "_slice * const &() const;" - << be_nl; - *os << "operator " << namebuf << "_slice *&();" << be_nl; - - // in, inout, out and _retn - *os << "// in, inout, out, _retn " << be_nl; - *os << "const " << namebuf << "_slice *in (void) const;" << be_nl; - *os << namebuf << "_slice *inout (void);" << be_nl; - *os << namebuf << "_slice *&out (void);" << be_nl; - *os << namebuf << "_slice *_retn (void);" << be_nl; - - // generate an additional member function that returns the underlying pointer - *os << namebuf << "_slice *ptr (void) const;" << be_nl; - - // additional member function that returns the NOCOPY flag - *os << "CORBA::Boolean nocopy (void) const;" << be_uidt_nl; - - // generate the private section - *os << "private:" << be_idt_nl; - *os << "/* friend class CORBA_Any; */" << be_nl; - *os << namebuf << "_slice *ptr_;" << be_nl; - *os << "CORBA::Boolean nocopy_;" << be_uidt_nl; - *os << "};\n\n"; - - return 0; -} - |