diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-05-06 18:24:48 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-05-06 18:24:48 +0000 |
commit | beb659d170f11599dff5d6909454a2b319649f66 (patch) | |
tree | fdc6756cd69e04ed291adfed799ffa0e5cd99fc9 /TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp | |
parent | e5fcba7c88779c95ff864111bf5a54bbfb4028f5 (diff) | |
download | ATCD-beb659d170f11599dff5d6909454a2b319649f66.tar.gz |
ChangeLogTag:Thu May 6 12:11:22 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp new file mode 100644 index 00000000000..368a53e1e71 --- /dev/null +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp @@ -0,0 +1,133 @@ +// +// $Id$ +// + +// ============================================================================ +// +// = LIBRARY +// TAO IDL +// +// = FILENAME +// valuetype_ci.cpp +// +// = DESCRIPTION +// Visitor generating code for Valuetypes in the client inline file +// +// = AUTHOR +// Torsten Kuepper <kuepper2@lfa.uni-wuppertal.de> +// based on code from Aniruddha Gokhale +// +// ============================================================================ + +#include "idl.h" +#include "idl_extern.h" +#include "be.h" + +#include "be_visitor_valuetype.h" + +ACE_RCSID(be_visitor_valuetype, valuetype_ci, "$Id$") + + +// ************************************************** +// Valuetype visitor for client inline +// ************************************************** +be_visitor_valuetype_ci::be_visitor_valuetype_ci (be_visitor_context *ctx) + : be_visitor_valuetype (ctx), + opt_accessor_ (0) +{ +} + +be_visitor_valuetype_ci::~be_visitor_valuetype_ci (void) +{ +} + +int +be_visitor_valuetype_ci::visit_valuetype (be_valuetype *node) +{ + TAO_OutStream *os; // output stream + + if (node->cli_inline_gen () || node->imported ()) + return 0; + + // need to access it in visit_field () + if (node->opt_accessor ()) + this->opt_accessor_ = 1; + + os = this->ctx_->stream (); + + os->indent (); // start from the current indentation level + + // generate the constructors and destructor + *os << "ACE_INLINE" << be_nl; + *os << node->name () << "::" << node->local_name () << + " () // default constructor" << be_nl; + *os << "{}" << be_nl << be_nl; + + *os << "ACE_INLINE" << be_nl; + *os << node->name () << "::~" << node->local_name () << + " () // destructor" << be_nl; + *os << "{}\n" << be_nl; + + *os << "ACE_INLINE const char* " << be_nl + << node->name() << "::_tao_obv_static_repository_id ()" << be_nl + << "{" << be_idt_nl + << "return \"" << node->repoID () << "\";" << be_uidt_nl + << "}\n\n"; + + // generate the ifdefined macro for the _var type + os->gen_ifdef_macro (node->flatname (), "_var"); + if (node->gen_var_impl () == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_valuetype_ci::" + "visit_valuetype - " + "codegen for _var failed\n"), -1); + } + os->gen_endif (); + + // generate the ifdefined macro for the _out type + os->gen_ifdef_macro (node->flatname (), "_out"); + if (node->gen_out_impl () == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_valuetype_ci::" + "visit_valuetype - " + "codegen for _out failed\n"), -1); + } + os->gen_endif (); + + // generate inline methods for elements of our scope + if (this->visit_scope (node) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_valuetype_ci::" + "visit_valuetype - " + "codegen for scope failed\n"), -1); + } + + return 0; +} + + +int +be_visitor_valuetype_ci::visit_field (be_field *node) +{ + if (opt_accessor_) + { + be_visitor_context *ctx = new be_visitor_context (*this->ctx_); + be_visitor_valuetype_field_cs *visitor = + new be_visitor_valuetype_field_cs (ctx); + visitor->in_obv_space_ = 0; + visitor->setenclosings ("ACE_INLINE "); + if (visitor->visit_field (node) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_valuetype_ci::" + "visit_field - " + "visit_field failed\n" + ), -1); + } + delete visitor; + } + return 0; +} |