diff options
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_sequence')
16 files changed, 0 insertions, 4312 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp deleted file mode 100644 index 622c5a566ba..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_ch.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// any_op_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Any operators for the Sequence -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, any_op_ch, "$Id$") - - -// *************************************************************************** -// Sequence visitor for generating Any operator declarations in the client header -// *************************************************************************** - -be_visitor_sequence_any_op_ch::be_visitor_sequence_any_op_ch -(be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_any_op_ch::~be_visitor_sequence_any_op_ch (void) -{ -} - -int -be_visitor_sequence_any_op_ch::visit_sequence (be_sequence *node) -{ - if (node->cli_hdr_any_op_gen () || node->imported ()) - return 0; - - TAO_OutStream *os = tao_cg->client_header (); - - // generate the Any <<= and >>= operators - os->indent (); - *os << "void " << idl_global->export_macro () - << " operator<<= (CORBA::Any &, const " << node->name () - << " &); // copying version" << be_nl; - *os << "void " << idl_global->export_macro () - << " operator<<= (CORBA::Any &, " << node->name () - << "*); // noncopying version" << be_nl; - *os << "CORBA::Boolean " << idl_global->export_macro () - << " operator>>= (const CORBA::Any &, " - << node->name () << " *&);\n"; - - node->cli_hdr_any_op_gen (1); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp deleted file mode 100644 index dbd0d07badf..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/any_op_cs.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// any_op_cs.cpp -// -// = DESCRIPTION -// Visitor generating code for Any operator for the Sequence node -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, any_op_cs, "$Id$") - - -// *************************************************************************** -// Sequence visitor for generating Any operator declarations in the client -// stubs file -// *************************************************************************** - -be_visitor_sequence_any_op_cs::be_visitor_sequence_any_op_cs -(be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_any_op_cs::~be_visitor_sequence_any_op_cs (void) -{ -} - -int -be_visitor_sequence_any_op_cs::visit_sequence (be_sequence *node) -{ - if (node->cli_stub_any_op_gen () || node->imported ()) - return 0; - - TAO_OutStream *os = tao_cg->client_stubs (); - - // Any <<= and >>= operators - os->indent (); - *os << "void operator<<= (" << be_idt << be_idt_nl - << "CORBA::Any &_tao_any," << be_nl - << "const " << node->name () << " &_tao_elem" << be_uidt_nl - << ") // copying" << be_uidt_nl - << "{" << be_idt_nl - << "CORBA::Environment _tao_env;" << be_nl - << "_tao_any.replace (" << node->tc_name () << ", new " - << node->name () << "(_tao_elem), 1, _tao_env);" - << " // copy the value" << be_uidt_nl - << "}\n" << be_nl; - - *os << "void operator<<= (CORBA::Any &_tao_any, " - << node->name () << " *_tao_elem) // non copying" << be_nl - << "{" << be_idt_nl - << "CORBA::Environment _tao_env;" << be_nl - << "_tao_any.replace (" << node->tc_name () << ", " - << "_tao_elem, 0, _tao_env);" << be_uidt_nl - << "}\n" << be_nl; - - *os << "CORBA::Boolean operator>>= (const CORBA::Any &_tao_any, " - << node->name () << " *&_tao_elem)" << be_nl - << "{" << be_idt_nl - << "CORBA::Environment _tao_env;" << be_nl - << "CORBA::TypeCode_var type = _tao_any.type ();" << be_nl - << "if (!type->equal (" << node->tc_name () - << ", _tao_env)) return 0; // not equal" << be_nl - << "if (_tao_any.any_owns_data ())" << be_nl - << "{" << be_idt_nl - << "ACE_NEW_RETURN (_tao_elem, " << node->name () << ", 0);" - << be_nl - << "TAO_InputCDR stream ((ACE_Message_Block *)_tao_any.value ());" - << be_nl - << "if (stream.decode (" << node->tc_name () - << ", _tao_elem, 0, _tao_env)" << be_nl - << " == CORBA::TypeCode::TRAVERSE_CONTINUE)" << be_nl - << "{" << be_idt_nl - << "((CORBA::Any *)&_tao_any)->replace (" - << node->tc_name () << ", _tao_elem, 1, _tao_env);" - << be_nl - << " return 1;" << be_uidt_nl - << "}" << be_nl - << "else" << be_nl // decode failed - << "{" << be_idt_nl - << "delete _tao_elem;" << be_nl - << "return 0;" << be_uidt_nl - << "}" << be_nl - << "return 0;" <<be_uidt_nl - << "}" << be_nl - << "else" << be_nl // else any does not own the data - << "{" << be_idt_nl - << "_tao_elem = (" << node->name () << " *)_tao_any.value ();" - << be_nl - << "return 1;" << be_uidt_nl - << "}" << be_uidt_nl - << "}\n\n"; - - - node->cli_stub_any_op_gen (1); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp deleted file mode 100644 index 5ffe0a8aced..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp +++ /dev/null @@ -1,154 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// buffer_type.cpp -// -// = DESCRIPTION -// Visitor generating code for the internal buffer type of the Sequence node -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, buffer_type, "$Id$") - - -// **************************************************************** -// We have to generate the buffer type in the constructor -// **************************************************************** - -be_visitor_sequence_buffer_type:: -be_visitor_sequence_buffer_type (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_buffer_type::~be_visitor_sequence_buffer_type (void) -{ -} - -// helper -int -be_visitor_sequence_buffer_type::visit_node (be_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - bt = this->ctx_->alias (); - else - bt = node; - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - *os << bt->nested_type_name (this->ctx_->scope ()); - else - *os << bt->name (); - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_predefined_type (be_predefined_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - if (node->pt () == AST_PredefinedType::PT_pseudo) - *os << node->name () << "_ptr"; - else - *os << node->name (); - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_sequence (be_sequence *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_interface (be_interface *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - *os << node->nested_type_name (this->ctx_->scope (), "_ptr"); - else - *os << node->name () << "_ptr"; - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_interface_fwd (be_interface_fwd *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH) - *os << node->nested_type_name (this->ctx_->scope (), "_ptr"); - else - *os << node->name () << "_ptr"; - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_string (be_string *) -{ - TAO_OutStream *os = this->ctx_->stream (); - *os << "char *"; - return 0; -} - -int -be_visitor_sequence_buffer_type::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_exception (be_exception *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_buffer_type::visit_typedef (be_typedef *node) -{ - this->ctx_->alias (node); // set the alias node - if (node->primitive_base_type ()->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_buffer_type::" - "visit_typedef - " - "accept on primitive type failed\n"), - -1); - } - this->ctx_->alias (0); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp deleted file mode 100644 index 11e3e211a36..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_ch.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// cdr_op_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for CDR operators for sequences. This uses -// compiled marshaling. -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, cdr_op_ch, "$Id$") - -// *************************************************************************** -// Sequence visitor for generating CDR operator declarations in the client header -// *************************************************************************** - -be_visitor_sequence_cdr_op_ch::be_visitor_sequence_cdr_op_ch -(be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_cdr_op_ch::~be_visitor_sequence_cdr_op_ch (void) -{ -} - -int -be_visitor_sequence_cdr_op_ch::visit_sequence (be_sequence *node) -{ - if (node->cli_hdr_cdr_op_gen () || node->imported ()) - return 0; - - TAO_OutStream *os = tao_cg->client_header (); - - // generate the CDR << and >> operator declarations - os->indent (); - *os << "CORBA::Boolean " << idl_global->export_macro () - << " operator<< (TAO_OutputCDR &, const " << node->name () - << " &); // " << be_nl; - *os << "CORBA::Boolean " << idl_global->export_macro () - << " operator>> (TAO_InputCDR &, " - << node->name () << " &);\n"; - - - node->cli_hdr_cdr_op_gen (1); - return 0; -} - diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp deleted file mode 100644 index 10d73d83b2d..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp +++ /dev/null @@ -1,530 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// cdr_op_cs.cpp -// -// = DESCRIPTION -// Visitor for code generation of Sequences for the CDR operators -// in the client stubs. -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, cdr_op_cs, "$Id$") - - -// *************************************************************************** -// Sequence visitor for generating CDR operator declarations in the client -// stubs file -// *************************************************************************** - -be_visitor_sequence_cdr_op_cs::be_visitor_sequence_cdr_op_cs -(be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_cdr_op_cs::~be_visitor_sequence_cdr_op_cs (void) -{ -} - -int -be_visitor_sequence_cdr_op_cs::visit_sequence (be_sequence *node) -{ - if (this->ctx_->alias ()) - { - // we are here because the base type of the sequence node is itself a sequence - // i.e., this is a case of sequence of sequence - return this->visit_node (node); - } - else - { - TAO_OutStream *os = tao_cg->client_stubs (); - be_type *bt; // base type of the sequence - - if (node->cli_stub_cdr_op_gen () || node->imported ()) - return 0; - - // retrieve the type - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_cdr_op_cs::" - "visit_sequence - " - "Bad base type\n"), - -1); - } - - // generate the CDR << and >> operator defns - - // save the sequence node for further use - this->ctx_->node (node); - - // set the sub state as generating code for the output operator - this->ctx_->sub_state (TAO_CodeGen::TAO_CDR_OUTPUT); - *os << "CORBA::Boolean operator<< (" << be_idt << be_idt_nl - << "TAO_OutputCDR &strm," << be_nl - << "const " << node->name () - << " &_tao_sequence" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - - // first encode the sequence length - *os << "if (strm << _tao_sequence.length ())" << be_nl - << "{" << be_idt_nl; - // now encode the sequence elements - *os << "// encode all elements" << be_nl; - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_cdr_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - *os << "}" << be_nl - << "return 0; // error" << be_uidt_nl - << "}\n\n"; - - // set the sub state as generating code for the input operator - os->indent (); - this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_INPUT); - *os << "CORBA::Boolean operator>> (TAO_InputCDR &strm, " - << node->name () << " &_tao_sequence)" << be_nl - << "{" << be_idt_nl; - // first retrieve the length and adjust the sequence length accordingly - *os << "CORBA::ULong _tao_seq_len;" << be_nl; - *os << "if (strm >> _tao_seq_len)" << be_nl - << "{" << be_idt_nl; - // now check if the length does not exceed the maximum. We do this only - // for bounded sequences - - AST_Expression *expr = node->max_size (); - // dimension value - if ((expr == NULL) || ((expr != NULL) && (expr->ev () == NULL))) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_sequence - " - "bad sequence dimension\n"), - -1); - } - if (expr->ev ()->et == AST_Expression::EV_ulong) - { - if (expr->ev ()->u.ulval > 0) - { - // we are dealing with a bounded sequence. Check if we are within - // bounds - *os << "if (_tao_seq_len <= _tao_sequence.maximum ())" << be_nl - << "{" << be_idt_nl; - } - } - else - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_sequence - " - "bad sequence dimension value\n"), - -1); - } - *os << "// set the length of the sequence" << be_nl - << "_tao_sequence.length (_tao_seq_len);" << be_nl; - *os << "// retrieve all the elements" << be_nl; - if (bt->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_cdr_op_cs::" - "visit_sequence - " - "Base type codegen failed\n"), - -1); - } - if (expr->ev ()->u.ulval > 0) - { - // we are dealing with a bounded sequence. - *os << "}" << be_uidt_nl; - } - *os << "}" << be_nl - << "return 0; // error" << be_uidt_nl - << "}\n\n"; - - node->cli_stub_cdr_op_gen (1); - } - return 0; -} - -// handle all the base types - -int -be_visitor_sequence_cdr_op_cs::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_interface (be_interface *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_interface_fwd (be_interface_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_predefined_type (be_predefined_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - switch (node->pt ()) - { - case AST_PredefinedType::PT_pseudo: - case AST_PredefinedType::PT_any: - // let the helper handle this - return this->visit_node (node); - case AST_PredefinedType::PT_void: - // error - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_predefined_type - " - "Bad primitive type\n" - ), -1); - default: - // all other primitive types. Handle them as shown below - break; - }; - - // we get here if the "type" of individual elements of the sequence is a - // primitive type. In this case, we treat the sequence as a single - // dimensional sequence (even of it was multi-dimensional), and pass - // the total length of the sequence as a cross product of the - // dimensions - - // grab the sequence node - be_sequence *sequence = this->ctx_->be_node_as_sequence (); - - if (!node) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_predefined_type - " - "bad sequence node\n"), - -1); - } - - // we generate optimized code based on an optimized interface available from - // the CDR class. These optimizations are applicable only to primitive - // types. - *os << " return strm."; - - // based on our substate, we may be reading from a stream or writing into a - // stream - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_CDR_INPUT: - *os << "read_"; - break; - case TAO_CodeGen::TAO_CDR_OUTPUT: - *os << "write_"; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_predefined_type - " - "bad sub state\n"), - -1); - } - - // determine what kind of sequence are we reading/writing - switch (node->pt ()) - { - case AST_PredefinedType::PT_long: - *os << "long_array"; - break; - case AST_PredefinedType::PT_ulong: - *os << "ulong_array"; - break; - case AST_PredefinedType::PT_short: - *os << "short_array"; - break; - case AST_PredefinedType::PT_ushort: - *os << "ushort_array"; - break; - case AST_PredefinedType::PT_octet: - *os << "octet_array"; - break; - case AST_PredefinedType::PT_char: - *os << "char_array"; - break; - case AST_PredefinedType::PT_wchar: - *os << "wchar_array"; - break; - case AST_PredefinedType::PT_float: - *os << "float_array"; - break; - case AST_PredefinedType::PT_double: - *os << "double_array"; - break; - case AST_PredefinedType::PT_longlong: - *os << "longlong_array"; - break; - case AST_PredefinedType::PT_ulonglong: - *os << "ulonglong_array"; - break; - case AST_PredefinedType::PT_longdouble: - *os << "longdouble_array"; - break; - case AST_PredefinedType::PT_boolean: - *os << "boolean_array"; - break; - default: - // error - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_predefined_type - " - "bad primitive type for optimized code gen\n"), - -1); - } - - // handle special case to avoid compiler errors - switch (node->pt ()) - { - case AST_PredefinedType::PT_char: - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_CDR_INPUT: - *os << " ((char *)_tao_sequence.get_buffer (), "; - break; - case TAO_CodeGen::TAO_CDR_OUTPUT: - *os << " ((const char *)_tao_sequence.get_buffer (), "; - break; - } - break; - default: - *os << " (_tao_sequence.get_buffer (), "; - break; - } - - *os << "_tao_sequence.length ());" << be_uidt_nl; - - return 0; -} - -int -be_visitor_sequence_cdr_op_cs::visit_string (be_string *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_cdr_op_cs::visit_typedef (be_typedef *node) -{ - this->ctx_->alias (node); // save the typedef node for use in code generation - // as we visit the base type - - // the node to be visited in the base primitve type that gets typedefed - be_type *bt = node->primitive_base_type (); - if (!bt || (bt->accept (this) == -1)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_typedef - " - "Bad primitive type\n" - ), -1); - } - - this->ctx_->alias (0); - return 0; -} - -// helper -int -be_visitor_sequence_cdr_op_cs::visit_node (be_type *bt) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_sequence *node = this->ctx_->be_node_as_sequence (); - - if (!node) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad sequence node\n"), - -1); - } - - // initialize a boolean variable - *os << "CORBA::Boolean _tao_marshal_flag = 1;" << be_nl; - - // we get here if the "type" of individual elements of the sequence is not a - // primitive type. In this case, we are left with no other alternative but to - // encode/decode element by element - - AST_Expression *expr = node->max_size (); - // dimension value - if ((expr == NULL) || ((expr != NULL) && (expr->ev () == NULL))) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad sequence dimension\n"), - -1); - } - if (expr->ev ()->et == AST_Expression::EV_ulong) - { - *os << "for (CORBA::ULong i = 0; i < _tao_sequence.length ()" - << " && _tao_marshal_flag; " - << "i++)" << be_idt_nl; - } - else - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad sequence dimension value\n"), - -1); - } - - // if the type was a string, an obj ref, or a pseudo-obj, we are dealing with - // a manager type and hence we must use the appropriate in () and out () - // methods. - // - - switch (this->ctx_->sub_state ()) - { - case TAO_CodeGen::TAO_CDR_INPUT: - *os << "_tao_marshal_flag = (strm >> "; - switch (bt->node_type ()) - { - case AST_Decl::NT_string: - { - be_string *str = be_string::narrow_from_decl (bt); - - if (!str) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad string node\n"), - -1); - } - if (str->max_size ()->ev ()->u.ulval == 0) - { - // unbounded - *os << "_tao_sequence[i].out ()"; - } - else - { - *os << "CORBA::Any::to_string (_tao_sequence[i].out (), " - << str->max_size ()->ev ()->u.ulval << ")"; - } - } - break; - case AST_Decl::NT_interface: - case AST_Decl::NT_interface_fwd: - *os << "_tao_sequence[i].out ()"; - break; - case AST_Decl::NT_pre_defined: - { - // we need to separately handle this case of pseudo objects because - // they have a _var type - be_predefined_type *pt = be_predefined_type::narrow_from_decl (bt); - if (!pt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad predefined type node\n"), - -1); - } - if (pt->pt () == AST_PredefinedType::PT_pseudo) - { - *os << "_tao_sequence[i].out ()"; - } - else - { - *os << "_tao_sequence[i]"; - } - } - break; - default: - *os << "_tao_sequence[i]"; - } - *os << ");"; - break; - case TAO_CodeGen::TAO_CDR_OUTPUT: - *os << "_tao_marshal_flag = (strm << _tao_sequence[i]"; - switch (bt->node_type ()) - { - case AST_Decl::NT_string: - case AST_Decl::NT_interface: - case AST_Decl::NT_interface_fwd: - *os << ".in ()"; - break; - case AST_Decl::NT_pre_defined: - { - be_predefined_type *pt = be_predefined_type::narrow_from_decl (bt); - if (!pt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad predefined type node\n"), - -1); - } - if (pt->pt () == AST_PredefinedType::PT_pseudo) - { - *os << ".in ()"; - } - } - } - *os << ");"; - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cdr_op_cs::" - "visit_node - " - "bad sub state\n"), - -1); - } - - *os << be_uidt_nl; - *os << "return _tao_marshal_flag;" << be_uidt_nl; - - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp deleted file mode 100644 index 3c477a033e5..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp +++ /dev/null @@ -1,244 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// elemtype.cpp -// -// = DESCRIPTION -// Visitor generating code for the element type for the Sequence -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, elemtype, "$Id$") - - -// *********************************************************** -// sequence element type visitor for return types of [] methods -// *********************************************************** - - -be_visitor_sequence_elemtype:: -be_visitor_sequence_elemtype (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_elemtype::~be_visitor_sequence_elemtype (void) -{ -} - -// helper -int -be_visitor_sequence_elemtype::visit_node (be_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - bt = this->ctx_->alias (); - else - bt = node; - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - *os << bt->nested_type_name (this->ctx_->scope ()) << " &"; - else - *os << bt->name () << " &"; - return 0; -} - -int -be_visitor_sequence_elemtype::visit_predefined_type (be_predefined_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - bt = this->ctx_->alias (); - else - bt = node; - - switch (node->pt ()) - { - case AST_PredefinedType::PT_pseudo: - // !! branching in either compile time template instantiation - // or manual template instatiation - os->gen_ifdef_AHETI(); - - if (this->ctx_->state() != TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - { - if (this->ctx_->scope()->fullname()) - *os << this->ctx_->scope()->fullname() << "::"; - } - - *os << "_TAO_Object_Manager_" - << this->ctx_->scope()->flatname() - << "_" - << bt->flatname (); - - os->gen_else_AHETI(); - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - { - *os << "TAO_Object_Manager<" - << bt->nested_type_name (this->ctx_->scope ()) << "> "; - } - else - *os << "TAO_Object_Manager<" << bt->name () << "> "; - - os->gen_endif_AHETI(); - break; - default: - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - *os << bt->nested_type_name (this->ctx_->scope ()) << " &"; - else - *os << bt->name () << " &"; - } - return 0; -} - -int -be_visitor_sequence_elemtype::visit_sequence (be_sequence *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_elemtype::visit_interface (be_interface *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - bt = this->ctx_->alias (); - else - bt = node; - - // !! branching in either compile time template instantiation - // or manual template instatiation - os->gen_ifdef_AHETI(); - - if (this->ctx_->state() != TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - { - if (this->ctx_->scope()->fullname()) - *os << this->ctx_->scope()->fullname() << "::"; - } - - *os << "_TAO_Object_Manager_" - << this->ctx_->scope()->flatname() - << "_" - << bt->flatname (); - - os->gen_else_AHETI(); - - *os << "TAO_Object_Manager<" - << bt->nested_type_name (this->ctx_->scope ()) << "> "; - - os->gen_endif_AHETI(); - - return 0; -} - -int -be_visitor_sequence_elemtype::visit_interface_fwd (be_interface_fwd *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - bt = this->ctx_->alias (); - else - bt = node; - - os->gen_ifdef_AHETI(); - - if (this->ctx_->state() != TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - { - if (this->ctx_->scope()->fullname()) - *os << this->ctx_->scope()->fullname() << "::"; - } - - *os << "_TAO_Object_Manager_" - << this->ctx_->scope()->flatname() - << "_" - << bt->flatname (); - - os->gen_else_AHETI(); - - *os << "TAO_Object_Manager<" - << bt->nested_type_name (this->ctx_->scope ()) << "> "; - - - os->gen_endif_AHETI(); - - return 0; -} - -int -be_visitor_sequence_elemtype::visit_string (be_string *) -{ - TAO_OutStream *os = this->ctx_->stream (); - - *os << "TAO_String_Manager "; - return 0; -} - -int -be_visitor_sequence_elemtype::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_elemtype::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_elemtype::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_elemtype::visit_exception (be_exception *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_elemtype::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_elemtype::visit_typedef (be_typedef *node) -{ - this->ctx_->alias (node); - if (node->primitive_base_type ()->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_elemtype::" - "visit_typedef - " - "accept on primitive type failed\n"), - -1); - } - this->ctx_->alias (0); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp deleted file mode 100644 index 006cbb8d25e..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp +++ /dev/null @@ -1,287 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// gen_bounded_obj_sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Michael Kircher -// -// ============================================================================ - -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, gen_bounded_obj_sequence_ch, "$Id$") - - -int -be_visitor_sequence_ch::gen_bounded_obj_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the class name - be_type *pt; // base types - - if (bt->node_type () == AST_Decl::NT_typedef) - { - // get the primitive base type of this typedef node - be_typedef *t = be_typedef::narrow_from_decl (bt); - pt = t->primitive_base_type (); - } - else - pt = bt; - - - const char * class_name = node->instance_name (); - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - this->gen_object_manager (node); - // Generate the code for the object manager - - const char * object_manager = node->object_manager_name (); - - os->gen_ifdef_macro (class_name); - - os->indent (); - - *os << "class " << class_name << " : public TAO_Bounded_Base_Sequence" << be_nl - << "{" << be_nl - << "public:" << be_idt_nl - << "// = Initialization and termination methods." << be_nl - << be_nl; - - // constructor - *os << class_name << " (void)" << be_idt_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () - << ", allocbuf (" << node->max_size () << "))" << be_uidt_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong length," << be_idt_nl; - // the accept is here the first time used and if an - // error occurs, it will occur here. Later no check - // for errors will be done. - if (pt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - *os <<"* *value," << be_nl - << "CORBA::Boolean release=0)" << be_uidt_nl - << "// Constructor from data." << be_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () << ", length, value, release)" << be_nl - << "{" << be_nl - << " this->_allocate_buffer (" << node->max_size () << ");" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (const " << class_name << " &rhs)" << be_nl - << "// Copy constructor." << be_idt_nl - << ": TAO_Bounded_Base_Sequence (rhs)" << be_uidt_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **tmp1 = allocbuf (" << node->max_size () << ");" << be_nl; - pt->accept(visitor); *os <<" ** const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << "** ACE_CAST_CONST, rhs.buffer_);" << be_nl - << "for (CORBA::ULong i = 0; i < rhs.length_; i++)" << be_idt_nl - << "tmp1[i] = "; pt->accept (visitor); *os << "::_duplicate (tmp2[i]);" << be_uidt_nl - << "this->buffer_ = tmp1;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // destructor - *os << "~" << class_name << " (void)" << be_nl - << "// destructor" << be_nl - << "{" << be_idt_nl - << "this->_deallocate_buffer ();" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator= - *os << class_name << " &operator= (const " << class_name << " &rhs)" << be_nl - << "// Assignment from another Bounded sequence." << be_nl - << "{" << be_idt_nl - << "if (this == &rhs)" << be_idt_nl - << "return *this;" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " **, this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (tmp[i]);" << be_nl - << "tmp[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << "}" << be_nl - << "// No need to reallocate the buffer since it is always of size" << be_nl - << "// " << node->max_size () << "" << be_nl - << "#if 0" << be_idt_nl - << "if (this->maximum_ < rhs.maximum_)" << be_nl - << "{" << be_idt_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << "}" << be_uidt_nl - << "#endif /* 0 */" << be_uidt_nl - << "}" << be_nl - << "else" << be_idt_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << be_nl - << "TAO_Bounded_Base_Sequence::operator= (rhs);" << be_nl - << be_nl; - pt->accept(visitor); *os <<" **tmp1 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " **, this->buffer_);" << be_nl; - pt->accept(visitor); *os <<" ** const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " ** ACE_CAST_CONST, rhs.buffer_);" << be_nl - << "for (CORBA::ULong i=0; i < rhs.length_; ++i)" << be_idt_nl - << "tmp1[i] = "; pt->accept (visitor); *os << "::_duplicate (tmp2[i]);" << be_uidt_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator[] - *os << object_manager << " operator[] (CORBA::ULong index) const // Read-write accessor." << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (index < this->maximum_);" << be_nl; - pt->accept(visitor); *os <<" **const tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " ** ACE_CAST_CONST, this->buffer_);" << be_nl - << "return " << object_manager << " (tmp + index, this->release_);" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocbuf - *os << "static "; pt->accept (visitor); *os << " **allocbuf (CORBA::ULong length) // Allocate storage for a sequence.." << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **buf;" << be_nl - << be_nl - << "ACE_NEW_RETURN (buf, "; pt->accept (visitor); *os << "*[" << node->max_size () << "], 0);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < " << node->max_size () << "; i++)" << be_idt_nl - << "buf[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << be_nl - << "return buf;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // freebuf - *os << "static void freebuf ("; pt->accept (visitor); *os << " **buffer)" << be_nl - << "{" << be_idt_nl - << "for (CORBA::ULong i = 0; i < " << node->max_size () << "; ++i)" << be_idt_nl - << "if (buffer[i] != "; pt->accept (visitor); *os << "::_nil ())" << be_nl - << "{" << be_idt_nl - << "CORBA::release (buffer[i]);" << be_nl - << "buffer[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << "}" << be_uidt_nl - << be_nl - << "delete[] buffer;" << be_uidt_nl - << "} " << be_nl - << be_nl; - - // allocate_buffer - *os << "// The Base_Sequence functions, please see tao/sequence.h" << be_nl - << "virtual void _allocate_buffer (CORBA::ULong length)" << be_nl - << "{" << be_idt_nl - << "// For this class memory is never reallocated so the implementation" << be_nl - << "// is *really* simple." << be_nl - << "this->buffer_ = allocbuf (length);" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // deallocate_buffer - *os << "virtual void _deallocate_buffer (void)" << be_nl - << "{" << be_idt_nl - << "if (this->buffer_ == 0 || this->release_ == 0)" << be_idt_nl - << "return;" << be_uidt_nl; - pt->accept(visitor); *os <<" **tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " **, this->buffer_);" << be_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = 0;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // _shrink_buffer - *os << "virtual void _shrink_buffer (CORBA::ULong nl, CORBA::ULong ol)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); - *os <<" **tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); - *os << " **, this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = nl; i < ol; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (tmp[i]);" << be_nl - << "tmp[i] = "; - pt->accept (visitor); - *os << "::_nil ();" << be_uidt_nl - << "}" << be_uidt_nl - << "}\n" << be_nl; - - if (pt->node_type () != AST_Decl::NT_pre_defined) - { - // Pseudo objects do not require this methods. - *os << "virtual void _downcast (" << be_idt << be_idt_nl - << "void* target," << be_nl - << "CORBA_Object *src," << be_nl - << "CORBA::Environment &_env = " << be_idt_nl - << "CORBA::Environment::default_environment ()" - << be_uidt << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - pt->accept (visitor); - *os << " **tmp = ACE_static_cast ("; - pt->accept (visitor); - *os << "**, target);" << be_nl - << "*tmp = "; - pt->accept (visitor); - *os << "::_narrow (src, _env);" << be_uidt_nl - << "}\n" << be_nl; - - *os << "virtual CORBA_Object* _upcast (void *src) const" << be_nl - << "{" << be_idt_nl; - pt->accept (visitor); - *os << " **tmp = ACE_static_cast ("; - pt->accept (visitor); - *os << "**, src);" << be_nl - << "return *tmp;" << be_uidt_nl - << "}" << be_nl; - } - *os << "};" << be_uidt_nl << "\n"; - - os->gen_endif (); - - - delete visitor; - return 0; -} - diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_sequence_ch.cpp deleted file mode 100644 index b19bb042e5f..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_sequence_ch.cpp +++ /dev/null @@ -1,272 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// gen_bounded_sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Michael Kircher -// -// ============================================================================ - -//#include "idl.h" -//#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, gen_bounded_sequence_ch, "$Id$") - - -int -be_visitor_sequence_ch::gen_bounded_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the class name - be_type *pt; // base types - - if (bt->node_type () == AST_Decl::NT_typedef) - { - // get the primitive base type of this typedef node - be_typedef *t = be_typedef::narrow_from_decl (bt); - pt = t->primitive_base_type (); - } - else - pt = bt; - - - const char * class_name = node->instance_name (); - - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - os->gen_ifdef_macro (class_name); - - os->indent (); - - *os << "class " << class_name << " : public TAO_Bounded_Base_Sequence" << be_nl - << "{" << be_nl - << "public:" << be_idt_nl - << "// = Initialization and termination methods." << be_nl - << be_nl; - - // Constructor - *os << class_name << " (void)" << be_nl - << "// Default constructor." << be_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () - << ", 0, allocbuf (" << node->max_size () << "), 0)" << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong length," << be_idt_nl; - pt->accept (visitor); *os <<" *data," << be_nl - << "CORBA::Boolean release=0)" << be_uidt_nl - << "// Constructor using the data and memory management flag." << be_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () << ", length, data, release)" << be_nl - << "{" << be_nl - << " this->_allocate_buffer (" << node->max_size () << ");" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (const " << class_name << " &rhs)" << be_nl - << "// Copy constructor." << be_idt_nl - << ": TAO_Bounded_Base_Sequence (rhs)" << be_uidt_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" *tmp1 = allocbuf (" << node->max_size () << ");" << be_nl - << be_nl; - pt->accept(visitor); *os <<" * const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " * ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl - << "tmp1[i] = tmp2[i];" << be_uidt_nl - << be_nl - << "this->buffer_ = tmp1;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator= - *os << class_name << " &operator= (const " << class_name << " &rhs)" << be_nl - << "// Assignment operator. " << be_nl - << "{" << be_idt_nl - << "if (this == &rhs)" << be_idt_nl - << "return *this;" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_nl - << "{" << be_nl - << "}" << be_nl - << "else" << be_idt_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_nl - << be_nl - <<"TAO_Bounded_Base_Sequence::operator= (rhs);" << be_nl - << be_nl; - pt->accept(visitor); *os <<"* tmp1 = ACE_reinterpret_cast ("; - pt->accept(visitor); *os << " *, this->buffer_);" << be_nl; - pt->accept(visitor); *os <<"* const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " * ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl - << "tmp1[i] = tmp2[i];" << be_uidt_nl - << be_nl - << "return *this;" << be_uidt_nl << be_uidt_nl - << "}" << be_nl - << be_nl; - - // destructor - *os << "~" << class_name << " (void) // Dtor." << be_nl - << "{" << be_idt_nl - << "this->_deallocate_buffer ();" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // Accessors - *os << "// = Accessors." << be_nl; - pt->accept(visitor); *os <<" &operator[] (CORBA::ULong i)// operator []" << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (i < this->maximum_);" << be_nl; - pt->accept(visitor); *os <<" *tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << "*,this->buffer_);" << be_nl - << "return tmp[i];" << be_uidt_nl - << "}" << be_nl - << be_nl - << "const "; pt->accept (visitor); *os << " &operator[] (CORBA::ULong i) const// operator []" << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (i < this->maximum_);" << be_nl - << "const "; pt->accept (visitor); *os << "* tmp = ACE_reinterpret_cast (const "; - pt->accept (visitor); *os << "* ACE_CAST_CONST,this->buffer_);" << be_nl - << "return tmp[i];" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // Static Operations - *os << "// = Static operations." << be_nl - << "static "; pt->accept (visitor); *os << " *allocbuf (CORBA::ULong) // Allocate storage for the sequence." << be_nl - << "{" << be_idt_nl - << "return new "; pt->accept (visitor); *os << "[" << node->max_size () << "];" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // free_buf - *os << "static void freebuf ("; pt->accept (visitor); *os << " *buffer) // Free the sequence." << be_nl - << "{" << be_idt_nl - << "delete [] buffer;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocate_buffer - *os << "virtual void _allocate_buffer (CORBA::ULong length)" << be_nl - << "// allocate a buffer of the requested length. The buffer is allocated for the" << be_nl - << "// right type" << be_nl - << "{" << be_idt_nl - << "this->buffer_ = allocbuf (" << node->max_size () << ");" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // deallocate_buffer - *os << "virtual void _deallocate_buffer (void)" << be_nl - << "// deallocate the buffer" << be_nl - << "{" << be_idt_nl - << "if (this->buffer_ == 0 || this->release_ == 0)" << be_idt_nl - << "return;" << be_uidt_nl; - pt->accept(visitor); *os <<" *tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " *, this->buffer_);" << be_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = 0;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // get_buffer - pt->accept(visitor); *os <<" *get_buffer (CORBA::Boolean orphan = 0)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" *result = 0;" << be_nl - << "if (orphan == 0)" << be_nl - << "{" << be_idt_nl - << "// We retain ownership." << be_nl - << "if (this->buffer_ == 0)" << be_nl - << "{" << be_idt_nl - << "result = allocbuf (this->maximum_);" << be_nl - << "this->buffer_ = result;" << be_uidt_nl - << "}" << be_nl - << "else" << be_nl - << "{" << be_idt_nl - << "result = ACE_reinterpret_cast ("; - pt->accept (visitor); - *os << "*, this->buffer_);" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "else // if (orphan == 1)" << be_nl - << "{" << be_idt_nl - << "if (this->release_ != 0)" << be_nl - << "{" << be_idt_nl - << "// We set the state back to default and relinquish" << be_nl - << "// ownership." << be_nl - << "result = ACE_reinterpret_cast("; pt->accept (visitor); *os << "*,this->buffer_);" << be_nl - << "this->maximum_ = 0;" << be_nl - << "this->length_ = 0;" << be_nl - << "this->buffer_ = 0;" << be_nl - << "this->release_ = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "return result;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // get_buffer - *os << "const "; pt->accept (visitor); *os << " *get_buffer (void) const" << be_nl - << "{" << be_idt_nl - << "return ACE_reinterpret_cast(const "; - pt->accept (visitor); - *os << " * ACE_CAST_CONST, this->buffer_);" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // replace - *os << "void replace (CORBA::ULong max," << be_idt_nl - << "CORBA::ULong length," << be_nl; - pt->accept(visitor); *os <<" *data," << be_nl - << "CORBA::Boolean release = 0)" << be_uidt_nl - << "{" << be_idt_nl - << "this->maximum_ = max;" << be_nl - << "this->length_ = length;" << be_nl - << "if (this->buffer_ && this->release_ == 1)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<"* tmp = ACE_reinterpret_cast("; - pt->accept (visitor); *os << "* ACE_CAST_CONST, this->buffer_);" << be_nl - << "freebuf (tmp);" << be_uidt_nl - << "}" << be_nl - << "this->buffer_ = data;" << be_nl - << "this->release_ = release;" << be_uidt_nl - << "}" << be_nl - << be_uidt_nl - << "};" << be_nl; - - os->gen_endif (); // endif macro - - - delete visitor; - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_str_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_str_sequence_ch.cpp deleted file mode 100644 index ecdce315b92..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_str_sequence_ch.cpp +++ /dev/null @@ -1,233 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// gen_bounded_str_sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Michael Kircher -// -// ============================================================================ - -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, gen_bounded_str_sequence_ch, "$Id$") - - -int -be_visitor_sequence_ch::gen_bounded_str_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the class name - be_type *pt; // base types - - if (bt->node_type () == AST_Decl::NT_typedef) - { - // get the primitive base type of this typedef node - be_typedef *t = be_typedef::narrow_from_decl (bt); - pt = t->primitive_base_type (); - } - else - pt = bt; - - - const char * class_name = node->instance_name (); - - - // get the visitor for the type of the sequence - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - os->gen_ifdef_macro (class_name); - - os->indent (); - // the accept is here the first time used and if an - // error occurs, it will occur here. Later no check - // for errors will be done. - if (pt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - - - *os << "class " << class_name << " : public TAO_Bounded_Base_Sequence" << be_nl - << "{" << be_nl - << "public:" << be_idt_nl; - - // constructor - *os << class_name << " (void)" << be_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () - << ", allocbuf(" << node->max_size () << "))" << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong length," << be_idt_nl - << "char* *value," << be_nl - << "CORBA::Boolean release = 0)" << be_uidt_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () << ", length, value, release)" << be_nl - << "{" << be_nl - << " this->_allocate_buffer (" << node->max_size () << ");" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (const " << class_name << " &rhs)" << be_idt_nl - << ": TAO_Bounded_Base_Sequence (rhs)" << be_uidt_nl - << "{" << be_idt_nl - << "char **tmp1 = allocbuf (this->maximum_);" << be_nl - << "char ** const tmp2 = ACE_reinterpret_cast (char ** ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i=0; i < rhs.length_; i++)" << be_idt_nl - << "tmp1[i] = CORBA::string_dup (tmp2[i]);" << be_uidt_nl - << be_nl - << "this->buffer_ = tmp1;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator= - *os << class_name << " &operator= (const " << class_name << " &rhs)" << be_nl - << "{" << be_idt_nl - << "if (this == &rhs)" << be_idt_nl - << "return *this;" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_nl - << "{ " << be_idt_nl - << "char **tmp = ACE_reinterpret_cast (char **, this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::string_free (tmp[i]);" << be_nl - << "tmp[i] = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "else" << be_idt_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << be_nl - << "TAO_Bounded_Base_Sequence::operator= (rhs);" << be_nl - << be_nl - << "char **tmp1 = ACE_reinterpret_cast (char **, this->buffer_);" << be_nl - << "char ** const tmp2 = ACE_reinterpret_cast (char ** ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < rhs.length_; i++)" << be_idt_nl - << "tmp1[i] = CORBA::string_dup (tmp2[i]);" << be_uidt_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // destructor - *os << "~" << class_name << " (void)" << be_nl - << "{" << be_idt_nl - << "this->_deallocate_buffer ();" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator[] - *os << "TAO_String_Manager operator[] (CORBA::ULong index) const" << be_nl - << "// read-write accessor" << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (index < this->maximum_);" << be_nl - << "char **const tmp = ACE_reinterpret_cast (char ** ACE_CAST_CONST, this->buffer_);" << be_nl - << "return TAO_String_Manager (tmp + index, this->release_);" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocbuf - *os << "static char **allocbuf (CORBA::ULong length)" << be_nl - << "{" << be_idt_nl - << "char **buf;" << be_nl - << "ACE_NEW_RETURN (buf, char *[" << node->max_size () << "], 0);" << be_nl - << "for (CORBA::ULong i = 0; i < " << node->max_size () << "; i++)" << be_idt_nl - << "buf[i] = 0;" << be_uidt_nl - << "return buf;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // freebuf - *os << "static void freebuf (char **buffer)" << be_nl - << "{" << be_idt_nl - << "for (CORBA::ULong i = 0; i < " << node->max_size () << "; ++i)" << be_nl - << "{" << be_idt_nl - << "if (buffer[i] != 0)" << be_nl - << "{" << be_idt_nl - << "CORBA::string_free (buffer[i]);" << be_nl - << "buffer[i] = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "delete [] buffer;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocate_buffer - *os << "virtual void _allocate_buffer (CORBA::ULong length)" << be_nl - << "{" << be_idt_nl - << "// For this class memory is never reallocated so the implementation" << be_nl - << "// is *really* simple." << be_nl - << "this->buffer_ = allocbuf (" << node->max_size () << ");" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // deallocate_bufffer - *os << "virtual void _deallocate_buffer (void)" << be_nl - << "{" << be_idt_nl - << "if (this->buffer_ == 0 || this->release_ == 0)" << be_idt_nl - << "return;" << be_uidt_nl - << "char **tmp = ACE_reinterpret_cast (char **, this->buffer_);" << be_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = 0;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // shrink_buffer - *os << "virtual void _shrink_buffer (CORBA::ULong nl,CORBA::ULong ol)" << be_nl - << "{" << be_idt_nl - << "char **tmp = ACE_reinterpret_cast (char **,this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = nl; i < ol; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::string_free (tmp[i]);" << be_nl - << "tmp[i] = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << be_uidt_nl - << "};" << be_nl; - - - - os->gen_endif (); // endif macro - - - delete visitor; - return 0; -} - diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_object_manager_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_object_manager_ch.cpp deleted file mode 100644 index 0efb9aece41..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_object_manager_ch.cpp +++ /dev/null @@ -1,219 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// gen_object_manager_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Michael Kircher -// -// ============================================================================ - - -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, gen_object_manager_ch, "$Id$") - - -int -be_visitor_sequence_ch::gen_object_manager (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the class name - // we might want to use this later - be_type *pt; // base types - - if (bt->node_type () == AST_Decl::NT_typedef) - { - // get the primitive base type of this typedef node - be_typedef *t = be_typedef::narrow_from_decl (bt); - pt = t->primitive_base_type (); - } - else - pt = bt; - - - const char * class_name = node->instance_name (); - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - const char * object_manager = node->object_manager_name (); - // create the name for the object manager - - os->gen_ifdef_macro (object_manager); - - os->indent (); - - *os << "class " << object_manager << be_nl - << "{" << be_idt_nl - << "friend class " << class_name << ";" << be_uidt_nl - << "public:" << be_idt_nl - << be_nl; - - // constructor - *os << "// = Initialization and termination methods." << be_nl - << object_manager << " (const " << object_manager << " &rhs)" << be_idt_nl - << ": ptr_ (rhs.ptr_)," << be_nl - << "release_ (rhs.release_)" << be_uidt_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << object_manager << " ("; - // the accept is here the first time used and if an - // error occurs, it will occur here. Later no check - // for errors will be done. - if (pt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - *os << "** buffer, CORBA::Boolean release)" << be_idt_nl - << ": ptr_ (buffer)," << be_nl - << "release_ (release)" << be_uidt_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // destructor - *os << "~" << object_manager << " (void)" << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // operator= - *os << object_manager << " &operator= (const " << object_manager << " &rhs)" << be_nl - << "{" << be_idt_nl - << "if (this == &rhs)" << be_idt_nl - << "return *this;" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (*this->ptr_);" << be_nl - << "*this->ptr_ = "; pt->accept (visitor); *os << "::_duplicate (*rhs.ptr_);" << be_uidt_nl - << "}" << be_nl - << "else" << be_idt_nl - << "*this->ptr_ = *rhs.ptr_;" << be_uidt_nl - << be_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator= - *os << object_manager << " &operator= ("; pt->accept (visitor); *os << " *p)" << be_nl - << "// Assignment from "; pt->accept (visitor); *os << " *." << be_nl - << "{" << be_idt_nl - << "if (this->release_)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (*this->ptr_);" << be_nl - << "*this->ptr_ = p;" << be_uidt_nl - << "}" << be_nl - << "else" << be_idt_nl - << "*this->ptr_ = p;" << be_uidt_nl - << be_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // cast operator - *os << "operator const "; pt->accept (visitor); *os << " *() const // Cast (read-only)." << be_nl - << "{" << be_idt_nl - << "return *this->ptr_;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // cast operator - *os << "operator "; pt->accept (visitor); *os << " *&() // Cast." << be_nl - << "{" << be_idt_nl - << "return *this->ptr_;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // in method - *os << "const "; pt->accept (visitor); *os << " *in (void) const // in " - << be_nl - << "{" << be_idt_nl - << "return *this->ptr_;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // inout method - pt->accept (visitor); - *os << " *&inout (void) // inout " - << be_nl - << "{" << be_idt_nl - << "return *this->ptr_;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // out method - pt->accept (visitor); - *os << " *&out (void) // out " - << be_nl - << "{" << be_idt_nl - << "CORBA::release (*this->ptr_);" << be_nl - << "*this->ptr_ = "; pt->accept (visitor); *os << "::_nil ();" - << be_nl - << "return *this->ptr_;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // retn method - pt->accept (visitor); - *os << " *_retn (void) // retn " - << be_nl - << "{" << be_idt_nl; - pt->accept (visitor); - *os << " *temp = *this->ptr_;" << be_nl - << "*this->ptr_ = "; pt->accept (visitor); *os << "::_nil ();" - << be_nl - << "return temp;" << be_uidt_nl - << "}" << be_nl - << be_uidt_nl; - - // members - *os << "private:" << be_idt_nl; - pt->accept(visitor); *os <<" **ptr_;" << be_nl - << "// data member, notice that it is a pointer, to implement the" << be_nl - << "// reference behavior for assignment." << be_nl - << be_nl - << "CORBA::Boolean release_;" << be_nl - << "// release flag based on parent's flag" << be_uidt_nl - << "};" << be_nl; - - os->gen_endif (); // endif macro - - delete visitor; - return 0; -} - diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp deleted file mode 100644 index 49718aca3e6..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp +++ /dev/null @@ -1,288 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// gen_unbounded_obj_sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Michael Kircher -// -// ============================================================================ - - -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, gen_unbounded_obj_sequence_ch, "$Id$") - - -int -be_visitor_sequence_ch::gen_unbounded_obj_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the class name - be_type *pt; // base types - - if (bt->node_type () == AST_Decl::NT_typedef) - { - // get the primitive base type of this typedef node - be_typedef *t = be_typedef::narrow_from_decl (bt); - pt = t->primitive_base_type (); - } - else - pt = bt; - - - const char * class_name = node->instance_name (); - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - this->gen_object_manager (node); - - const char * object_manager = node->object_manager_name (); - - os->gen_ifdef_macro (class_name); - - os->indent (); - - *os << "class " << class_name << " : public TAO_Unbounded_Base_Sequence" << be_nl - << "{" << be_nl - << "public:" << be_idt_nl - << "// = Initialization and termination methods." << be_nl - << be_nl; - - // constructor - *os << class_name << " (void)" << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong maximum)" << be_idt_nl - << ": TAO_Unbounded_Base_Sequence (maximum, allocbuf (maximum))" << be_uidt_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong maximum," << be_idt_nl - << "CORBA::ULong length," << be_nl; - pt->accept (visitor); - *os <<"* *value," << be_nl - << "CORBA::Boolean release=0)" << be_uidt_nl - << ": TAO_Unbounded_Base_Sequence (maximum, length, value, release)" << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << "(const " << class_name << " &rhs)" << be_idt_nl - << ": TAO_Unbounded_Base_Sequence (rhs)" << be_uidt_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **tmp1 = allocbuf (this->maximum_);" << be_nl; - pt->accept(visitor); *os <<" ** const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " ** ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < rhs.length_; ++i)" << be_idt_nl - << "tmp1[i] = "; pt->accept (visitor); *os << "::_duplicate (tmp2[i]);" << be_uidt_nl - << be_nl - << "this->buffer_ = tmp1;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // destructor - *os << "~" << class_name << " (void)" << be_nl - << "{" << be_idt_nl - << "this->_deallocate_buffer ();" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator= - *os << class_name << " &operator= (const " << class_name << " &rhs)" << be_nl - << "{" << be_idt_nl - << "if (this == &rhs)" << be_idt_nl - << "return *this;" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " **, this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (tmp[i]);" << be_nl - << "tmp[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << "}" << be_nl - << "if (this->maximum_ < rhs.maximum_)" << be_nl - << "{" << be_idt_nl - << class_name << "::freebuf (tmp);" << be_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "else" << be_idt_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << be_nl - << "TAO_Unbounded_Base_Sequence::operator= (rhs);" << be_nl - << be_nl; - pt->accept(visitor); *os <<" **tmp1 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " **, this->buffer_);" << be_nl; - pt->accept(visitor); *os <<" ** const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " ** ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < rhs.length_; ++i)" << be_idt_nl - << "tmp1[i] = "; pt->accept (visitor); *os << "::_duplicate (tmp2[i]);" << be_uidt_nl - << be_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator[] - *os << object_manager << " operator[] (CORBA::ULong index) const" << be_nl - << "// read-write accessor" << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (index < this->maximum_);" << be_nl; - pt->accept(visitor); *os <<" ** const tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " ** ACE_CAST_CONST, this->buffer_);" << be_nl - << "return " << object_manager << " (tmp + index, this->release_);" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocbuf - *os << "static "; pt->accept (visitor); *os << " **allocbuf (CORBA::ULong nelems)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **buf;" << be_nl - << be_nl - << "ACE_NEW_RETURN (buf, "; pt->accept (visitor); *os << "*[nelems], 0);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < nelems; i++)" << be_idt_nl - << "buf[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << be_nl - << "return buf;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // freebuf - *os << "static void freebuf ("; pt->accept (visitor); *os << " **buffer)" << be_nl - << "{" << be_idt_nl - << "if (buffer == 0)" << be_idt_nl - << "return;" << be_uidt_nl - << "delete[] buffer;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocate_buffer - *os << "// The Base_Sequence functions, please see tao/Sequence.h" << be_nl - << "virtual void _allocate_buffer (CORBA::ULong length)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **tmp = allocbuf (length);" << be_nl - << be_nl - << "if (this->buffer_ != 0)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **old = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << "**, this->buffer_);" << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl - << "if (!this->release_)" << be_idt_nl - << "tmp[i] = "; pt->accept (visitor); *os << "::_duplicate (old[i]);" << be_uidt_nl - << "else" << be_idt_nl - << "tmp[i] = old[i];" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_idt_nl - << "delete[] old;" << be_uidt_nl << be_uidt_nl - << "}" << be_nl - << "this->buffer_ = tmp;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // deallocate_buffer - *os << "virtual void _deallocate_buffer (void)" << be_nl - << "{" << be_idt_nl - << "if (this->buffer_ == 0 || this->release_ == 0)" << be_idt_nl - << "return;" << be_uidt_nl; - pt->accept(visitor); *os <<" **tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << "**, this->buffer_);" << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (tmp[i]);" << be_nl - << "tmp[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << "}" << be_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = 0;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // shrink_buffer - *os << "virtual void _shrink_buffer (CORBA::ULong nl, CORBA::ULong ol)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" **tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << "**, this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = nl; i < ol; ++i)" << be_nl - << "{" << be_idt_nl - << "CORBA::release (tmp[i]);" << be_nl - << "tmp[i] = "; pt->accept (visitor); *os << "::_nil ();" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_uidt_nl; - - if (pt->node_type () != AST_Decl::NT_pre_defined) - { - // Pseudo objects do not require this methods. - *os << "virtual void _downcast (" << be_idt << be_idt_nl - << "void* target," << be_nl - << "CORBA_Object *src," << be_nl - << "CORBA_Environment &_env = " << be_idt_nl - << "CORBA::Environment::default_environment ()" - << be_uidt << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; - pt->accept (visitor); - *os << " **tmp = ACE_static_cast ("; - pt->accept (visitor); - *os << "**, target);" << be_nl - << "*tmp = "; - pt->accept (visitor); - *os << "::_narrow (src, _env);" << be_uidt_nl - << "}\n" << be_nl; - - *os << "virtual CORBA_Object* _upcast (void *src) const" << be_nl - << "{" << be_idt_nl; - pt->accept (visitor); - *os << " **tmp = ACE_static_cast ("; - pt->accept (visitor); - *os << "**, src);" << be_nl - << "return *tmp;" << be_uidt_nl - << "}" << be_nl; - } - *os << "};" << be_uidt_nl << "\n"; - - os->gen_endif (); // endif macro - - - delete visitor; - return 0; -} - diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_sequence_ch.cpp deleted file mode 100644 index 819b79feee8..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_sequence_ch.cpp +++ /dev/null @@ -1,315 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// gen_unbounded_sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Michael Kircher -// -// ============================================================================ - -//#include "idl.h" -//#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, gen_unbounded_sequence_ch, "$Id$") - - -int -be_visitor_sequence_ch::gen_unbounded_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the class name - be_type *pt; // base types - - if (bt->node_type () == AST_Decl::NT_typedef) - { - // get the primitive base type of this typedef node - be_typedef *t = be_typedef::narrow_from_decl (bt); - pt = t->primitive_base_type (); - } - else - pt = bt; - - - const char * class_name = node->instance_name (); - - - // get the visitor for the type of the sequence - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - os->gen_ifdef_macro (class_name); - - os->indent (); - - *os << "class " << class_name << " : public TAO_Unbounded_Base_Sequence" << be_nl - << "{" << be_nl - << "public:" << be_idt_nl - << "// = Initialization and termination methods." << be_nl - << be_nl; - // constructor - *os << class_name << " (void) // Default constructor." << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong maximum) " - << "// Constructor using a maximum length value." << be_idt_nl - << ": TAO_Unbounded_Base_Sequence (maximum, allocbuf (maximum))" - << be_uidt_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (CORBA::ULong maximum," << be_idt_nl - << "CORBA::ULong length," << be_nl; - // the accept is here the first time used and if an - // error occurs, it will occur here. Later no check - // for errors will be done. - if (pt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - *os << " *data," << be_nl - << "CORBA::Boolean release = 0)" << be_uidt_nl - << ": TAO_Unbounded_Base_Sequence (maximum, length, data, release)" << be_nl - << "{" << be_nl - << "}" << be_nl - << be_nl; - - // constructor - *os << class_name << " (const " << class_name << " &rhs)" << be_nl - << "// Copy constructor." << be_idt_nl; - *os << ": TAO_Unbounded_Base_Sequence (rhs)" << be_uidt_nl - << "{" << be_idt_nl; - pt->accept(visitor); - *os <<" *tmp1 = allocbuf (this->maximum_);" << be_nl; - pt->accept(visitor); - *os << " * const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); - *os << " * ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl - << "tmp1[i] = tmp2[i];" << be_uidt_nl - << be_nl - << "this->buffer_ = tmp1;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator = - *os << class_name << " &operator= (const " << class_name << " &rhs)" << be_nl - << "// Assignment operator." << be_nl - << "{" << be_idt_nl - << "if (this == &rhs)" << be_idt_nl - << "return *this;" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_nl - << "{" << be_idt_nl - << "if (this->maximum_ < rhs.maximum_)" << be_nl - << "{" << be_idt_nl - << "// free the old buffer" << be_nl; - pt->accept (visitor); *os <<" *tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " *, this->buffer_);" << be_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "else" << be_idt_nl - << "this->buffer_ = allocbuf (rhs.maximum_);" << be_uidt_nl - << be_nl - << "TAO_Unbounded_Base_Sequence::operator= (rhs);" << be_nl - << be_nl; - pt->accept (visitor); *os <<" *tmp1 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " *, this->buffer_);" << be_nl; - pt->accept (visitor); *os <<" * const tmp2 = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " * ACE_CAST_CONST, rhs.buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl - << "tmp1[i] = tmp2[i];" << be_uidt_nl - << be_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // destructor - *os << "~" << class_name << " (void) // Dtor." << be_nl - << "{" << be_idt_nl - << "this->_deallocate_buffer ();" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // Accessors - *os << "// = Accessors." << be_nl; - pt->accept (visitor); *os <<" &operator[] (CORBA::ULong i)" << be_nl - << "// operator []" << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (i < this->maximum_);" << be_nl; - pt->accept (visitor); *os <<"* tmp = ACE_reinterpret_cast("; - pt->accept (visitor); *os << "*,this->buffer_);" << be_nl - << "return tmp[i];" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // operator[] - *os << "const "; pt->accept (visitor); *os << " &operator[] (CORBA::ULong i) const" << be_nl - << "// operator []" << be_nl - << "{" << be_idt_nl - << "ACE_ASSERT (i < this->maximum_);" << be_nl; - pt->accept (visitor); *os <<" * const tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << "* ACE_CAST_CONST, this->buffer_);" << be_nl - << "return tmp[i];" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // Static operations - *os << "// = Static operations." << be_nl - << "static "; pt->accept (visitor); *os << " *allocbuf (CORBA::ULong size)" << be_nl - << "// Allocate storage for the sequence." << be_nl - << "{" << be_idt_nl - << "return new "; pt->accept (visitor); *os << "[size];" << be_uidt_nl - << "}" << be_nl - << be_nl; - *os << "static void freebuf ("; pt->accept (visitor); *os << " *buffer)" << be_nl - << "// Free the sequence." << be_nl - << "{" << be_idt_nl - << "delete [] buffer;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // allocate_buffer - *os << "virtual void _allocate_buffer (CORBA::ULong length)" << be_nl - << "{" << be_idt_nl; - pt->accept (visitor); *os <<"* tmp = allocbuf (length);" << be_nl - << be_nl - << "if (this->buffer_ != 0)" << be_nl - << "{" << be_idt_nl; - pt->accept (visitor); *os <<" *old = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " *,this->buffer_);" << be_nl - << be_nl - << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl - << "tmp[i] = old[i];" << be_uidt_nl - << be_nl - << "if (this->release_)" << be_idt_nl - << "freebuf (old);" << be_uidt_nl << be_uidt_nl - << "}" << be_nl - << "this->buffer_ = tmp;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // deallocate_buffer - *os << "virtual void _deallocate_buffer (void)" << be_nl - << "{" << be_idt_nl - << "if (this->buffer_ == 0 || this->release_ == 0)" << be_idt_nl - << "return;" << be_uidt_nl - << be_nl; - pt->accept(visitor); *os <<" *tmp = ACE_reinterpret_cast ("; - pt->accept (visitor); *os << " *,this->buffer_);" << be_nl - << be_nl - << "freebuf (tmp);" << be_nl - << "this->buffer_ = 0;" << be_uidt_nl - << "} " << be_nl - << be_nl; - - // Implement the TAO_Base_Sequence methods (see Sequence.h) - *os << "// Implement the TAO_Base_Sequence methods (see Sequence.h)" << be_nl - << be_nl; - pt->accept(visitor); *os <<" *get_buffer (CORBA::Boolean orphan = 0)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" *result = 0;" << be_nl - << "if (orphan == 0)" << be_nl - << "{" << be_idt_nl - << "// We retain ownership." << be_nl - << "if (this->buffer_ == 0)" << be_nl - << "{" << be_idt_nl - << "result = allocbuf (this->length_);" << be_nl - << "this->buffer_ = result;" << be_uidt_nl - << "}" << be_nl - << "else" << be_nl - << "{" << be_idt_nl - << "result = ACE_reinterpret_cast ("; pt->accept (visitor); *os << "*, this->buffer_);" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "else // if (orphan == 1)" << be_nl - << "{" << be_idt_nl - << "if (this->release_ != 0)" << be_nl - << "{" << be_idt_nl - << "// We set the state back to default and relinquish" << be_nl - << "// ownership." << be_nl - << "result = ACE_reinterpret_cast("; pt->accept (visitor); *os << "*,this->buffer_);" << be_nl - << "this->maximum_ = 0;" << be_nl - << "this->length_ = 0;" << be_nl - << "this->buffer_ = 0;" << be_nl - << "this->release_ = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "}" << be_nl - << "return result;" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // get_buffer - *os << "const "; pt->accept (visitor); *os << " *get_buffer (void) const" << be_nl - << "{" << be_idt_nl - << "return ACE_reinterpret_cast(const "; - pt->accept (visitor); - *os << " * ACE_CAST_CONST, this->buffer_);" << be_uidt_nl - << "}" << be_nl - << be_nl; - - // replace - *os << "void replace (CORBA::ULong max," << be_nl - << "CORBA::ULong length," << be_nl; - pt->accept(visitor); *os <<" *data," << be_nl - << "CORBA::Boolean release)" << be_nl - << "{" << be_idt_nl - << "this->maximum_ = max;" << be_nl - << "this->length_ = length;" << be_nl - << "if (this->buffer_ && this->release_ == 1)" << be_nl - << "{" << be_idt_nl; - pt->accept(visitor); *os <<" *tmp = ACE_reinterpret_cast("; pt->accept (visitor); *os << "*,this->buffer_);" << be_nl - << "freebuf (tmp);" << be_uidt_nl - << "}" << be_nl - << "this->buffer_ = data;" << be_nl - << "this->release_ = release;" << be_uidt_nl - << "}" << be_nl - << be_uidt_nl - << "};" << be_nl; - - - - os->gen_endif (); // endif macro - - - delete visitor; - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp deleted file mode 100644 index 78aaef41f62..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp +++ /dev/null @@ -1,141 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_base.cpp -// -// = DESCRIPTION -// Visitor generating code for the base type of the Sequence -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, sequence_base, "$Id$") - - -// **************************************************************** -// We have to generate the parameters for the template that implements -// each sequence type. -// **************************************************************** - -be_visitor_sequence_base:: -be_visitor_sequence_base (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_base::~be_visitor_sequence_base (void) -{ -} - -int -be_visitor_sequence_base::visit_predefined_type (be_predefined_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - *os << node->name (); - return 0; -} - -// helper -int -be_visitor_sequence_base::visit_node (be_type *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - if (this->ctx_->alias ()) - bt = this->ctx_->alias (); - else - bt = node; - - if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BASE_CH) - *os << bt->nested_type_name (this->ctx_->scope ()); - else - *os << bt->name (); - return 0; -} - -int -be_visitor_sequence_base::visit_sequence (be_sequence *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_interface (be_interface *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_interface_fwd (be_interface_fwd *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_string (be_string *) -{ - // NO-OP, we have ad-hoc classes from strings. - return 0; -} - -int -be_visitor_sequence_base::visit_structure (be_structure *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_union (be_union *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_enum (be_enum *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_exception (be_exception *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_array (be_array *node) -{ - return this->visit_node (node); -} - -int -be_visitor_sequence_base::visit_typedef (be_typedef *node) -{ - this->ctx_->alias (node); // set the alias node - if (node->primitive_base_type ()->accept (this) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_sequence_base::" - "visit_typedef - " - "accept on primitive type failed\n"), - -1); - } - this->ctx_->alias (0); - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp deleted file mode 100644 index 63d24ff71ab..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp +++ /dev/null @@ -1,627 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_ch.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client header -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, sequence_ch, "$Id$") - - -// Root visitor for client header -be_visitor_sequence_ch::be_visitor_sequence_ch (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_ch::~be_visitor_sequence_ch (void) -{ -} - -int -be_visitor_sequence_ch::gen_base_sequence_class (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - - // !! branching in either compile time template instantiation - // or manual template instatiation - os->gen_ifdef_AHETI(); - - // this is the instantiation branch - *os << node->instance_name (); - - os->gen_else_AHETI(); - - // generate the appropriate sequence type - switch (node->managed_type ()) - { - case be_sequence::MNG_OBJREF: - if (node->unbounded ()) - *os << "TAO_Unbounded_Object_Sequence<"; - else - *os << "TAO_Bounded_Object_Sequence<"; - break; - case be_sequence::MNG_PSEUDO: - if (node->unbounded ()) - *os << "TAO_Unbounded_Pseudo_Sequence<"; - else - *os << "TAO_Bounded_Pseudo_Sequence<"; - break; - case be_sequence::MNG_STRING: - if (node->unbounded ()) - *os << "TAO_Unbounded_String_Sequence"; - else - *os << "TAO_Bounded_String_Sequence"; - break; - default: // not a managed type - if (node->unbounded ()) - *os << "TAO_Unbounded_Sequence<"; - else - *os << "TAO_Bounded_Sequence<"; - break; - } - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - delete visitor; - - // find out if the sequence is of a managed type and if it is bounded or not - if (node->managed_type () == be_sequence::MNG_STRING) - { - if (!node->unbounded ()) - { - *os << "<" << node->max_size () << ">"; - } - } - else - { - if (node->unbounded ()) - { - *os << ">"; - } - else - { - *os << ", " << node->max_size () << ">"; - } - } - - os->gen_endif_AHETI(); - - return 0; -} - - -int -be_visitor_sequence_ch::instantiate_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "gen_instantiate_template_name - " - "Bad element type\n"), -1); - } - - // generate the appropriate sequence type - switch (node->managed_type ()) - { - case be_sequence::MNG_PSEUDO: - case be_sequence::MNG_OBJREF: - if (node->unbounded ()) - this->gen_unbounded_obj_sequence (node); - else - this->gen_bounded_obj_sequence (node); - break; - case be_sequence::MNG_STRING: // sequence of strings - if (!node->unbounded ()) - this->gen_bounded_str_sequence (node); - // else - // inheriting from the right class is enough - break; - default: // not a managed type - if (node->unbounded ()) - { -#if 1 - // TAO provides extensions for octet sequences, first find out - // if the base type is an octet (or an alias for octet) - be_predefined_type *predef = 0; - if (bt->base_node_type () == AST_Type::NT_pre_defined) - { - be_typedef* alias = - be_typedef::narrow_from_decl (bt); - - if (alias == 0) - { - predef = - be_predefined_type::narrow_from_decl (bt); - } - else - { - predef = be_predefined_type::narrow_from_decl - (alias->primitive_base_type ()); - } - } - if (predef != 0) - { - if (predef->pt() != AST_PredefinedType::PT_octet) - this->gen_unbounded_sequence (node); - } - else - this->gen_unbounded_sequence (node); -#else - // @@ This needs to be fixed. (Michael) - be_predefined_type * bpt = - be_predefined_type::narrow_from_decl (node->base_type()); - if (bpt) - { - if (bpt->pt() != AST_PredefinedType::PT_octet) - this->gen_unbounded_sequence (node); - } - else - this->gen_unbounded_sequence (node); -#endif - } - else - this->gen_bounded_sequence (node); - break; - } - - return 0; -} - - -int be_visitor_sequence_ch::visit_sequence (be_sequence *node) -{ - be_type *bt; // type node - TAO_OutStream *os = this->ctx_->stream (); - - // first create a name for ourselves - if (node->create_name (this->ctx_->tdef ()) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "failed creating name\n"), -1); - } - - if (node->cli_hdr_gen () || node->imported ()) - return 0; - - // instantiation - - if (this->instantiate_sequence (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "codegen. for the primitive type sequence\n"), -1); - } - - // end of instantiation - - - - // generate the ifdefined macro for the sequence type - os->gen_ifdef_macro (node->flatname ()); - - os->indent (); // start with the current indentation level - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - *os << "// *************************************************************" - << be_nl - << "// " << node->local_name () << be_nl - << "// *************************************************************" - << be_nl << be_nl; - - // generate a typedef to a parametrized sequence - *os << "class " << idl_global->export_macro () - << " " << node->local_name () << " : public "; - - if (this->gen_base_sequence_class (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "codegen for base sequence class\n"), -1); - } - - *os << "{" << be_nl - << "public:" << be_idt_nl - << node->local_name () << " (void); // default ctor" << be_nl; - // for unbounded sequences, we have a different set of constructors - if (node->unbounded ()) - { - *os << node->local_name () << " (CORBA::ULong max); // uses max size" - << be_nl; - } - - *os << node->local_name () << " (" << be_idt_nl; - if (node->unbounded ()) - { - // unbounded seq takes this extra parameter - *os << "CORBA::ULong max, " << be_nl; - } - *os << "CORBA::ULong length, " << be_nl; - // generate the base type for the buffer - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "Bad visitor\n"), -1); - } - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - delete visitor; - *os << " *buffer, " << be_nl - << "CORBA::Boolean release=0" << be_uidt_nl - << ");" << be_nl; - *os << node->local_name () << " (const " << node->local_name () - << " &); // copy ctor" << be_nl; - *os << "~" << node->local_name () << " (void); // dtor\n"; - - // TAO provides extensions for octet sequences, first find out if - // the base type is an octet (or an alias for octet) - be_predefined_type *predef = 0; - if (bt->base_node_type () == AST_Type::NT_pre_defined) - { - be_typedef* alias = - be_typedef::narrow_from_decl (bt); - - if (alias == 0) - { - predef = be_predefined_type::narrow_from_decl (bt); - } - else - { - predef = be_predefined_type::narrow_from_decl - (alias->primitive_base_type ()); - } - } - // Now generate the extension... - if (predef != 0 && predef->pt () == AST_PredefinedType::PT_octet - && node->unbounded ()) - { - *os << "\n" - << "#if defined(TAO_NO_COPY_OCTET_SEQUENCES)" << be_nl - << node->local_name () << " (" << be_idt << be_idt_nl - << "CORBA::ULong length," << be_nl - << "const ACE_Message_Block* mb" << be_uidt_nl - << ")" << be_uidt_nl - << " : " << node->instance_name () - << " (length, mb) {}" << "\n" - << "#endif /* TAO_NO_COPY_OCTET_SEQUENCE */\n\n"; - } - - os->decr_indent (); - *os << "};" << be_nl; - - // define a _ptr type. This is just an extension for convenience - *os << "typedef " << node->local_name () << " *" - << node->local_name () << "_ptr;\n"; - - 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 - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_TYPECODE_DECL); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "TypeCode declaration failed\n" - ), -1); - } - } - - os->gen_endif (); // endif macro - - // generate the ifdefined macro for the var type - os->gen_ifdef_macro (node->flatname (), "_var"); - - // generate the var and out types - if (this->gen_var_defn (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "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 (this->gen_out_defn (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "visit_sequence - " - "codegen for _out failed\n"), - -1); - } - os->gen_endif (); - node->cli_hdr_gen (1); - - return 0; -} - -// generate the _var definition for ourself -int -be_visitor_sequence_ch::gen_var_defn (be_sequence *node) -{ - TAO_OutStream *os; // output stream - char namebuf [NAMEBUFSIZE]; // names - be_type *bt; // base type - - ACE_OS::memset (namebuf, '\0', NAMEBUFSIZE); - ACE_OS::sprintf (namebuf, "%s_var", node->local_name ()->get_string ()); - - os = this->ctx_->stream (); - - *os << "// *************************************************************" - << be_nl; - *os << "// class " << node->name () << "_var" << be_nl; - *os << "// *************************************************************\n\n"; - - // retrieve base type - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "gen_var_defn - " - "Bad base type\n"), - -1); - } - - // 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 () - << " " << namebuf << be_nl; - *os << "{" << be_nl; - *os << "public:\n"; - os->incr_indent (); - // default constr - *os << namebuf << " (void); // default constructor" << be_nl; - // constr - *os << namebuf << " (" << node->local_name () << " *);" << be_nl; - // copy constructor - *os << namebuf << " (const " << namebuf << - " &); // copy constructor" << be_nl; - // destructor - *os << "~" << namebuf << " (void); // destructor" << be_nl; - *os << be_nl; - // assignment operator from a pointer - *os << namebuf << " &operator= (" << node->local_name () << " *);" << be_nl; - // assignment from _var - *os << namebuf << " &operator= (const " << namebuf << - " &);" << be_nl; - - // arrow operator - *os << node->local_name () << " *operator-> (void);" << be_nl; - *os << "const " << node->local_name () << " *operator-> (void) const;" << be_nl; - *os << be_nl; - - // other extra types (cast operators, [] operator, and others) - - // cast operator - *os << "operator const " << node->local_name () << " &() const;" << be_nl; - *os << "operator " << node->local_name () << " &();" << be_nl; - *os << "operator " << node->local_name () << " &() const;" << be_nl; - - // overloaded [] operator. The const version is not required for sequences - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "gen_var_defn - " - "Bad visitor\n"), -1); - } - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_sequence::" - "gen_var_defn - " - "[] ret type gen failed\n"), - -1); - } - delete visitor; - - *os << "operator[] (CORBA::ULong index);" << be_nl; - - *os << "// in, inout, out, _retn " << be_nl; - // the return types of in, out, inout, and _retn are based on the parameter - // passing rules and the base type - *os << "const " << node->local_name () << " &in (void) const;" << be_nl; - *os << node->local_name () << " &inout (void);" << be_nl; - *os << node->local_name () << " *&out (void);" << be_nl; - *os << node->local_name () << " *_retn (void);" << be_nl; - - // generate an additional member function that returns the underlying pointer - *os << node->local_name () << " *ptr (void) const;\n"; - - *os << "\n"; - os->decr_indent (); - - // generate the private section - *os << "private:\n"; - os->incr_indent (); - *os << node->local_name () << " *ptr_;\n"; - - os->decr_indent (); - *os << "};\n\n"; - - return 0; -} - -// generate the _out definition -int -be_visitor_sequence_ch::gen_out_defn (be_sequence *node) -{ - TAO_OutStream *os; // output stream - char namebuf [NAMEBUFSIZE]; // to hold the _out name - be_type *bt; // base type - - ACE_OS::memset (namebuf, '\0', NAMEBUFSIZE); - ACE_OS::sprintf (namebuf, "%s_out", node->local_name ()->get_string ()); - os = this->ctx_->stream (); - - // retrieve base type - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "gen_out_defn - " - "Bad base type\n"), - -1); - } - - // 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 () << " " - << namebuf << be_nl; - *os << "{" << be_nl; - *os << "public:\n"; - os->incr_indent (); - - // No default constructor - - // constructor from a pointer - *os << namebuf << " (" << node->local_name () << " *&);" << be_nl; - // constructor from a _var & - *os << namebuf << " (" << node->local_name () << "_var &);" << be_nl; - // constructor from a _out & - *os << namebuf << " (const " << namebuf << " &);" << be_nl; - // assignment operator from a _out & - *os << namebuf << " &operator= (const " << namebuf << " &);" << be_nl; - // assignment operator from a pointer &, cast operator, ptr fn, operator - // -> and any other extra operators - // assignment - *os << namebuf << " &operator= (" << node->local_name () << " *);" << be_nl; - // operator () - *os << "operator " << node->local_name () << " *&();" << be_nl; - // ptr fn - *os << node->local_name () << " *&ptr (void);" << be_nl; - // operator -> - *os << node->local_name () << " *operator-> (void);" << be_nl; - - // overloaded [] operator only for sequence. The const version is not - // required - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ch::" - "gen_out_defn - " - "Bad visitor\n"), -1); - } - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_sequence::" - "gen_var_defn - " - "[] ret type gen failed\n"), - -1); - } - delete visitor; - *os << "operator[] (CORBA::ULong index);" << be_nl; - *os << "\n"; - os->decr_indent (); - *os << "private:\n"; - os->incr_indent (); - - *os << node->local_name () << " *&ptr_;" << be_nl; - *os << "// assignment from T_var not allowed" << be_nl; - *os << "void operator= (const " << node->local_name () << "_var &);\n"; - - os->decr_indent (); - *os << "};\n\n"; - - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp deleted file mode 100644 index d5a5fb2a9d1..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp +++ /dev/null @@ -1,474 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_ci.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequence in the client inline file -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, sequence_ci, "$Id$") - - -// *********************************************************** -// sequence visitor for inline generation -// *********************************************************** - - -be_visitor_sequence_ci::be_visitor_sequence_ci (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_ci::~be_visitor_sequence_ci (void) -{ -} - -int -be_visitor_sequence_ci::visit_sequence (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - if (node->cli_inline_gen () || node->imported ()) - return 0; - - - // all we do is generate the _var and _out implementations - if (this->gen_var_impl (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "visit_sequence - " - "codegen for _var failed\n"), -1); - } - - if (this->gen_out_impl (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "visit_sequence - " - "codegen for _out failed\n"), -1); - } - - return 0; -} - -int -be_visitor_sequence_ci::gen_var_impl (be_sequence *node) -{ - TAO_OutStream *os; // output stream - char fname [NAMEBUFSIZE]; // to hold the full and - char lname [NAMEBUFSIZE]; // local _var names - be_type *bt; // base type - - - ACE_OS::memset (fname, '\0', NAMEBUFSIZE); - ACE_OS::sprintf (fname, "%s_var", node->fullname ()); - - ACE_OS::memset (lname, '\0', NAMEBUFSIZE); - ACE_OS::sprintf (lname, "%s_var", node->local_name ()->get_string ()); - - os = this->ctx_->stream (); - - // retrieve base type - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - // generate the var implementation in the inline file - os->indent (); // start with whatever was our current indent level - - *os << "// *************************************************************" - << be_nl; - *os << "// Inline operations for class " << fname << be_nl; - *os << "// *************************************************************\n\n"; - - // default constr - *os << "ACE_INLINE" << be_nl - << fname << "::" << lname - << " (void) // default constructor" << be_nl - << " " << ": ptr_ (0)" << be_nl - << "{}\n\n"; - - // constr from a _ptr - os->indent (); - *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (" << node->name () << " *p)" << be_nl; - *os << " : ptr_ (p)" << be_nl; - *os << "{}\n\n"; - - // copy constructor - os->indent (); - *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (const " << fname << - " &p) // copy constructor" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "if (p.ptr_)" << be_nl; - *os << " this->ptr_ = new " << node->name () << "(*p.ptr_);" << be_nl; - *os << "else" << be_nl; - *os << " this->ptr_ = 0;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // destructor - os->indent (); - *os << "ACE_INLINE" << be_nl; - *os << fname << "::~" << lname << " (void) // destructor" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "delete this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // assignment operator from a pointer - os->indent (); - *os << "ACE_INLINE " << fname << " &" << be_nl; - *os << fname << "::operator= (" << node->name () << - " *p)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "delete this->ptr_;" << be_nl; - *os << "this->ptr_ = p;" << be_nl; - *os << "return *this;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // assignment operator from _var - os->indent (); - *os << "ACE_INLINE " << fname << " &" << be_nl; - *os << fname << "::operator= (const " << fname << - " &p) // deep copy" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "if (this != &p)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "delete this->ptr_;" << be_nl; - *os << "this->ptr_ = new " << node->name () << " (*p.ptr_);\n"; - os->decr_indent (); - *os << "}" << be_nl; - *os << "return *this;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // two arrow operators - os->indent (); - *os << "ACE_INLINE const " << node->name () << " *" << be_nl; - *os << fname << "::operator-> (void) const" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - os->indent (); - *os << "ACE_INLINE " << node->name () << " *" << be_nl; - *os << fname << "::operator-> (void)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // other extra methods - 3 cast operator () - os->indent (); - *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator const " << node->name () << - " &() const // cast" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return *this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - os->indent (); - *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator " << node->name () << " &() // cast " << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return *this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - os->indent (); - *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator " << node->name () << " &() const// cast " << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return *this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // operator [] - os->indent (); - *os << "ACE_INLINE "; - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQELEM_RETTYPE_CI); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "gen_var_impl - " - "Bad visitor\n"), -1); - } - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "gen_var_impl - " - "[] ret type gen failed\n"), - -1); - } - delete visitor; - - *os << be_nl; - *os << fname << "::operator[] (CORBA::ULong index)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_->operator[] (index);\n"; - os->decr_indent (); - *os << "}\n\n"; - - // in, inout, out, and _retn - os->indent (); - *os << "ACE_INLINE const " << node->name () << " &" << be_nl; - *os << fname << "::in (void) const" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return *this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - os->indent (); - *os << "ACE_INLINE " << node->name () << " &" << be_nl; - *os << fname << "::inout (void)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return *this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - os->indent (); - *os << "// mapping for variable size " << be_nl; - *os << "ACE_INLINE " << node->name () << " *&" << be_nl; - *os << fname << "::out (void)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "delete this->ptr_;" << be_nl; - *os << "this->ptr_ = 0;" << be_nl; - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - os->indent (); - *os << "ACE_INLINE " << node->name () << " *" << be_nl; - *os << fname << "::_retn (void)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << node->name () << " *tmp = this->ptr_;" << be_nl; - *os << "this->ptr_ = 0;" << be_nl; - *os << "return tmp;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // the additional ptr () member function - os->indent (); - *os << "ACE_INLINE " << node->name () << " *" << be_nl; - *os << fname << "::ptr (void) const" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - return 0; -} - -int -be_visitor_sequence_ci::gen_out_impl (be_sequence *node) -{ - TAO_OutStream *os; // output stream - char fname [NAMEBUFSIZE]; // to hold the full and - char lname [NAMEBUFSIZE]; // local _out names - be_type *bt; // base type - - - ACE_OS::memset (fname, '\0', NAMEBUFSIZE); - ACE_OS::sprintf (fname, "%s_out", node->fullname ()); - - ACE_OS::memset (lname, '\0', NAMEBUFSIZE); - ACE_OS::sprintf (lname, "%s_out", node->local_name ()->get_string ()); - - os = this->ctx_->stream (); - - // retrieve base type - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "gen_out_impl - " - "Bad element type\n"), -1); - } - - // generate the out implementation in the inline file - - os->indent (); // start with whatever was our current indent level - - *os << "// *************************************************************" - << be_nl; - *os << "// Inline operations for class " << fname << be_nl; - *os << "// *************************************************************\n\n"; - - // constr from a pointer - os->indent (); - *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (" << node->name () << " *&p)" << be_nl; - *os << " : ptr_ (p)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "this->ptr_ = 0;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // constructor from _var & - os->indent (); - *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (" << node->name () << - "_var &p) // constructor from _var" << be_nl; - *os << " : ptr_ (p.out ())" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "delete this->ptr_;" << be_nl; - *os << "this->ptr_ = 0;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // copy constructor - os->indent (); - *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (const " << fname << - " &p) // copy constructor" << be_nl; - *os << " : ptr_ (ACE_const_cast (" << fname - << "&,p).ptr_)" << be_nl; - *os << "{}\n\n"; - - // assignment operator from _out & - os->indent (); - *os << "ACE_INLINE " << fname << " &" << be_nl; - *os << fname << "::operator= (const " << fname << - " &p)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "this->ptr_ = ACE_const_cast (" << fname - << "&,p).ptr_;" << be_nl; - *os << "return *this;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // assignment from _var is not allowed by a private declaration - - // assignment operator from pointer - os->indent (); - *os << "ACE_INLINE " << fname << " &" << be_nl; - *os << fname << "::operator= (" << node->name () << - " *p)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "this->ptr_ = p;" << be_nl; - *os << "return *this;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // other extra methods - cast operator () - os->indent (); - *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator " << node->name () << - " *&() // cast" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // ptr function - os->indent (); - *os << "ACE_INLINE " << node->name () << " *&" << be_nl; - *os << fname << "::ptr (void) // ptr" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // operator -> - os->indent (); - *os << "ACE_INLINE " << node->name () << " *" << be_nl; - *os << fname << "::operator-> (void)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_;\n"; - os->decr_indent (); - *os << "}\n\n"; - - // sequence has an additional method - os->indent (); - *os << "ACE_INLINE "; - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQELEM_RETTYPE_CI); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "gen_out_impl - " - "Bad visitor\n"), -1); - } - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_ci::" - "gen_out_impl - " - "[] ret type gen failed\n"), - -1); - } - delete visitor; - - *os << be_nl; - *os << fname << "::operator[] (CORBA::ULong index)" << be_nl; - *os << "{\n"; - os->incr_indent (); - *os << "return this->ptr_->operator[] (index);\n"; - os->decr_indent (); - *os << "}\n\n"; - - return 0; -} diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp deleted file mode 100644 index e656f71cc67..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ /dev/null @@ -1,283 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// sequence_cs.cpp -// -// = DESCRIPTION -// Visitor generating code for Sequences in the client stubs file -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -#include "idl.h" -#include "idl_extern.h" -#include "be.h" - -#include "be_visitor_sequence.h" - -ACE_RCSID(be_visitor_sequence, sequence_cs, "$Id$") - - -// ************************************************************ -// Root visitor for client stub class -// ************************************************************ - -be_visitor_sequence_cs::be_visitor_sequence_cs (be_visitor_context *ctx) - : be_visitor_decl (ctx) -{ -} - -be_visitor_sequence_cs::~be_visitor_sequence_cs (void) -{ -} - -// XXXASG - this method is same as that in the _ch visitor. So we need some -// abstraction for this - -int -be_visitor_sequence_cs::gen_base_sequence_class (be_sequence *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - be_type *bt; - - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "gen_base_sequence_class - " - "Bad element type\n"), -1); - } - - os->gen_ifdef_AHETI(); - - // this is the instantiation branch - *os << node->instance_name (); - - os->gen_else_AHETI(); - - // generate the appropriate sequence type - switch (node->managed_type ()) - { - case be_sequence::MNG_OBJREF: - if (node->unbounded ()) - *os << "TAO_Unbounded_Object_Sequence<"; - else - *os << "TAO_Bounded_Object_Sequence<"; - break; - case be_sequence::MNG_PSEUDO: - if (node->unbounded ()) - *os << "TAO_Unbounded_Pseudo_Sequence<"; - else - *os << "TAO_Bounded_Pseudo_Sequence<"; - break; - case be_sequence::MNG_STRING: - if (node->unbounded ()) - *os << "TAO_Unbounded_String_Sequence"; - else - *os << "TAO_Bounded_String_Sequence"; - break; - default: // not a managed type - if (node->unbounded ()) - *os << "TAO_Unbounded_Sequence<"; - else - *os << "TAO_Bounded_Sequence<"; - break; - } - - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BASE_CS); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - delete visitor; - - // find out if the sequence is of a managed type and if it is bounded or not - if (node->managed_type () == be_sequence::MNG_STRING) - { - if (!node->unbounded ()) - { - *os << "<" << node->max_size () << ">"; - } - } - else - { - if (node->unbounded ()) - { - *os << ">"; - } - else - { - *os << ", " << node->max_size () << ">"; - } - } - - os->gen_endif_AHETI(); - - return 0; -} - -int be_visitor_sequence_cs::visit_sequence (be_sequence *node) -{ - // generate the constructors - be_type *bt; // type node - TAO_OutStream *os = this->ctx_->stream (); - - if (node->cli_stub_gen () || node->imported ()) - return 0; - - // generate the ifdefined macro for the sequence type - os->gen_ifdef_macro (node->flatname ()); - - os->indent (); // start with the current indentation level - - // retrieve the base type since we may need to do some code - // generation for the base type. - bt = be_type::narrow_from_decl (node->base_type ()); - if (!bt) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "Bad element type\n"), -1); - } - - *os << "// *************************************************************" - << be_nl - << "// " << node->name () << be_nl - << "// *************************************************************" - << be_nl << be_nl; - - // default constructor - *os << node->name () << "::" << node->local_name () << " (void)" << be_nl - << "{}" << be_nl; - - // for unbounded sequences, we have a different set of constructors - if (node->unbounded ()) - { - *os << node->name () << "::" << node->local_name () - << " (CORBA::ULong max) // uses max size" << be_nl - << " : "; - - // pass it to the base constructor - if (this->gen_base_sequence_class (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for base sequence class\n"), -1); - } - - - *os << " (max)" << be_nl - << "{}" << be_nl; - } - - // constructor with the buffer - *os << node->name () << "::" << node->local_name () << " ("; - if (node->unbounded ()) - { - *os << "CORBA::ULong max, "; // unbounded seq takes this extra parameter - } - *os << "CORBA::ULong length, "; - // generate the base type for the buffer - be_visitor_context ctx (*this->ctx_); - ctx.state (TAO_CodeGen::TAO_SEQUENCE_BUFFER_TYPE_CS); - be_visitor *visitor = tao_cg->make_visitor (&ctx); - if (!visitor) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "Bad visitor\n"), -1); - } - - if (bt->accept (visitor) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "base type visit failed\n"), - -1); - } - delete visitor; - *os << " *buffer, CORBA::Boolean release)" << be_nl - << " : "; - // pass it to the base constructor - if (this->gen_base_sequence_class (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for base sequence class\n"), -1); - } - *os << " ("; - if (node->unbounded ()) - { - *os << "max, "; - } - *os << "length, buffer, release)" << be_nl - << "{}" << be_nl; - - // copy constructor - *os << node->name () << "::" << node->local_name () - << " (const " << node->local_name () - << " &seq) // copy ctor" << be_nl - << " : "; - // pass it to the base constructor - if (this->gen_base_sequence_class (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "codegen for base sequence class\n"), -1); - } - *os << " (seq)" << be_nl - << "{}" << be_nl; - - // destructor - *os << node->name () << "::~" << node->local_name () - << " (void) // dtor" << be_nl - << "{}\n\n"; - - 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 - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_TYPECODE_DEFN); - visitor = tao_cg->make_visitor (&ctx); - if (!visitor || (node->accept (visitor) == -1)) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_sequence_cs::" - "visit_sequence - " - "TypeCode definition failed\n" - ), -1); - } - } - - os->gen_endif (); - - return 0; -} |